summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorJustin Worthe <justin.worthe@gmail.com>2017-05-14 21:49:48 +0200
committerJustin Worthe <justin.worthe@gmail.com>2017-05-14 21:49:48 +0200
commit10c8ceb168e86a58e38086691ddd519bac63ff03 (patch)
treea40b433e7cfad492a60b37c5a337758ffe7d1786 /src/lib.rs
parent25a551316e27f4cc52c160d099db9cc3673b3421 (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.rs25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 5dda02f..81dd845 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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(())
}