summaryrefslogtreecommitdiffstats
path: root/lib/colonial_twilight
diff options
context:
space:
mode:
Diffstat (limited to 'lib/colonial_twilight')
-rw-r--r--lib/colonial_twilight/fln_bot.rb91
-rw-r--r--lib/colonial_twilight/game.rb9
-rw-r--r--lib/colonial_twilight/gov_player.rb23
-rw-r--r--lib/colonial_twilight/player.rb80
4 files changed, 105 insertions, 98 deletions
diff --git a/lib/colonial_twilight/fln_bot.rb b/lib/colonial_twilight/fln_bot.rb
index 42d3883..ae4536b 100644
--- a/lib/colonial_twilight/fln_bot.rb
+++ b/lib/colonial_twilight/fln_bot.rb
@@ -3,100 +3,13 @@
module ColonialTwilight
- class Player
-
- attr_reader :faction
-
- def initialize game, faction
- @game = game
- @board = game.board
- @ui = game.ui
- @faction = faction
- @debug = game.options.debug_bot
- @possible_actions = nil
- 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
-
- end
-
# Country.independant
class FLNBot < Player
- def play card, possible_actions
- @card = card
+ def play possible_actions
@possible_actions = possible_actions
-
- @operation = nil
- @operation_count = 0
- @special_activity = nil
- @special_activity_count = 0
-
- @selected_spaces = []
- @expended_resources = 0
-
+ _init
_start
end
diff --git a/lib/colonial_twilight/game.rb b/lib/colonial_twilight/game.rb
index a211b3d..6578eb4 100644
--- a/lib/colonial_twilight/game.rb
+++ b/lib/colonial_twilight/game.rb
@@ -5,6 +5,7 @@ require 'colonial_twilight/board'
require 'colonial_twilight/cards'
require 'colonial_twilight/player'
require 'colonial_twilight/fln_bot'
+require 'colonial_twilight/gov_player'
module ColonialTwilight
@@ -66,10 +67,12 @@ module ColonialTwilight
@turn = 1
@cards = []
@actions = []
- @players = [FLNBot.new(self, :FLN), Player.new(self, :GOV)]
+ @players = [FLNBot.new(self, :FLN), GOVPlayer.new(self, :GOV)]
play
end
+ def current_card; @cards[-1] end
+
def play
while true
ui.turn_start @turn, *@players
@@ -80,12 +83,12 @@ module ColonialTwilight
ui.continue? @players[0].instance_of? FLNBot
ui.player @players[0], true
- @actions[0] = @players[0].play @cards[-1], possible_actions
+ @actions[0] = @players[0].play possible_actions
@ui.adjust_track @board.compute_victory_points
ui.continue? @players[1].instance_of? FLNBot
ui.player @players[1], false
- @actions[1] = @players[1].play possible_actions @cards[-1], @actions[0]
+ @actions[1] = @players[1].play possible_actions @actions[0]
@ui.adjust_track @board.compute_victory_points
@cards.shift if @cards.length > 2
diff --git a/lib/colonial_twilight/gov_player.rb b/lib/colonial_twilight/gov_player.rb
new file mode 100644
index 0000000..3821b8c
--- /dev/null
+++ b/lib/colonial_twilight/gov_player.rb
@@ -0,0 +1,23 @@
+#! /usr/bin/env ruby
+# -*- coding: UTF-8 -*-
+
+module ColonialTwilight
+
+ class GOVPlayer < Player
+
+ def play possible_actions
+ @possible_actions = possible_actions
+ _init
+ _start
+ end
+
+ private
+
+ def _start
+ puts "FIXME"
+ exit 1
+ end
+
+ end
+
+end
diff --git a/lib/colonial_twilight/player.rb b/lib/colonial_twilight/player.rb
index 16e0b04..bc91cd1 100644
--- a/lib/colonial_twilight/player.rb
+++ b/lib/colonial_twilight/player.rb
@@ -9,17 +9,85 @@ module ColonialTwilight
def initialize game, faction
@game = game
+ @board = game.board
+ @ui = game.ui
@faction = faction
+ @debug = game.options.debug_bot
+ @possible_actions = nil
end
- def to_s
- @faction.to_s
+ 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 play possible_actions
- action = @game.ui.chose( 'Choose an action', possible_actions.values) { |s| a = s.split(':'); a[0] = a[0].yellow; a.join(':') }
- puts 'Player.play' # FIXME
- return action
+ 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
end