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); } }