summaryrefslogtreecommitdiff
path: root/src/knowledge.rs
diff options
context:
space:
mode:
authorJustin Worthe <justin@worthe-it.co.za>2017-07-12 21:42:31 +0200
committerJustin Worthe <justin@worthe-it.co.za>2017-07-12 21:42:31 +0200
commitc14a74190d72ced3e6fdbf718fce25b4a0e8cc8f (patch)
tree6a11ae03b65d581ded5c9afb0d9ae84efc7b0fc0 /src/knowledge.rs
parente09f191ac88fadd02d2ecf4f7a0aea76a19e3d0a (diff)
Fixed bugs in knowledge update
Diffstat (limited to 'src/knowledge.rs')
-rw-r--r--src/knowledge.rs10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/knowledge.rs b/src/knowledge.rs
index f271dbe..44693e5 100644
--- a/src/knowledge.rs
+++ b/src/knowledge.rs
@@ -114,7 +114,7 @@ impl Knowledge {
fn to_hits_and_misses(points: Vec<Option<Point>>, state: &State) -> (Vec<Point>, Vec<Point>, Vec<Point>) {
let points = points.iter().filter_map(|&p| p).collect::<Vec<_>>();
- let hits = points.iter().filter(|p| !state.opponent_map.cells[p.x as usize][p.y as usize].damaged).cloned().collect();
+ let hits = points.iter().filter(|p| state.opponent_map.cells[p.x as usize][p.y as usize].damaged).cloned().collect();
let misses = points.iter().filter(|p| state.opponent_map.cells[p.x as usize][p.y as usize].missed).cloned().collect();
let unknown = points.iter().filter(|p| !state.opponent_map.cells[p.x as usize][p.y as usize].missed && !state.opponent_map.cells[p.x as usize][p.y as usize].damaged).cloned().collect();
@@ -297,9 +297,11 @@ impl OpponentMapKnowledge {
if knowledge.possible_placements.len() == 1 {
let ref true_placement = knowledge.possible_placements[0];
for p in true_placement.points_on_ship() {
- self.cells[p.x as usize][p.y as usize].known_ship = Some(true_placement.ship);
+ if self.cells[p.x as usize][p.y as usize].known_ship == None {
+ self.cells[p.x as usize][p.y as usize].known_ship = Some(true_placement.ship);
+ any_changes = true;
+ }
}
- any_changes = true;
}
}
any_changes
@@ -323,7 +325,7 @@ impl OpponentMapKnowledge {
let cells_copy = self.cells.clone();
for knowledge in self.ships.values_mut() {
- knowledge.possible_placements.retain(|x| sunk_ships.contains(&x.ship) && x.touches_any_point(&must_touch_any) && x.all_are_hits(&cells_copy));
+ knowledge.possible_placements.retain(|x| !sunk_ships.contains(&x.ship) || (x.touches_any_point(&must_touch_any) && x.all_are_hits(&cells_copy)));
}
}