aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO7
-rw-r--r--src/lib.rs1
-rw-r--r--src/tetris.rs26
3 files changed, 32 insertions, 2 deletions
diff --git a/TODO b/TODO
index cd08bb2..9128469 100644
--- a/TODO
+++ b/TODO
@@ -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
diff --git a/src/lib.rs b/src/lib.rs
index 03c67f3..bb9d97d 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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) {