blob: 123475b72542e87ecc051c7f321a47b668522bfd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
#! /usr/bin/env ruby
# -*- coding: UTF-8 -*-
module ColonialTwilight
class Player
attr_reader :faction
def initialize game, faction
@game = game
@board = game.board
@faction = faction
@debug = game.options.debug_bot
@possible_actions = nil
end
def _init
@card = @game.current_card
@operation = nil
@operation_count = 0
@special_activity = nil
@special_activity_count = 0
@selected_spaces = []
@expended_resources = 0
end
def conducted_action
a = nil
if not @card.nil?
raise "Operation #{@operation} conducted with event" if not @operation.nil?
raise "Special Activity #{@special_activity} conducted with event" if not @special_activity.nil?
a = :event
elsif not @special_activity.nil?
a = :ope_special
else
if @operation_count == 0
a = :pass
elsif @operation_count == 1
a = :ope_limited
else
a = :ope_only
end
end
raise "#{a} has been conducted but is not allowed" if not @possible_actions.include? a
puts "Conducted action is : #{a}" if @debug
a
end
private
def first_eligible?
@game.actions.size == 0
# @possible_actions.length == 5
end
def may_play_event?
not @card.nil? and @possible_actions.include? :event
end
def limited_ope_only?
(@possible_actions.size == 2 and @possible_actions.include? :ope_limited)
end
def limited_ope_done?
limited_ope_only? and @operation_count == 1
end
def may_conduct_special_activity? sp
r = @possible_actions.include? :ope_special
r &= (sp == @special_activity) if not @special_activity.nil?
r
end
def operation_done ope
raise "try to conduct ope #{ope} over #{@operation}" if not (@operation.nil? or @operation == ope)
raise "cannot conduct another" if @operation_count > 0 and limited_ope_only?
@card = nil
@operation = ope
@operation_count += 1
end
def special_activity_done sp
raise "try to conduct special activity #{sp} over #{@special_activity}" if not (@special_activity.nil? or @special_activity == sp)
raise "cannot conduct a special activity" if not may_conduct_special_activity? sp
@card = nil
@special_activity = sp
@special_activity_count += 1
end
def debug_selected_spaces
puts "\tselected spaces :: " + @selected_spaces.collect(){|s| s.is_a?(Symbol) ? s.to_s : s.name}.join(' :: ') if @debug
end
end
end
|