From e5c32b3855c3e5508c489816eb8d1abf49298826 Mon Sep 17 00:00:00 2001 From: Edward Shen Date: Thu, 19 Mar 2020 19:47:50 -0400 Subject: [PATCH] more work --- src/game.rs | 15 +++++- src/main.rs | 8 ++-- src/srs.rs | 130 ++++++++++++++++++++++++++++------------------------ 3 files changed, 88 insertions(+), 65 deletions(-) diff --git a/src/game.rs b/src/game.rs index 0e74f03..f8324ac 100644 --- a/src/game.rs +++ b/src/game.rs @@ -12,7 +12,18 @@ pub struct Game { points: u64, } -trait PlayerControllable { +impl Default for Game { + fn default() -> Self { + Game { + playfield: PlayField::new(), + rotation_system: RS::default(), + level: 0, + points: 0, + } + } +} + +trait Controllable { fn move_left(&mut self); fn move_up(&mut self); fn move_right(&mut self); @@ -23,7 +34,7 @@ trait PlayerControllable { fn hold(&mut self); } -impl PlayerControllable for Game { +impl Controllable for Game { fn move_left(&mut self) {} fn move_up(&mut self) {} fn move_right(&mut self) {} diff --git a/src/main.rs b/src/main.rs index af380c0..55ae187 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,6 @@ +use game::Game; +use srs::SRS; + mod game; mod playfield; mod random; @@ -15,8 +18,5 @@ pub enum Tetromino { } fn main() { - let mut rs = random::RandomSystem::new(); - for _ in 0..1000000 { - rs.get_tetrino(); - } + let mut game: Game = Game::default(); } diff --git a/src/srs.rs b/src/srs.rs index cde06c7..fccbd93 100644 --- a/src/srs.rs +++ b/src/srs.rs @@ -1,7 +1,7 @@ use crate::playfield::{PlayField, Position}; use crate::Tetromino; -#[derive(Copy)] +#[derive(Copy, Clone)] pub struct Offset { x: i8, y: i8, @@ -13,6 +13,8 @@ pub enum RotationDirection { } pub trait RotationSystem { + fn default() -> Self; + fn get_rotation_offset( piece: &Tetromino, center: &Position, @@ -23,7 +25,17 @@ pub trait RotationSystem { pub struct SRS {} +impl SRS { + pub fn new() -> Self { + Self {} + } +} + impl RotationSystem for SRS { + fn default() -> Self { + SRS::new() + } + fn get_rotation_offset( piece: &Tetromino, center: &Position, @@ -43,69 +55,69 @@ enum Rotation { } struct OffsetData { - O: Vec, - R: Vec, - U: Vec, - L: Vec, + // O: &[Offset], +// R: &[Offset], +// U: &[Offset], +// L: &[Offset], } impl OffsetData { pub fn apply_right_rotation() {} } -const JLSTZOffsetData: OffsetData = OffsetData { - O: vec![Offset { x: 0, y: 0 }], - R: vec![ - Offset { x: 0, y: 0 }, - Offset { x: 1, y: 0 }, - Offset { x: 1, y: -1 }, - Offset { x: 0, y: 2 }, - Offset { x: 1, y: 2 }, - ], - U: vec![Offset { x: 0, y: 0 }], - L: vec![ - Offset { x: 0, y: 0 }, - Offset { x: -1, y: 0 }, - Offset { x: -1, y: -1 }, - Offset { x: 0, y: 2 }, - Offset { x: -1, y: 2 }, - ], -}; +// static JLSTZOffsetData: OffsetData = OffsetData { +// O: vec![Offset { x: 0, y: 0 }], +// R: vec![ +// Offset { x: 0, y: 0 }, +// Offset { x: 1, y: 0 }, +// Offset { x: 1, y: -1 }, +// Offset { x: 0, y: 2 }, +// Offset { x: 1, y: 2 }, +// ], +// U: vec![Offset { x: 0, y: 0 }], +// L: vec![ +// Offset { x: 0, y: 0 }, +// Offset { x: -1, y: 0 }, +// Offset { x: -1, y: -1 }, +// Offset { x: 0, y: 2 }, +// Offset { x: -1, y: 2 }, +// ], +// }; -const IOffsetData: OffsetData = OffsetData { - O: vec![ - Offset { x: 0, y: 0 }, - Offset { x: -1, y: 0 }, - Offset { x: 2, y: 0 }, - Offset { x: -1, y: 0 }, - Offset { x: 2, y: 0 }, - ], - R: vec![ - Offset { x: -1, y: 0 }, - Offset { x: 0, y: 0 }, - Offset { x: 0, y: 0 }, - Offset { x: 0, y: 1 }, - Offset { x: 0, y: -2 }, - ], - U: vec![ - Offset { x: -1, y: 1 }, - Offset { x: 1, y: 1 }, - Offset { x: -2, y: 1 }, - Offset { x: 1, y: 0 }, - Offset { x: -2, y: 0 }, - ], - L: vec![ - Offset { x: 0, y: 1 }, - Offset { x: 0, y: 1 }, - Offset { x: 0, y: 1 }, - Offset { x: 0, y: -1 }, - Offset { x: 0, y: 2 }, - ], -}; +// static IOffsetData: OffsetData = OffsetData { +// O: vec![ +// Offset { x: 0, y: 0 }, +// Offset { x: -1, y: 0 }, +// Offset { x: 2, y: 0 }, +// Offset { x: -1, y: 0 }, +// Offset { x: 2, y: 0 }, +// ], +// R: vec![ +// Offset { x: -1, y: 0 }, +// Offset { x: 0, y: 0 }, +// Offset { x: 0, y: 0 }, +// Offset { x: 0, y: 1 }, +// Offset { x: 0, y: -2 }, +// ], +// U: vec![ +// Offset { x: -1, y: 1 }, +// Offset { x: 1, y: 1 }, +// Offset { x: -2, y: 1 }, +// Offset { x: 1, y: 0 }, +// Offset { x: -2, y: 0 }, +// ], +// L: vec![ +// Offset { x: 0, y: 1 }, +// Offset { x: 0, y: 1 }, +// Offset { x: 0, y: 1 }, +// Offset { x: 0, y: -1 }, +// Offset { x: 0, y: 2 }, +// ], +// }; -const OOffsetData: OffsetData = OffsetData { - O: vec![Offset { x: 0, y: 0 }], - R: vec![Offset { x: 0, y: -1 }], - U: vec![Offset { x: -1, y: -1 }], - L: vec![Offset { x: -1, y: 0 }], -}; +// static OOffsetData: OffsetData = OffsetData { +// O: vec![Offset { x: 0, y: 0 }], +// R: vec![Offset { x: 0, y: -1 }], +// U: vec![Offset { x: -1, y: -1 }], +// L: vec![Offset { x: -1, y: 0 }], +// };