class SplendorGame::Tableau
Attributes
cards[R]
reserved_cards[R]
tokens[R]
Public Class Methods
new(token_limit)
click to toggle source
# File lib/splendor_game/tableau.rb, line 8 def initialize(token_limit) @cards = Array.new() @tokens = Hash.new(0) @unlimited = token_limit <= 0 ? true : false @token_limit = token_limit @reserved_cards = Array.new() end
Public Instance Methods
add_token(token_colour)
click to toggle source
add tokens, remove tokens, counting tokens
# File lib/splendor_game/tableau.rb, line 23 def add_token(token_colour) return false if !VALID_COLOUR_SYMBOLS.include?(token_colour) return false if !@unlimited && token_count >= @token_limit if @tokens.include?(token_colour) @tokens[token_colour] += 1 else @tokens[token_colour] = 1 end true end
all_colours_on_cards()
click to toggle source
# File lib/splendor_game/tableau.rb, line 97 def all_colours_on_cards output = Hash.new() VALID_COLOUR_SYMBOLS.each { |c| output[c] = colours_on_cards(c) if colours_on_cards(c) > 0 } output end
can_reserve_card?()
click to toggle source
reserving cards
# File lib/splendor_game/tableau.rb, line 56 def can_reserve_card? return false if @reserved_cards.size >= @@max_reserved_cards true end
colours_on_cards(colour)
click to toggle source
# File lib/splendor_game/tableau.rb, line 103 def colours_on_cards(colour) @cards.inject(0) { |sum,card| card.colour == colour ? sum+1 : sum }.to_i end
distinct_token_colour_count()
click to toggle source
# File lib/splendor_game/tableau.rb, line 50 def distinct_token_colour_count @tokens.count { |_k,v| v >0 } end
is_empty?()
click to toggle source
Other
# File lib/splendor_game/tableau.rb, line 109 def is_empty? @cards.size==0 && @tokens.size==0 ? true : false end
play_reserved_card(card)
click to toggle source
# File lib/splendor_game/tableau.rb, line 66 def play_reserved_card(card) return false if tokens_required(card) == false return false unless @reserved_cards.include?(card) @cards << card @reserved_cards.delete(card) end
purchase_card(card)
click to toggle source
related to purchasing cards
# File lib/splendor_game/tableau.rb, line 75 def purchase_card(card) return false if tokens_required(card) == false @cards << card end
remove_token(token_colour)
click to toggle source
# File lib/splendor_game/tableau.rb, line 34 def remove_token(token_colour) return false if !@tokens.key?(token_colour) return false if @tokens[token_colour] <= 0 @tokens[token_colour] -= 1 true end
reserve_card(card)
click to toggle source
# File lib/splendor_game/tableau.rb, line 61 def reserve_card(card) return false if !can_reserve_card? @reserved_cards << card end
seed_bank(args)
click to toggle source
# File lib/splendor_game/tableau.rb, line 16 def seed_bank(args) seed_bank_non_gold(args[:options][:starting_non_gold_tokens][args[:player_count]]) seed_bank_gold(args[:options][:starting_gold_tokens]) end
token_count()
click to toggle source
# File lib/splendor_game/tableau.rb, line 41 def token_count @tokens.inject(0) { |sum,(_k,v)| sum + v } end
token_space_remaining()
click to toggle source
# File lib/splendor_game/tableau.rb, line 45 def token_space_remaining return nil if @unlimited == true #meaning, undefined @token_limit - token_count end
tokens_required(card)
click to toggle source
Returns a Hash of the tokens required to buy the card If the tableau does not have sufficient cards/tokens, it returns false
# File lib/splendor_game/tableau.rb, line 82 def tokens_required(card) answer = Hash.new(0) card.cost.each do |colour, col_cost| theoretical_tokens = col_cost - colours_on_cards(colour) if theoretical_tokens <= @tokens[colour] answer[colour] = theoretical_tokens if theoretical_tokens > 0 else answer[colour] = @tokens[colour] answer[:gold] += theoretical_tokens - @tokens[colour] end end return false if answer[:gold] > @tokens[:gold] answer end
Private Instance Methods
seed_bank_gold(token_count)
click to toggle source
# File lib/splendor_game/tableau.rb, line 122 def seed_bank_gold(token_count) @tokens[:gold] = token_count end
seed_bank_non_gold(token_count)
click to toggle source
setup
# File lib/splendor_game/tableau.rb, line 116 def seed_bank_non_gold(token_count) VALID_COLOUR_SYMBOLS.each do |colour| @tokens[colour] = token_count if colour != :gold end end