summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérémy Zurcher <jeremy@asynk.ch>2023-11-09 15:34:43 +0100
committerJérémy Zurcher <jeremy@asynk.ch>2023-11-09 15:34:43 +0100
commit964cba1f5640113b55a386239b9b8c698c9fafdf (patch)
tree1cca3a414e0e17db2d4ef54312c93be16deb421d
parent92d469aff0b7f02f692d37160e5d0230ce0beb87 (diff)
downloadcolonial-twilight-964cba1f5640113b55a386239b9b8c698c9fafdf.zip
colonial-twilight-964cba1f5640113b55a386239b9b8c698c9fafdf.tar.gz
FLNBotRules : add #pick_guerrillas_from
-rw-r--r--lib/colonial_twilight/fln_bot_rules.rb6
-rw-r--r--spec/fln_bot_rules_spec.rb7
2 files changed, 13 insertions, 0 deletions
diff --git a/lib/colonial_twilight/fln_bot_rules.rb b/lib/colonial_twilight/fln_bot_rules.rb
index f82cb39..4294136 100644
--- a/lib/colonial_twilight/fln_bot_rules.rb
+++ b/lib/colonial_twilight/fln_bot_rules.rb
@@ -234,6 +234,12 @@ module ColonialTwilight
h.reject { |_k, v| v.zero? } # FIXME in empty? maybe hide active guerrillas ?
end
+ def pick_guerrillas_from(board = @board)
+ return :available if board.available_fln_underground.positive?
+
+ _remove_guerrillas_priority(board.spaces).sample
+ end
+
# 1) place: outofplay -> available | bases -> guerrillas if choice
# 2) place: underground first unless from map then place active first flipped as underground
# 3) march: underground -> active, unless march would activate then move active first
diff --git a/spec/fln_bot_rules_spec.rb b/spec/fln_bot_rules_spec.rb
index 328b316..2abe2b8 100644
--- a/spec/fln_bot_rules_spec.rb
+++ b/spec/fln_bot_rules_spec.rb
@@ -651,6 +651,13 @@ describe ColonialTwilight::FLNBotRules do
expect(@rules._remove_guerrillas_priority([a, b, c, d], { d => true })[0]).to be b
end
+ it 'pick guerrillas from most guerrillas' do
+ @rules.board.spaces << Sector.new(fln_active: 2, fln_underground: 1)
+ @rules.board.spaces << (b = Sector.new(fln_active: 2, fln_underground: 2))
+ @rules.board.spaces << Sector.new(fln_active: 1, fln_underground: 2)
+ expect(@rules.pick_guerrillas_from(@rules.board)).to be b
+ end
+
it 'remove_from all' do
a = Sector.new(fln_active: 2, fln_underground: 1, fln_bases: 1)
h = @rules.remove_from(a, 6)