summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Worthe <justin@worthe-it.co.za>2018-05-12 15:14:35 +0200
committerJustin Worthe <justin@worthe-it.co.za>2018-05-12 15:14:35 +0200
commitd6bec472109806eea2ad86741edd3eb1571b872c (patch)
treea77ba566d806872e6ece1e6affa00550ffb6fbb9
parent2d6ee1dddda6a51692adff10160bb93a76430b0b (diff)
Brought random crate back
-rw-r--r--Cargo.toml2
-rw-r--r--src/lib.rs2
-rw-r--r--src/strategy/sample.rs9
3 files changed, 10 insertions, 3 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 7628f0f..12a5214 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -6,3 +6,5 @@ version = "1.0.0"
serde_derive = "1.0.43"
serde = "1.0.43"
serde_json = "1.0.16"
+
+rand = "0.4.2"
diff --git a/src/lib.rs b/src/lib.rs
index 158805a..a09f999 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -4,6 +4,8 @@ extern crate serde_json;
#[macro_use]
extern crate serde_derive;
+extern crate rand;
+
pub mod json;
pub mod engine;
pub mod strategy;
diff --git a/src/strategy/sample.rs b/src/strategy/sample.rs
index 3a311e0..2dad924 100644
--- a/src/strategy/sample.rs
+++ b/src/strategy/sample.rs
@@ -1,13 +1,16 @@
use engine;
use engine::command::*;
+use rand::{thread_rng, Rng};
pub fn choose_move(settings: &engine::settings::GameSettings, state: &engine::GameState) -> Command {
+ let mut rng = thread_rng();
+
if state.player.can_afford_defence_buildings(settings) {
for y in 0..settings.size.y {
if is_under_attack(state, y) {
let p_options = state.unoccupied_player_cells_in_row(settings, y);
- if let Some(&p) = p_options.first() {
+ if let Some(&p) = rng.choose(&p_options) {
return Command::Build(p, BuildingType::Defence);
}
}
@@ -16,9 +19,9 @@ pub fn choose_move(settings: &engine::settings::GameSettings, state: &engine::Ga
if state.player.can_afford_all_buildings(settings) {
let options = state.unoccupied_player_cells(settings);
- let option = options.first();
+ let option = rng.choose(&options);
let buildings = [BuildingType::Attack, BuildingType::Defence, BuildingType::Energy];
- let building = buildings.first();
+ let building = rng.choose(&buildings);
match (option, building) {
(Some(&p), Some(&building)) => Command::Build(p, building),
_ => Command::Nothing