summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2022-09-12 14:42:09 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2022-09-12 14:42:09 +0200
commit751611307d449f1a853f395f745d7b6aa971c8ec (patch)
tree4773263e4c4679a9d6cda8dd8142fd9e9e6aa560 /src/main.rs
parent1a1df3f1613a5c8814c6eb6d3d91744cca63cf3b (diff)
downloadrs2048-751611307d449f1a853f395f745d7b6aa971c8ec.tar.xz
Port to crossterm
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs63
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();
}