diff options
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 25 |
1 files changed, 23 insertions, 2 deletions
@@ -1,5 +1,9 @@ extern crate json; extern crate rand; +extern crate serde; +extern crate serde_json; +#[macro_use] +extern crate serde_derive; mod actions; mod math; @@ -8,6 +12,7 @@ mod ships; mod placement; mod shooting; mod state; +mod knowledge; use math::*; use files::*; @@ -15,17 +20,23 @@ use ships::*; use placement::*; use shooting::*; use state::*; +use knowledge::*; use std::path::PathBuf; pub fn write_move(working_dir: PathBuf) -> Result<(), String> { let state_json = read_file(&working_dir)?; - println!("\n\n{}\n\n", state_json.pretty(2)); - let is_place_phase = state_json["Phase"] == 1; let map_size = State::map_size_from_json(&state_json)?; + let starting_knowledge = if is_place_phase { + Knowledge::new() + } + else { + read_knowledge()? + }; + let action = if is_place_phase { place_ships_randomly(map_size) } @@ -34,8 +45,18 @@ pub fn write_move(working_dir: PathBuf) -> Result<(), String> { shoot_randomly(&state) }; + let ending_knowledge = starting_knowledge + .with_action(action.clone()); + + write_knowledge(&ending_knowledge) + .map_err(|e| format!("Failed to write knowledge to file. Error: {}", e))?; + write_action(&working_dir, is_place_phase, action) .map_err(|e| format!("Failed to write action to file. Error: {}", e))?; + + println!("Input state:\n{}\n\n", state_json); + println!("Existing knowledge:\n{}\n\n", serde_json::to_string(&starting_knowledge).unwrap_or(String::from(""))); + println!("End of turn knowledge:\n{}\n\n", serde_json::to_string(&ending_knowledge).unwrap_or(String::from(""))); Ok(()) } |