class SplendorGame::Turn
Attributes
action_done[R]
player[R]
Public Class Methods
new(game, player)
click to toggle source
# File lib/splendor_game/turn.rb, line 6 def initialize(game, player) @game = game @player = player @action_done = false @noble_claimed = false end
Public Instance Methods
action_return_token(colour)
click to toggle source
in order to claim tokens you may need to return tokens, eg pick up a gold when you have 10, or you have 8 and want to take 3 different.
# File lib/splendor_game/turn.rb, line 107 def action_return_token(colour) return false if !@player.tableau.tokens.include?(colour) return false if @player.tableau.tokens[colour] <= 0 @player.tableau.remove_token(colour) @game.bank.add_token(colour) end
affordable_cards()
click to toggle source
from the 12 cards on display plus up to 3 reserved ones, return the ones affordable, in an Array
# File lib/splendor_game/turn.rb, line 14 def affordable_cards answer = Array.new() (@game.all_displayed_cards + @player.tableau.reserved_cards).each do |card| @cost = @player.tableau.tokens_required(card) answer << card if !@cost==false end answer end
claim_noble(noble)
click to toggle source
# File lib/splendor_game/turn.rb, line 114 def claim_noble(noble) # Move noble from bank to player, assuming it's affordable return false if @noble_claimed # you can only claim 1 per turn return false if !noble_affordable?(noble) @game.nobles.delete_at(@game.nobles.index(noble) || display_row.length) @player.nobles << noble @noble_claimed = true end
claimable_nobles()
click to toggle source
# File lib/splendor_game/turn.rb, line 122 def claimable_nobles @game.nobles.find_all { |noble| noble_affordable?(noble) } end
end_turn()
click to toggle source
# File lib/splendor_game/turn.rb, line 133 def end_turn # make sure there are 4 cards showing from each deck, assuming there are any left #assumption : max 1 card is missing from each row nonfull_rows = @game.display.select { |_level, subdeck| subdeck.count < @game.options[:display_cards_per_row] } nonfull_rows.each do |row_num, display_row| relevant_deck = @game.deck[row_num] display_row << relevant_deck.pop if relevant_deck.count > 0 end end
give_gold_token()
click to toggle source
# File lib/splendor_game/turn.rb, line 47 def give_gold_token if @game.bank.tokens[:gold] > 0 && @player.tableau.token_space_remaining > 0 @game.bank.remove_token(:gold) @player.tableau.add_token(:gold) end end
noble_affordable?(noble)
click to toggle source
# File lib/splendor_game/turn.rb, line 126 def noble_affordable?(noble) noble.cost.each do |colour, cost| return false if @player.tableau.colours_on_cards(colour) < cost end true end
purchase_card(card)
click to toggle source
# File lib/splendor_game/turn.rb, line 23 def purchase_card(card) # do the requisite card/token changes, if the card is in affordable_cards return false if @action_done return false if !affordable_cards.include?(card) cost_to_player = @player.tableau.tokens_required(card) if @player.tableau.reserved_cards.include?(card) @player.tableau.play_reserved_card(card) else @player.tableau.purchase_card(card) end cost_to_player.each do |colour, val| val.times { @player.tableau.remove_token(colour) } val.times { @game.bank.add_token(colour) } end display_row = @game.display[card.level] display_row.delete_at(display_row.index(card) || display_row.length) @action_done = true end
reserve_card_checks?()
click to toggle source
# File lib/splendor_game/turn.rb, line 41 def reserve_card_checks? return false if @action_done return false if !@player.tableau.can_reserve_card? true end
reserve_displayed_card(card)
click to toggle source
# File lib/splendor_game/turn.rb, line 54 def reserve_displayed_card(card) # put cards in to player's reserved set. Remove card from display return false if !reserve_card_checks? return false if !@game.display.flatten(2).include?(card) @player.tableau.reserve_card(card) display_row = @game.display[card.level] display_row.delete_at(display_row.index(card) || display_row.length) give_gold_token @action_done = true end
reserve_random_card(deck_number)
click to toggle source
# File lib/splendor_game/turn.rb, line 64 def reserve_random_card(deck_number) return false if !reserve_card_checks? return false if @game.deck[deck_number].nil? return false if @game.deck[deck_number].count==0 card = @game.deck[deck_number].pop @player.tableau.reserve_card(card) give_gold_token @action_done = true end
take_different_tokens(colours)
click to toggle source
# File lib/splendor_game/turn.rb, line 90 def take_different_tokens(colours) colours.map!{|c| c.to_sym} return false if !validate_token_pickup?(colours) return false if colours.count != 3 return false if colours.uniq.length != colours.length return false if colours.select { |c| @game.bank.tokens[c]==0}.length > 0 return false if @player.tableau.token_space_remaining < 3 colours.each do |c| @player.tableau.add_token(c) @game.bank.remove_token(c) end @action_done = true end
take_two_tokens_same_colour(colour)
click to toggle source
# File lib/splendor_game/turn.rb, line 80 def take_two_tokens_same_colour(colour) colour = colour.to_sym return false if !validate_token_pickup?(colour) return false if @game.bank.tokens[colour] < @game.options[:min_to_take_two] return false if @player.tableau.token_space_remaining < 2 2.times { @player.tableau.add_token(colour) } 2.times { @game.bank.remove_token(colour) } @action_done = true end
validate_token_pickup?(colour)
click to toggle source
# File lib/splendor_game/turn.rb, line 74 def validate_token_pickup?(colour) return false if @action_done return false if Array(colour).include?(:gold) true end