Chore: Refactoring, clean up.
This commit is contained in:
parent
ea6093bd0a
commit
2d19a53586
5 changed files with 50 additions and 62 deletions
29
src/main.rs
29
src/main.rs
|
@ -3,11 +3,14 @@ use std::time::Duration;
|
|||
|
||||
use rand::Rng;
|
||||
|
||||
use crate::Direction::{Down, Left, Right, Up};
|
||||
use crate::movables::{Movable, Ufo};
|
||||
use ufo::Ufo;
|
||||
|
||||
mod movables;
|
||||
use crate::movable::Movable;
|
||||
|
||||
mod movable;
|
||||
mod terminal;
|
||||
mod ufo;
|
||||
mod tank;
|
||||
|
||||
const WIDTH: u16 = 160;
|
||||
const HEIGHT: u16 = 40;
|
||||
|
@ -20,6 +23,7 @@ const DELAY: Duration = Duration::from_millis(10);
|
|||
const UFO_STR: &str = "<=000=>";
|
||||
const TANK_STR: &str = "⊆≡≣🠭≣≡⊇";
|
||||
|
||||
const VERSION: &str = env!("CARGO_PKG_VERSION");
|
||||
|
||||
fn main() {
|
||||
let terminal = terminal::setup();
|
||||
|
@ -42,14 +46,6 @@ fn main() {
|
|||
}
|
||||
thread::sleep(DELAY);
|
||||
}
|
||||
// for _ in 0..N_UFOS {
|
||||
// let mut ufo = Ufo::create();
|
||||
// while ufo.is_on_screen() {
|
||||
// ufo.mov(Direction::Left);
|
||||
// ufo.draw();
|
||||
// thread::sleep(DELAY);
|
||||
// }
|
||||
// }
|
||||
|
||||
terminal::restore(terminal);
|
||||
}
|
||||
|
@ -64,14 +60,3 @@ pub enum Direction {
|
|||
Up,
|
||||
Down,
|
||||
}
|
||||
|
||||
impl Direction {
|
||||
fn invert(&self) -> Direction {
|
||||
match self {
|
||||
Left => Right,
|
||||
Right => Left,
|
||||
Up => Down,
|
||||
Down => Up
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
8
src/movable.rs
Normal file
8
src/movable.rs
Normal file
|
@ -0,0 +1,8 @@
|
|||
use crate::Direction;
|
||||
|
||||
pub trait Movable<T> {
|
||||
fn create() -> T;
|
||||
fn mov(&mut self, direction: Direction);
|
||||
fn draw(&self);
|
||||
fn is_on_screen(&self) -> bool;
|
||||
}
|
25
src/tank.rs
Normal file
25
src/tank.rs
Normal file
|
@ -0,0 +1,25 @@
|
|||
use crate::movable::Movable;
|
||||
use crate::{Direction, TANK_STR, WIDTH};
|
||||
|
||||
pub struct Tank {
|
||||
column: u16,
|
||||
}
|
||||
|
||||
impl Movable<Tank> for Tank {
|
||||
fn create() -> Tank {
|
||||
let column = (WIDTH - TANK_STR.len() as u16) / 2;
|
||||
Tank { column }
|
||||
}
|
||||
|
||||
fn mov(&mut self, direction: Direction) {
|
||||
todo!("Implement tank movement")
|
||||
}
|
||||
|
||||
fn draw(&self) {
|
||||
todo!("Implement drawing tank")
|
||||
}
|
||||
|
||||
fn is_on_screen(&self) -> bool {
|
||||
todo!("Implement tank visibility check")
|
||||
}
|
||||
}
|
|
@ -5,7 +5,7 @@ use crossterm::cursor::{Hide, MoveTo, RestorePosition, SavePosition, Show};
|
|||
use crossterm::style::Print;
|
||||
use crossterm::terminal::{disable_raw_mode, enable_raw_mode, EnterAlternateScreen, LeaveAlternateScreen, SetSize, size};
|
||||
|
||||
use crate::{FOOTER_ROW, HEADER_ROW, HEIGHT, WIDTH};
|
||||
use crate::{FOOTER_ROW, HEADER_ROW, HEIGHT, VERSION, WIDTH};
|
||||
|
||||
pub struct Terminal {
|
||||
cols: u16,
|
||||
|
@ -42,7 +42,7 @@ pub fn restore(terminal: Terminal) {
|
|||
.expect("Failed to tear down terminal screen");
|
||||
}
|
||||
|
||||
pub fn write_header() {
|
||||
fn write_header() {
|
||||
queue!(
|
||||
stdout(),
|
||||
MoveTo(0,HEADER_ROW),
|
||||
|
@ -51,11 +51,11 @@ pub fn write_header() {
|
|||
stdout().flush().expect("Failed to write to terminal");
|
||||
}
|
||||
|
||||
pub fn write_footer() {
|
||||
fn write_footer() {
|
||||
queue!(
|
||||
stdout(),
|
||||
MoveTo(0,FOOTER_ROW),
|
||||
Print(center_text("v0.0.0-dev", None))
|
||||
Print(center_text(format!("v{}",VERSION).as_str(), None))
|
||||
).expect("Failed to write to terminal");
|
||||
stdout().flush().expect("Failed to write to terminal");
|
||||
}
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
use rand::Rng;
|
||||
|
||||
use crate::{Direction, MAX_UFO_ROW, MIN_UFO_ROW, TANK_STR, UFO_STR, WIDTH};
|
||||
use crate::{Direction, MAX_UFO_ROW, MIN_UFO_ROW, UFO_STR, WIDTH};
|
||||
use crate::Direction::{Down, Left, Right};
|
||||
use crate::movable::Movable;
|
||||
use crate::terminal::print_str_at;
|
||||
|
||||
pub trait Movable<T> {
|
||||
fn create() -> T;
|
||||
fn mov(&mut self, direction: Direction);
|
||||
fn draw(&self);
|
||||
fn is_on_screen(&self) -> bool;
|
||||
pub struct Ufo {
|
||||
row: u16,
|
||||
column: i16,
|
||||
direction: Direction,
|
||||
}
|
||||
|
||||
impl Movable<Ufo> for Ufo {
|
||||
|
@ -85,32 +84,3 @@ impl Movable<Ufo> for Ufo {
|
|||
self.column > -(UFO_STR.len() as i16) && self.column < WIDTH as i16
|
||||
}
|
||||
}
|
||||
|
||||
impl Movable<Tank> for Tank {
|
||||
fn create() -> Tank {
|
||||
let column = (WIDTH - TANK_STR.len() as u16) / 2;
|
||||
Tank { column }
|
||||
}
|
||||
|
||||
fn mov(&mut self, direction: Direction) {
|
||||
todo!("Implement tank movement")
|
||||
}
|
||||
|
||||
fn draw(&self) {
|
||||
todo!("Implement drawing tank")
|
||||
}
|
||||
|
||||
fn is_on_screen(&self) -> bool {
|
||||
todo!("Implement tank visibility check")
|
||||
}
|
||||
}
|
||||
|
||||
pub struct Ufo {
|
||||
row: u16,
|
||||
column: i16,
|
||||
direction: Direction,
|
||||
}
|
||||
|
||||
pub struct Tank {
|
||||
column: u16,
|
||||
}
|
Loading…
Reference in a new issue