From d2cc33043ad1ca2d67b59ec8ca78a825442e5cda Mon Sep 17 00:00:00 2001 From: Justin Worthe Date: Mon, 25 Jun 2018 21:17:11 +0200 Subject: Added rule on maximum two tesla towers --- src/strategy/monte_carlo.rs | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'src/strategy/monte_carlo.rs') diff --git a/src/strategy/monte_carlo.rs b/src/strategy/monte_carlo.rs index 18b8acc..dbeac2f 100644 --- a/src/strategy/monte_carlo.rs +++ b/src/strategy/monte_carlo.rs @@ -75,36 +75,31 @@ fn simulate_to_endstate(command_score: &mut CommandScore, settings: &Gam } fn random_player_move(settings: &GameSettings, state: &GameState, rng: &mut R) -> Command { - let all_buildings = state.player.sensible_buildings(settings); - random_move(&state.unoccupied_player_cells, &state.occupied_player_cells(), &all_buildings, rng) + let all_buildings = state.player.sensible_buildings(state.count_player_teslas() < 2, settings); + random_move(&state.unoccupied_player_cells, &all_buildings, rng) } fn random_opponent_move(settings: &GameSettings, state: &GameState, rng: &mut R) -> Command { - let all_buildings = state.opponent.sensible_buildings(settings); - random_move(&state.unoccupied_opponent_cells, &state.occupied_opponent_cells(), &all_buildings, rng) + let all_buildings = state.opponent.sensible_buildings(state.count_opponent_teslas() < 2, settings); + random_move(&state.unoccupied_opponent_cells, &all_buildings, rng) } -fn random_move(free_positions: &[Point], occupied_positions: &[Point], all_buildings: &[BuildingType], rng: &mut R) -> Command { +fn random_move(free_positions: &[Point], all_buildings: &[BuildingType], rng: &mut R) -> Command { let building_command_count = free_positions.len()*all_buildings.len(); - let deconstruct_count = occupied_positions.len(); let nothing_count = 1; - let number_of_commands = building_command_count + deconstruct_count + nothing_count; + let number_of_commands = building_command_count + nothing_count; let choice_index = rng.gen_range(0, number_of_commands); if choice_index == number_of_commands - 1 { Command::Nothing - } else if choice_index < building_command_count { + } else { Command::Build( free_positions[choice_index/all_buildings.len()], all_buildings[choice_index%all_buildings.len()] ) - } else { - Command::Deconstruct( - occupied_positions[choice_index-building_command_count] - ) } } @@ -161,7 +156,7 @@ impl CommandScore { } fn init_command_scores(settings: &GameSettings, state: &GameState) -> Vec { - let all_buildings = state.player.sensible_buildings(settings); + let all_buildings = state.player.sensible_buildings(state.count_player_teslas() < 2, settings); let building_command_count = state.unoccupied_player_cells.len()*all_buildings.len(); let deconstruct_count = (settings.size.x as usize *settings.size.y as usize / 2) - state.unoccupied_player_cells.len(); -- cgit v1.2.3