diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/colonial_twilight/fln_bot_rules.rb | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/lib/colonial_twilight/fln_bot_rules.rb b/lib/colonial_twilight/fln_bot_rules.rb index cbe2145..1049b82 100644 --- a/lib/colonial_twilight/fln_bot_rules.rb +++ b/lib/colonial_twilight/fln_bot_rules.rb @@ -158,27 +158,30 @@ module ColonialTwilight spaces.select { |s| s.send(sym) == v } end + def available_fln_bases?(board = @board) + board.available_fln_bases.positive? + end + def may_add_base_in?(space) space.guerrillas > 2 && (space.fln_bases < (space.country? ? space.max_bases : 1)) end def max_placable_guerrillas_in?(space) - n = max_placable_guerrillas(space) - n = n.clamp(0, space.pop + 1 - space.guerrillas) if space.fln_bases.positive? - n + max_placable_guerrillas(space).clamp(0, space.fln_bases.positive? ? (space.pop + 1 - space.guerrillas) : 666) 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 + # 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 + # applied as last filter in FLNBot#_place_fln def place_guerrillas(spaces) # 4) support -> with friendly pieces -> random - l0 = (l0 = spaces.select(&:support?)).empty? ? spaces : l0 - l1 = (l1 = l0.select { |s| s.guerrillas.positive? }).empty? ? l0 : l1 - l1.shuffle + f = _filter(spaces, &:support?) + _filter(f) { |s| s.guerrillas.positive? }.shuffle end + # FLNBot#_place_fln_in def removable_guerrillas(space) # 5) active only, leave 2 guerrillas at base or support a = (a = space.fln_underground) > 2 ? 2 : a @@ -190,6 +193,7 @@ module ColonialTwilight spaces.reject { |s| steps.key?(s) } end + # FLNBot#_place_fln_in def remove_guerrillas_priority(spaces, steps) # 5) #removable_guerrillas then most guerrillas first return [] if (l = not_selected(spaces, steps).select { |s| removable_guerrillas(s).positive? }).empty? @@ -197,6 +201,7 @@ module ColonialTwilight _max(l, :guerrillas).shuffle end + # not used yet def remove_from(space, num = 1) # 6) remove active -> underground -> base h = {} @@ -206,12 +211,9 @@ module ColonialTwilight h end - def remove_gov(num = 1) - # 7) map -> availabe (base -> french -> algerian; troops -> police) - end - - # 8) reduce : commitment -> support -> france track -> gov resource - # 9) shift : support -> oppose | best combined; remove terror only if also shift - # 10) random + # 7) remove gov : map -> availabe (base -> french -> algerian; troops -> police) + # 8) reduce : commitment -> support -> france track -> gov resource + # 9) shift : support -> oppose | best combined; remove terror only if also shift + # 10) random end end |