diff options
author | Justin Worthe <justin.worthe@gmail.com> | 2017-05-14 21:49:48 +0200 |
---|---|---|
committer | Justin Worthe <justin.worthe@gmail.com> | 2017-05-14 21:49:48 +0200 |
commit | 10c8ceb168e86a58e38086691ddd519bac63ff03 (patch) | |
tree | a40b433e7cfad492a60b37c5a337758ffe7d1786 /src/lib.rs | |
parent | 25a551316e27f4cc52c160d099db9cc3673b3421 (diff) |
Added model for knowledge of the game's state
Will be useful to track deductions that have already been made.
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(()) } |