diff options
Diffstat (limited to '2019-worms/src/main.rs')
-rw-r--r-- | 2019-worms/src/main.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/2019-worms/src/main.rs b/2019-worms/src/main.rs new file mode 100644 index 0000000..4f98e75 --- /dev/null +++ b/2019-worms/src/main.rs @@ -0,0 +1,46 @@ +use std::io::prelude::*; +use std::io::stdin; +use std::path::Path; + +use time::{Duration, PreciseTime}; + +use steam_powered_wyrm::command::{Action, Command}; +use steam_powered_wyrm::game; +use steam_powered_wyrm::json; +use steam_powered_wyrm::strategy::{choose_move, ScoreConfig}; + +fn main() { + let max_time = Duration::milliseconds(900); + let config = ScoreConfig::default(); + + let mut game_board = None; + for line in stdin().lock().lines() { + let start_time = PreciseTime::now(); + + let round_number = line.expect("Failed to read line from stdin: {}"); + + let command = match json::read_state_from_json_file(&Path::new(&format!( + "./rounds/{}/state.json", + round_number + ))) { + Ok(json_state) => match &mut game_board { + None => { + let new_board = game::GameBoard::new(json_state); + let command = choose_move(&new_board, &config, start_time, max_time); + game_board = Some(new_board); + command + } + Some(game_board) => { + game_board.update(json_state); + choose_move(&game_board, &config, start_time, max_time) + } + }, + Err(e) => { + #[cfg(feature = "logging")] + eprintln!("WARN: State file could not be parsed: {}", e); + Command::new(Action::DoNothing) + } + }; + println!("C;{};{}", round_number, command); + } +} |