diff options
-rw-r--r-- | TODO | 7 | ||||
-rw-r--r-- | src/lib.rs | 1 | ||||
-rw-r--r-- | src/tetris.rs | 26 |
3 files changed, 32 insertions, 2 deletions
@@ -7,4 +7,9 @@ Redo Piece data structure for easier rotation SFML input SFML graphics Select between debug(cli) and gui display -Next piece in gui
\ No newline at end of file +Next piece in gui +Add sounds (mostly for losing, winning and clearing a row) +Pause on lose focus +Also add a pause +Have a menu +Add to score on line clear
\ No newline at end of file @@ -25,6 +25,7 @@ impl Game { let mut tetris = tetris::Tetris::new(); let mut piece = piece::Piece::random(piece::Pos(0,0)); loop { + tetris.check_lines(); piece.r#move(piece::Dir::Down, &tetris); // Check if piece is dead diff --git a/src/tetris.rs b/src/tetris.rs index aa9b883..cd88231 100644 --- a/src/tetris.rs +++ b/src/tetris.rs @@ -26,7 +26,31 @@ impl Tetris { // Check each row of the grid // If one is full, remove it and drop // the rest of the grid down - pub fn check_lines() {} + pub fn check_lines(&mut self) { + // While there are full lines, continue to iterate + let mut row = 19; + while row > 0 { + let mut c = 0; + for x in self.grid.get(row as usize).expect("Out of bounds") { + if *x == 1 { + c += 1; + } else { + row -= 1; + continue + } + } + + // If the line is full remove it and + // move everything down + if c == 10 { + self.grid.remove(row as usize); + self.grid.insert(0, vec![0; 10]); + continue; + } + + row -= 1; + } + } pub fn get_grid_pos(&self, pos: piece::Pos) -> i8 { match self.grid.get(pos.0 as usize) { |