From 7dd0fe43fe7e72e5f56a8a61bbaec3a78399e6c8 Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Sat, 20 May 2017 18:01:43 +0200 Subject: Moved ship placement knowledge out to be one per ship --- src/lib.rs | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) (limited to 'src/lib.rs') diff --git a/src/lib.rs b/src/lib.rs index 81dd845..f84c172 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,6 +14,7 @@ mod shooting; mod state; mod knowledge; +use actions::*; use math::*; use files::*; use ships::*; @@ -30,34 +31,37 @@ pub fn write_move(working_dir: PathBuf) -> Result<(), String> { 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) + let (action, knowledge) = if is_place_phase { + placement(map_size) } else { let state = State::new(&state_json)?; - shoot_randomly(&state) + shoot(&state)? }; - - let ending_knowledge = starting_knowledge - .with_action(action.clone()); - - write_knowledge(&ending_knowledge) + + write_knowledge(&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(""))); + println!("Knowledge:\n{}\n\n", serde_json::to_string(&knowledge).unwrap_or(String::from(""))); Ok(()) } +fn placement(map_size: u16) -> (Action, Knowledge) { + let action = place_ships_randomly(map_size); + let knowledge = Knowledge::new(map_size, action.clone()); + + (action, knowledge) +} + +fn shoot(state: &State) -> Result<(Action, Knowledge), String> { + let old_knowledge = read_knowledge()?; + let knowledge = old_knowledge.resolve_last_action(&state); + let action = shoot_randomly(&state); + + Ok((action.clone(), knowledge.with_action(action))) +} + -- cgit v1.2.3