Explorar o código

创建 7 个 Tetrimino

runningwater hai 1 ano
pai
achega
820fdc56c8
Modificáronse 2 ficheiros con 222 adicións e 0 borrados
  1. 7 0
      readme.md
  2. 215 0
      src/main.rs

+ 7 - 0
readme.md

@@ -0,0 +1,7 @@
+# The Tetris rules
+
+1. There is a grid with a height of 16 blocks and a width of 10 blocks.
+2. You have seven different **tetrimino** (a tetris piece) that are all composed of four blocks.
+3. A new **tetrimino** appears at the top of the game's grid every time the previous one cannot descend and more (because the block below is already occupied or bacause you're reched the game's floor).
+4. The game is over when a new **tetrimino** cannot appear anymore (because there is already a tetrimino at the top of the grid).
+5. Every time a line if full (all blocks are occupied by a tetrimino part), it disappear and all lines above descend by one line.

+ 215 - 0
src/main.rs

@@ -15,6 +15,221 @@ use sdl2::video::WindowContext;
 // Crate a texture with 32x32 size
 const TEXTURE_SIZE: u32 = 32;
 const SCORE_FILE_NAME: &str = "scores.txt";
+type Piece = Vec<Vec<u8>>;
+
+struct Tetrimino {
+    states: Vec<Piece>,
+    x: isize,
+    y: usize,
+    current_state: u8,
+}
+
+trait TetriminoGenerator {
+    fn new() -> Tetrimino;
+}
+
+struct TetriminoI;
+impl TetriminoGenerator for TetriminoI {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![1, 1, 1, 1],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 1, 0, 0],
+                    vec![0, 1, 0, 0],
+                    vec![0, 1, 0, 0],
+                    vec![0, 1, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoJ;
+impl TetriminoGenerator for TetriminoJ {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![2, 2, 2, 0],
+                    vec![2, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![2, 2, 0, 0],
+                    vec![0, 2, 0, 0],
+                    vec![0, 2, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 0, 2, 0],
+                    vec![2, 2, 2, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![2, 0, 0, 0],
+                    vec![2, 0, 0, 0],
+                    vec![2, 2, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoL;
+impl TetriminoGenerator for TetriminoL {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![3, 3, 3, 0],
+                    vec![0, 0, 3, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 3, 0, 0],
+                    vec![0, 3, 0, 0],
+                    vec![3, 3, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![3, 0, 0, 0],
+                    vec![3, 3, 3, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![3, 3, 0, 0],
+                    vec![3, 0, 0, 0],
+                    vec![3, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoO;
+impl TetriminoGenerator for Tetrimino {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![vec![
+                vec![4, 4, 0, 0],
+                vec![4, 4, 0, 0],
+                vec![0, 0, 0, 0],
+                vec![0, 0, 0, 0],
+            ]],
+            x: 5,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoS;
+impl TetriminoGenerator for TetriminoS {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![0, 5, 5, 0],
+                    vec![5, 5, 0, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 5, 0, 0],
+                    vec![0, 5, 5, 0],
+                    vec![0, 0, 5, 0],
+                    vec![0, 0, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoZ;
+impl TetriminoGenerator for TetriminoZ {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![6, 6, 0, 0],
+                    vec![0, 6, 6, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 0, 6, 0],
+                    vec![0, 6, 6, 0],
+                    vec![0, 6, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
+
+struct TetriminoT;
+impl TetriminoGenerator for TetriminoT {
+    fn new() -> Tetrimino {
+        Tetrimino {
+            states: vec![
+                vec![
+                    vec![7, 7, 7, 0],
+                    vec![0, 7, 0, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 7, 0, 0],
+                    vec![7, 7, 0, 0],
+                    vec![0, 7, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 7, 0, 0],
+                    vec![7, 7, 7, 0],
+                    vec![0, 0, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+                vec![
+                    vec![0, 7, 0, 0],
+                    vec![0, 7, 7, 0],
+                    vec![0, 7, 0, 0],
+                    vec![0, 0, 0, 0],
+                ],
+            ],
+            x: 4,
+            y: 0,
+            current_state: 0,
+        }
+    }
+}
 
 #[derive(Clone, Copy)]
 enum TextureColor {