4 use crossterm::{cursor, event, execute, queue, style, terminal};
5 use game::{Board, Dir::*, Pos};
9 let mut rng = rand::thread_rng();
11 let mut stdout = std::io::stdout();
12 queue!(stdout, terminal::EnterAlternateScreen, cursor::Hide).unwrap();
14 terminal::enable_raw_mode().unwrap();
16 let board = Board::new(Pos::new(4, 4));
17 board.spawn(&mut rng);
18 board.spawn(&mut rng);
25 terminal::Clear(terminal::ClearType::All),
27 style::SetAttribute(style::Attribute::Bold),
28 style::Print("Score: ".to_string()),
29 style::SetAttribute(style::Attribute::Reset),
30 style::Print(score.to_string()),
31 cursor::MoveToNextLine(1),
34 display::display_board(&mut stdout, &board).unwrap();
35 stdout.flush().unwrap();
37 if let Ok(evt) = event::read() {
39 event::Event::Key(event::KeyEvent { code, .. }) => match code {
40 event::KeyCode::Char(ch) => {
41 if let Some(sc) = board.step(match ch.to_ascii_lowercase() {
50 board.spawn(&mut rng);
62 terminal::disable_raw_mode().unwrap();
63 execute!(stdout, cursor::Show, terminal::LeaveAlternateScreen).unwrap();