monsters move and attack the player
This commit is contained in:
15
src/main.rs
15
src/main.rs
@@ -1,5 +1,6 @@
|
||||
use std::io::Result;
|
||||
use std::io::stdout;
|
||||
use std::time::Instant;
|
||||
|
||||
use crossterm::{
|
||||
event::{self, KeyCode, KeyEventKind},
|
||||
@@ -30,6 +31,9 @@ mod level_generator;
|
||||
mod artifacts;
|
||||
mod monster;
|
||||
|
||||
/// length of a game frame in ms
|
||||
pub const FRAME_LENGTH: u64 = 100;
|
||||
|
||||
//
|
||||
fn main() -> Result<()> {
|
||||
let mut game = Game::new(Player::new(realname().as_str(), 10));
|
||||
@@ -39,6 +43,8 @@ fn main() -> Result<()> {
|
||||
let mut terminal = Terminal::new(CrosstermBackend::new(stdout()))?;
|
||||
terminal.clear()?;
|
||||
|
||||
let start_time = Instant::now();
|
||||
let mut ticks = 0;
|
||||
loop {
|
||||
terminal.draw(|frame| {
|
||||
let mut area = frame.size();
|
||||
@@ -57,7 +63,7 @@ fn main() -> Result<()> {
|
||||
.block(block)
|
||||
.wrap(Wrap { trim: true });
|
||||
frame.render_widget(paragraph, area);
|
||||
return
|
||||
return;
|
||||
}
|
||||
|
||||
if area.width > 80 {
|
||||
@@ -96,7 +102,7 @@ fn main() -> Result<()> {
|
||||
stats_area,
|
||||
);
|
||||
})?;
|
||||
if event::poll(std::time::Duration::from_millis(100))? {
|
||||
if event::poll(std::time::Duration::from_millis(FRAME_LENGTH))? {
|
||||
if let event::Event::Key(key) = event::read()? {
|
||||
if key.kind == KeyEventKind::Press && key.code == KeyCode::Char('q') {
|
||||
break;
|
||||
@@ -117,11 +123,13 @@ fn main() -> Result<()> {
|
||||
}
|
||||
}
|
||||
}
|
||||
game.update_level();
|
||||
game.update_level(ticks);
|
||||
if game.get_game_state() != GameState::RUNNING {
|
||||
break;
|
||||
}
|
||||
ticks += 1;
|
||||
}
|
||||
let playtime = start_time.elapsed();
|
||||
loop {
|
||||
let _ = terminal.draw(|frame| {
|
||||
let mut area = frame.size();
|
||||
@@ -151,6 +159,7 @@ fn main() -> Result<()> {
|
||||
};
|
||||
text += format!("\nYou gained {} experience.", game.get_player().get_experience()).as_str();
|
||||
text += format!("\nYou collected {} gold.", game.get_player().get_gold()).as_str();
|
||||
text += format!("\nYou played {} seconds.", playtime.as_secs()).as_str();
|
||||
let paragraph = Paragraph::new(text).block(block).wrap(Wrap { trim: true });
|
||||
frame.render_widget(paragraph, area);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user