diff options
author | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-09-12 14:42:09 +0200 |
---|---|---|
committer | Elias Fleckenstein <eliasfleckenstein@web.de> | 2022-09-12 14:42:09 +0200 |
commit | 751611307d449f1a853f395f745d7b6aa971c8ec (patch) | |
tree | 4773263e4c4679a9d6cda8dd8142fd9e9e6aa560 /src/main.rs | |
parent | 1a1df3f1613a5c8814c6eb6d3d91744cca63cf3b (diff) | |
download | rs2048-751611307d449f1a853f395f745d7b6aa971c8ec.tar.xz |
Port to crossterm
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/src/main.rs b/src/main.rs index a7b3e59..e04f92c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,31 +1,56 @@ pub mod display; pub mod game; +use crossterm::{cursor, event, execute, queue, terminal}; use game::{Board, Dir::*, Pos}; +use std::io::Write; fn main() { let mut rng = rand::thread_rng(); - let getch = getch::Getch::new(); - let board = Board::new(Pos::new(4, 4)); + let mut stdout = std::io::stdout(); + queue!(stdout, terminal::EnterAlternateScreen, cursor::Hide).unwrap(); + + terminal::enable_raw_mode().unwrap(); + + let board = Board::new(Pos::new(4, 4)); board.spawn(&mut rng); - clearscreen::clear().unwrap(); - print!("{board}"); - - while let Ok(ch) = getch.getch() { - if !board.step(match ch { - b'w' => Up, - b'a' => Left, - b's' => Down, - b'd' => Right, - b'q' => break, - _ => continue, - }) { - continue; - } + board.spawn(&mut rng); + + loop { + queue!( + stdout, + terminal::Clear(terminal::ClearType::All), + cursor::MoveTo(0, 0) + ) + .unwrap(); + display::display_board(&mut stdout, &board).unwrap(); + stdout.flush().unwrap(); - board.spawn(&mut rng); - clearscreen::clear().unwrap(); - print!("{board}"); + if let Ok(evt) = event::read() { + match evt { + event::Event::Key(event::KeyEvent { code, .. }) => match code { + event::KeyCode::Char(ch) => { + if board.step(match ch.to_ascii_lowercase() { + 'w' => Up, + 'a' => Left, + 's' => Down, + 'd' => Right, + 'q' => break, + _ => continue, + }) { + board.spawn(&mut rng); + } + } + _ => {} + }, + _ => {} + } + } else { + break; + } } + + terminal::disable_raw_mode().unwrap(); + execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen).unwrap(); } |