1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
use crate::generation::*;
use colored::Colorize;
use crossterm::{
cursor::{Hide, MoveTo, Show},
event,
event::{poll, Event, KeyCode, KeyEvent},
style::Stylize,
terminal,
terminal::{EnterAlternateScreen, LeaveAlternateScreen},
ExecutableCommand, QueueableCommand,
};
use rand::{thread_rng, Rng};
use std::{
io::{self, Write},
thread::sleep,
time::Duration,
};
pub fn run() {
let mut stdout = io::stdout();
let mut frame: Gen = new_gen();
let mut nxt;
terminal::enable_raw_mode().unwrap();
stdout.execute(EnterAlternateScreen).unwrap();
stdout.execute(Hide).unwrap();
'gameloop: loop {
while event::poll(Duration::default()).unwrap() {
if let Event::Key(key_event) = event::read().unwrap() {
match key_event.code {
KeyCode::Esc | KeyCode::Char('q') => {
break 'gameloop;
}
KeyCode::Char('s') => {
frame = new_gen();
render_gen(&mut stdout, &frame)
}
KeyCode::Char('n') => {
nxt = next_gen(&mut frame);
render_gen(&mut stdout, &nxt)
}
KeyCode::Char('a') => 'animate: loop {
nxt = next_gen(&mut frame);
render_gen(&mut stdout, &nxt);
sleep(Duration::from_millis(16));
if (poll(Duration::from_millis(1))).unwrap() {
if let Event::Key(k) = event::read().unwrap() {
match k.code {
KeyCode::Char('q') => break 'animate,
_ => {}
}
}
} else {
}
},
_ => {}
}
}
}
}
stdout.execute(Show).unwrap();
stdout.execute(LeaveAlternateScreen).unwrap();
terminal::disable_raw_mode().unwrap();
}
|