Basic Tetris gameplay working
This commit is contained in:
parent
c8e329ff6c
commit
6a780efa4a
@ -18,6 +18,7 @@ struct Tetris {
|
|||||||
blocks: BlockGrid,
|
blocks: BlockGrid,
|
||||||
ticks: usize,
|
ticks: usize,
|
||||||
paused: bool,
|
paused: bool,
|
||||||
|
lines_removed: u32,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Tetris {
|
impl Tetris {
|
||||||
@ -27,6 +28,7 @@ impl Tetris {
|
|||||||
blocks: BlockGrid::new(),
|
blocks: BlockGrid::new(),
|
||||||
ticks: 0,
|
ticks: 0,
|
||||||
paused: false,
|
paused: false,
|
||||||
|
lines_removed: 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,6 +79,9 @@ impl Application for Tetris {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let lines_removed = self.blocks.clear_pieces();
|
||||||
|
self.lines_removed += lines_removed;
|
||||||
Command::none()
|
Command::none()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,6 +349,39 @@ impl BlockGrid {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns number of lines removed
|
||||||
|
fn clear_pieces(&mut self) -> u32 {
|
||||||
|
let mut new_state = [[None; 20]; 10];
|
||||||
|
let mut offset = 0;
|
||||||
|
for row in (0..=19).rev() {
|
||||||
|
let mut all_filled = true;
|
||||||
|
let mut all_empty = true;
|
||||||
|
for col in 0..10 {
|
||||||
|
if self.state[col][row].is_none() {
|
||||||
|
all_filled = false;
|
||||||
|
}
|
||||||
|
if self.state[col][row].is_some() {
|
||||||
|
all_empty = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if all_filled && !all_empty {
|
||||||
|
offset += 1;
|
||||||
|
} else {
|
||||||
|
if offset != 0 {
|
||||||
|
println!("Offset {} row {}", offset, row);
|
||||||
|
}
|
||||||
|
for col in 0..10 {
|
||||||
|
new_state[col][row+offset] = self.state[col][row];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
self.state = new_state;
|
||||||
|
println!("OFFSET: {}", offset);
|
||||||
|
offset as u32
|
||||||
|
}
|
||||||
|
|
||||||
fn iter<'a>(&'a self) -> BlockGridIter<'a> {
|
fn iter<'a>(&'a self) -> BlockGridIter<'a> {
|
||||||
let active_piece_blocks = self.active_piece.as_ref().map(|piece| {
|
let active_piece_blocks = self.active_piece.as_ref().map(|piece| {
|
||||||
let b = Self::piece_blocks(piece);
|
let b = Self::piece_blocks(piece);
|
||||||
|
Loading…
Reference in New Issue
Block a user