class SplendorGame::Game

Attributes

bank[R]
deck[R]
display[R]
nobles[R]
options[R]
players[R]
turns[R]

Public Class Methods

new(user_options = nil) click to toggle source
# File lib/splendor_game/game.rb, line 15
def initialize(user_options = nil)
  @options = Options.new(user_options).give_options
  load_cards # puts all the cards into shuffled decks... a hash of arrays of cards. @deck[level]
  @bank = Tableau.new(0) # 0 means no limit on token capacity
  @players = Array.new()
  @turns = Array.new()
end

Public Instance Methods

add_player(player_name) click to toggle source
# File lib/splendor_game/game.rb, line 23
def add_player(player_name)
  return false if @players.count >= MAX_PLAYER_COUNT
  @players << Player.new(player_name, @players.count+1,@options[:player_token_limit])
  true
end
all_displayed_cards() click to toggle source
# File lib/splendor_game/game.rb, line 58
def all_displayed_cards
  @display.values.flatten
end
game_over?() click to toggle source
# File lib/splendor_game/game.rb, line 38
def game_over?
  return false if @players.map { |p| p.points }.max < @options[:winning_score]
  return true if @players[1] == @starting_player
  false
end
load_cards() click to toggle source

Could read from an external file eventually, but this works just fine :)

# File lib/splendor_game/load_cards.rb, line 4
def load_cards
  all_cards = Array.new()
  all_cards << Card.new(1, :white, {:blue => 3})
  all_cards << Card.new(1, :white, {:red => 2, :black => 1})
  all_cards << Card.new(1, :white, {:blue => 1, :green => 1, :red => 1, :black => 1})
  all_cards << Card.new(1, :white, {:blue => 2, :black => 2})
  all_cards << Card.new(1, :white, {:green => 4}, 1)
  all_cards << Card.new(1, :white, {:blue => 1, :green => 2, :red => 1, :black => 1})
  all_cards << Card.new(1, :white, {:blue => 2, :green => 2, :black => 1})
  all_cards << Card.new(1, :white, {:white => 3, :blue => 1, :black => 1})
  all_cards << Card.new(1, :blue, {:white => 1, :black => 2})
  all_cards << Card.new(1, :blue, {:black => 3})
  all_cards << Card.new(1, :blue, {:white => 1, :green => 1, :red => 1, :black => 1})
  all_cards << Card.new(1, :blue, {:green => 2, :black => 2})
  all_cards << Card.new(1, :blue, {:red => 4}, 1)
  all_cards << Card.new(1, :blue, {:white => 1, :green => 1, :red => 2, :black => 1})
  all_cards << Card.new(1, :blue, {:white => 1, :green => 2, :red => 2})
  all_cards << Card.new(1, :blue, {:blue => 1, :green => 3, :red => 1})
  all_cards << Card.new(1, :green, {:white => 2, :blue => 1})
  all_cards << Card.new(1, :green, {:red => 3})
  all_cards << Card.new(1, :green, {:white => 1, :blue => 1, :red => 1, :black => 1})
  all_cards << Card.new(1, :green, {:blue => 2, :red => 2})
  all_cards << Card.new(1, :green, {:black => 4}, 1)
  all_cards << Card.new(1, :green, {:white => 1, :blue => 1, :red => 1, :black => 2})
  all_cards << Card.new(1, :green, {:blue => 1, :red => 2, :black => 2})
  all_cards << Card.new(1, :green, {:white => 1, :blue => 3, :green => 1})
  all_cards << Card.new(1, :red, {:blue => 2, :green => 1})
  all_cards << Card.new(1, :red, {:white => 3})
  all_cards << Card.new(1, :red, {:white => 1, :blue => 1, :green => 1, :black => 1})
  all_cards << Card.new(1, :red, {:white => 2, :red => 2})
  all_cards << Card.new(1, :red, {:white => 4}, 1)
  all_cards << Card.new(1, :red, {:white => 2, :blue => 1, :green => 1, :black => 1})
  all_cards << Card.new(1, :red, {:white => 2, :green => 1, :black => 2})
  all_cards << Card.new(1, :red, {:white => 1, :red => 1, :black => 3})
  all_cards << Card.new(1, :black, {:green => 2, :red => 1})
  all_cards << Card.new(1, :black, {:green => 3})
  all_cards << Card.new(1, :black, {:white => 1, :blue => 1, :green => 1, :red => 1})
  all_cards << Card.new(1, :black, {:white => 2, :green => 2})
  all_cards << Card.new(1, :black, {:blue => 4}, 1)
  all_cards << Card.new(1, :black, {:white => 1, :blue => 2, :green => 1, :red => 1})
  all_cards << Card.new(1, :black, {:white => 2, :blue => 2, :red => 1})
  all_cards << Card.new(1, :black, {:green => 1, :red => 3, :black => 1})
  
  all_cards << Card.new(2, :white, {:red => 5}, 2)
  all_cards << Card.new(2, :white, {:white => 6}, 3)
  all_cards << Card.new(2, :white, {:green => 3, :red => 2, :black => 2}, 1)
  all_cards << Card.new(2, :white, {:green => 1, :red => 4, :black => 2}, 2)
  all_cards << Card.new(2, :white, {:white => 2, :blue => 3, :red => 3}, 1)
  all_cards << Card.new(2, :white, {:red => 5, :black => 3}, 2)
  all_cards << Card.new(2, :blue, {:blue => 5}, 2)
  all_cards << Card.new(2, :blue, {:blue => 6}, 3)
  all_cards << Card.new(2, :blue, {:blue => 2, :green => 2, :red => 3}, 1)
  all_cards << Card.new(2, :blue, {:white => 2, :red => 1, :black => 4}, 2)
  all_cards << Card.new(2, :blue, {:blue => 2, :green => 3, :black => 3}, 1)
  all_cards << Card.new(2, :blue, {:white => 5, :blue => 3}, 2)
  all_cards << Card.new(2, :green, {:green => 5}, 2)
  all_cards << Card.new(2, :green, {:green => 6}, 3)
  all_cards << Card.new(2, :green, {:white => 2, :blue => 3, :black => 2}, 1)
  all_cards << Card.new(2, :green, {:white => 3, :green => 2, :red => 3}, 1)
  all_cards << Card.new(2, :green, {:white => 4, :blue => 2, :black => 1}, 2)
  all_cards << Card.new(2, :green, {:blue => 5, :green => 3}, 2)
  all_cards << Card.new(2, :red, {:black => 5}, 2)
  all_cards << Card.new(2, :red, {:red => 6}, 3)
  all_cards << Card.new(2, :red, {:white => 2, :red => 2, :black => 3}, 1)
  all_cards << Card.new(2, :red, {:white => 1, :blue => 4, :green => 2}, 2)
  all_cards << Card.new(2, :red, {:blue => 3, :red => 2, :black => 3}, 1)
  all_cards << Card.new(2, :red, {:white => 3, :black => 5}, 2)
  all_cards << Card.new(2, :black, {:white => 5}, 2)
  all_cards << Card.new(2, :black, {:black => 6}, 3)
  all_cards << Card.new(2, :black, {:white => 3, :blue => 2, :green => 2}, 1)
  all_cards << Card.new(2, :black, {:blue => 1, :green => 4, :red => 2}, 2)
  all_cards << Card.new(2, :black, {:white => 3, :green => 3, :black => 2}, 1)
  all_cards << Card.new(2, :black, {:green => 5, :red => 3}, 2)
  
  all_cards << Card.new(3, :white, {:black => 7}, 4)
  all_cards << Card.new(3, :white, {:white => 3, :black => 7}, 5)
  all_cards << Card.new(3, :white, {:white => 3, :red => 3, :black => 6}, 4)
  all_cards << Card.new(3, :white, {:blue => 3, :green => 3, :red => 5, :black => 3}, 3)
  all_cards << Card.new(3, :blue, {:white => 7}, 4)
  all_cards << Card.new(3, :blue, {:white => 7, :blue => 3}, 5)
  all_cards << Card.new(3, :blue, {:white => 6, :blue => 3, :black => 3}, 4)
  all_cards << Card.new(3, :blue, {:white => 3, :green => 3, :red => 3, :black => 5}, 3)
  all_cards << Card.new(3, :green, {:blue => 7}, 4)
  all_cards << Card.new(3, :green, {:blue => 7, :green => 3}, 5)
  all_cards << Card.new(3, :green, {:white => 3, :blue => 6, :green => 3}, 4)
  all_cards << Card.new(3, :green, {:white => 5, :blue => 3, :red => 3, :black => 3}, 3)
  all_cards << Card.new(3, :red, {:green => 7}, 4)
  all_cards << Card.new(3, :red, {:green => 7, :red => 3}, 5)
  all_cards << Card.new(3, :red, {:blue => 3, :green => 6, :red => 3}, 4)
  all_cards << Card.new(3, :red, {:white => 3, :blue => 5, :green => 3, :black => 3}, 3)
  all_cards << Card.new(3, :black, {:red => 7}, 4)
  all_cards << Card.new(3, :black, {:red => 7, :black => 3}, 5)
  all_cards << Card.new(3, :black, {:green => 3, :red => 6, :black => 3}, 4)
  all_cards << Card.new(3, :black, {:white => 3, :blue => 3, :green => 5, :red => 3}, 3)



  # Now all cards are in all_cards, distribute them into all_cards
  @deck = Hash.new()
  all_cards.each do |card|
    @deck[card.level] = Array.new() if !@deck.include?(card.level)
    @deck[card.level] << card
  end
  # shuffle them
  @deck.each { |_deck_num, smaller_deck| smaller_deck.shuffle! }
end
next_player() click to toggle source
# File lib/splendor_game/game.rb, line 29
def next_player
  if !@turns.empty?
    @players.rotate!
    return @players.first
  end
  @players.shuffle!
  @starting_player = @players.first
end
next_turn() click to toggle source
# File lib/splendor_game/game.rb, line 51
def next_turn
  return false if game_over? || !defined? @display
  t = SplendorGame::Turn.new(self, next_player)
  @turns << t
  t
end
noble_sample(number_of_cards_to_load) click to toggle source
# File lib/splendor_game/load_cards.rb, line 111
def noble_sample(number_of_cards_to_load)
  all_nobles = Array.new()
  all_nobles << Noble.new({:white => 3, :blue => 3, :black => 3}, 3)
  all_nobles << Noble.new({:blue => 3, :green => 3, :red => 3}, 3)
  all_nobles << Noble.new({:white => 3, :red => 3, :black => 3}, 3)
  all_nobles << Noble.new({:white => 3, :blue => 3, :green => 3}, 3)
  all_nobles << Noble.new({:green => 3, :red => 3, :black => 3}, 3)
  all_nobles << Noble.new({:green => 4, :red => 4}, 3)
  all_nobles << Noble.new({:blue => 4, :green => 4}, 3)
  all_nobles << Noble.new({:red => 4, :black => 4}, 3)
  all_nobles << Noble.new({:white => 4, :black => 4}, 3)
  all_nobles << Noble.new({:white => 4, :blue => 4}, 3)
  all_nobles.shuffle!.first(number_of_cards_to_load)
end
start_game() click to toggle source
# File lib/splendor_game/game.rb, line 44
def start_game
  @bank.seed_bank({:options=> @options, :player_count => @players.count})
  @nobles = noble_sample(@options[:nobles_available][@players.count])
  @display = Hash.new()
  @deck.each { |level, subdeck| @display[level] = subdeck.pop(@options[:display_cards_per_row]) }
end