diff options
Diffstat (limited to 'lib/colonial_twilight/game.rb')
-rw-r--r-- | lib/colonial_twilight/game.rb | 110 |
1 files changed, 71 insertions, 39 deletions
diff --git a/lib/colonial_twilight/game.rb b/lib/colonial_twilight/game.rb index 75c4534..3b1dd99 100644 --- a/lib/colonial_twilight/game.rb +++ b/lib/colonial_twilight/game.rb @@ -13,6 +13,8 @@ module ColonialTwilight class Game + MAX_CARD = 71 + @scenarios = ['Short: 1960-1962: The End Game', 'Medium: 1957-1962: Midgame Development', 'Full: 1955-1962: Algérie Francaise!'].freeze @@ -27,11 +29,11 @@ module ColonialTwilight }.freeze @swap_actions= [:ope_special, :ope_limited] class << self - attr_reader :scenarios, :rules, :actions, :cards + attr_reader :scenarios, :rules, :actions end def rules; Game.rules end def scenarios; Game.scenarios end - def possible_actions used=nil + def possible_actions used ks = Game.actions.keys if not used.nil? if used == :event @@ -65,62 +67,92 @@ module ColonialTwilight @ruleset = rs @scenario = s @board.load [:short, :medium, :long][s] - @max_card = 71 @turn = 0 - @cards = [] + @cards = { + :current => @deck.pull(0), + :prev => @deck.pull(0) + } @actions = [] - @players = [FLNBot.new(self, :FLN), GOVPlayer.new(self, :GOV)] - play + @players = { + :fln => FLNBot.new(self, :FLN), + :gov => GOVPlayer.new(self, :GOV), + :first => :fln, + :second => :gov + } + end + + def current_card + @cards[:current] + end + + def first + @players[@players[:first]] + end + + def second + @players[@players[:second]] + end + + def eligibility_swap + @players[:first], @players[:second] = @players[:second], @players[:first] end - def current_card; @cards[-1] end + def eligibility_swap? + Game.swap_actions.include? @actions[0] + end def play - save_board 0 while true @turn += 1 - ui.turn_start @turn, *@players - c = ui.pull_card @max_card - c = 1 # FIXME - @cards << @deck.pull(c) - ui.show_card @cards[-1] - File.open("actions-#{@turn}.json",'w') { |f| f << JSON.generate([]) } - - ui.continue? @players[0].instance_of? FLNBot - ui.player @players[0], true - @actions[0] = @players[0].play possible_actions - @ui.adjust_track @board.compute_victory_points - save_board 0 + ui.turn_start @turn, first, second + _pull_card - ui.continue? @players[1].instance_of? FLNBot - ui.player @players[1], false - @actions[1] = @players[1].play possible_actions @actions[0] - @ui.adjust_track @board.compute_victory_points - save_board 1 + act = _play first, nil + @ui.adjust_track @board.compute_victory_points + act = _play second, act + @ui.adjust_track @board.compute_victory_points - @cards.shift if @cards.length > 2 - @players[0], @players[1] = @players[1], @players[0] if eligibility_swap? + eligibility_swap if eligibility_swap? @actions.clear end end - def eligibility_swap? - Game.swap_actions.include? @actions[0] + def action_done player, action + File.open("actions-#{@turn}.json",'r+') do |f| + data = JSON.load f + data << action + f.seek 0 + f << JSON.generate(data) + end + @ui.show_player_action player, action end - def save_board phase - json = JSON.generate @board.data - File.open("turn-#{@turn}-#{phase}.json",'w') { |f| f << json } + private + + def _play player, prev_act + _save prev_act.nil? + ui.continue? player.instance_of? FLNBot + ui.player player, prev_act.nil? + player.play possible_actions prev_act end - def action_done player, action - data = nil - File.open("actions-#{@turn}.json",'r') { |f| data = JSON.load f } - data << action + def _pull_card + @cards[:prev] = @cards[:current] + @cards[:current] = @deck.pull ui.pull_card(MAX_CARD) + ui.show_card @cards[:current] + end - json = JSON.generate data - File.open("actions-#{@turn}.json",'w') { |f| f << json } - @ui.show_player_action player, action + def _save first + h = { + :ruleset => @ruleset, + :scenario => @scenario, + :turn => @turn, + :cards => {:current => @cards[:current].num, :prev => @cards[:prev].num}, + :players => {:first => @players[:first], :second => @players[:second]}, + :board => @board.data + } + File.open("turn-#{@turn}-#{first ? 0 : 1}.json",'w') { |f| f << JSON.generate(h) } + File.open("actions-#{@turn}.json",'w') { |f| f << JSON.generate([]) } end end |