class Runner

Attributes

player_1[R]
player_2[R]
rules[R]
user_interface[R]

Public Class Methods

new(ui, rules, player_1, player_2) click to toggle source
# File lib/negamax_ttt/runner.rb, line 4
def initialize(ui, rules, player_1, player_2)
  @user_interface = ui
  @rules = rules
  @player_1 = player_1
  @player_2 = player_2
end

Public Instance Methods

cycle_moves_until_game_over() click to toggle source
# File lib/negamax_ttt/runner.rb, line 31
def cycle_moves_until_game_over
  user_interface.display_board(rules.board)
  [player_1, player_2].cycle do |player|
    move = player.get_move(rules)
    rules.board.place_move(move, player.move_signature)
    user_interface.display_board(rules.board)
    break if rules.game_over?(player_1.move_signature, player_2.move_signature)
  end
end
find_winner() click to toggle source
# File lib/negamax_ttt/runner.rb, line 41
def find_winner
  if rules.player_wins?(player_1.move_signature)
    player_1.move_signature
  elsif rules.player_wins?(player_2.move_signature)
    player_2.move_signature
  else
    :tie
  end
end
game_loop() click to toggle source
# File lib/negamax_ttt/runner.rb, line 16
def game_loop
  loop do
    single_game
    play_again = user_interface.play_again?
    rules.board.clear_board
    break unless play_again
  end
end
run() click to toggle source
# File lib/negamax_ttt/runner.rb, line 11
def run
  user_interface.describe_board_configuration(rules.board)
  game_loop
end
single_game() click to toggle source
# File lib/negamax_ttt/runner.rb, line 25
def single_game
  cycle_moves_until_game_over
  winner = find_winner
  user_interface.announce_outcome(winner)
end