diff options
author | Justin Worthe <justin.worthe@gmail.com> | 2017-05-20 18:01:43 +0200 |
---|---|---|
committer | Justin Worthe <justin.worthe@gmail.com> | 2017-05-20 18:01:43 +0200 |
commit | 7dd0fe43fe7e72e5f56a8a61bbaec3a78399e6c8 (patch) | |
tree | 4b1cfd0375609019c0e1a07f34bf8e5574ffce84 /src/lib.rs | |
parent | 10c8ceb168e86a58e38086691ddd519bac63ff03 (diff) |
Moved ship placement knowledge out to be one per ship
Diffstat (limited to 'src/lib.rs')
-rw-r--r-- | src/lib.rs | 40 |
1 files changed, 22 insertions, 18 deletions
@@ -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))) +} + |