diff options
Diffstat (limited to 'lib/colonial_twilight/player.rb')
| -rw-r--r-- | lib/colonial_twilight/player.rb | 95 | 
1 files changed, 28 insertions, 67 deletions
diff --git a/lib/colonial_twilight/player.rb b/lib/colonial_twilight/player.rb index 123475b..a4b01ed 100644 --- a/lib/colonial_twilight/player.rb +++ b/lib/colonial_twilight/player.rb @@ -1,98 +1,59 @@  #! /usr/bin/env ruby -# -*- coding: UTF-8 -*- +# frozen_string_literal: true -module ColonialTwilight +require 'colonial_twilight/turn' +module ColonialTwilight    class Player +    attr_reader :faction, :game, :turn -    attr_reader :faction - -    def initialize game, faction +    def initialize(game, faction)        @game = game        @board = game.board        @faction = faction -      @debug = game.options.debug_bot -      @possible_actions = nil +      @debug = game.options.debug +      @turn = Turn.new      end -    def _init -      @card = @game.current_card -      @operation = nil -      @operation_count = 0 -      @special_activity = nil -      @special_activity_count = 0 - -      @selected_spaces = [] -      @expended_resources = 0 +    def resources +      @faction == :FLN ? @board.fln_resources : @board.gov_resources      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 +    def score +      @faction == :FLN ? @board.opposition_bases : @board.support_commitment      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 +    def init_turn(prev_action, possible_actions) +      @prev_action = prev_action +      @possible_actions = possible_actions +      @card = @game.current_card +      @turn.reset(limited_op_only?)      end -    def limited_ope_only? -      (@possible_actions.size == 2 and @possible_actions.include? :ope_limited) +    def d6 +      @game.d6      end -    def limited_ope_done? -      limited_ope_only? and @operation_count == 1 +    def first_eligible? +      @game.first == self      end -    def may_conduct_special_activity? sp -      r = @possible_actions.include? :ope_special -      r &= (sp == @special_activity) if not @special_activity.nil? -      r +    def will_be_next_first_eligible? +      Game.swap_actions.include? @prev_action      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 +    def may_play_event? +      @possible_actions.include?(:event)      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 +    def limited_op_only? +      @possible_actions.size == 2 && @possible_actions.include?(:op_limited)      end -    def debug_selected_spaces -      puts "\tselected spaces :: " + @selected_spaces.collect(){|s| s.is_a?(Symbol) ? s.to_s : s.name}.join(' :: ') if @debug +    def limited_op_done? +      limited_op_only? && !@turn.operation_done?      end -    end -  end  | 
