|
|
@@ -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 {
|