summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
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(())
}