class MonkeyMusic::Game

Public Class Methods

new(level, players, ui) click to toggle source
# File lib/monkey_music/game.rb, line 7
def initialize(level, players, ui)
  @level = level
  @players = players
  @ui = ui
end

Public Instance Methods

start() click to toggle source
# File lib/monkey_music/game.rb, line 13
def start
  # Send initial state to players
  init_threads = []
  @players.each do |p|
    init_threads << Thread.new { p.init! }
  end
  init_threads.each(&:join)
  # Start the game
  @level.turn_limit.times do |turn|
    turn += 1
    break if @level.complete?
    # Query players for moves
    query_threads = []
    turn_time = Benchmark.realtime do
      @players.each do |p|
        query_threads << Thread.new { p.query! turn }
      end
      query_threads.each(&:join)
    end
    # Move players in random order
    @players.shuffle.each { |p| p.move! }
    ## Update ui
    @ui.update(turn, turn_time)
  end
end