@@ 52,7 52,11 @@ fn main() {
options.short_usage(APP_NAME)
} else {
let mut h = options.usage(APP_NAME);
- h.push_str("\nControls:\n q exit the game\n");
+ h.push_str("\n");
+ h.push_str("Controls:\n");
+ h.push_str(" q exit the game\n");
+ h.push_str(" p pause/resume\n");
+ h.push_str(" n next generation");
h
};
println!("{}", help);
@@ 165,14 169,20 @@ fn main() {
let mut game = Game { cells: cells, dead: dead, alive: alive, border: border, window: game_window };
let mut quit = false;
+ let mut paused = false;
let mut last_time = time::precise_time_s();
-
+ let mut render = |delta| {
+ game.render(delta);
+ refresh();
+ wrefresh(game.window);
+ };
while !quit {
let time = time::precise_time_s();
+ let delta = time - last_time;
- game.render(time - last_time);
- refresh();
- wrefresh(game.window);
+ if !paused {
+ render(delta);
+ }
last_time = time::precise_time_s();
let render_duration = last_time - time;
@@ 182,9 192,11 @@ fn main() {
std::thread::sleep_ms((sleep * 1000.) as u32);
}
- let ch = getch();
- if ch == 'q' as i32 {
- quit = true;
+ match getch() as u8 as char {
+ 'q' => quit = true,
+ 'p' => paused = !paused,
+ 'n' if paused => render(delta),
+ _ => {}
}
}