class TicTacToeRZ::Players::PlayerMovementManager

Constants

LARGEST_INDEX

Attributes

match_type[R]
player1_last_move[R]
player2_last_move[R]

Public Class Methods

new(type_of_match) click to toggle source

Type of Match being played determines which player moves are reverted (one or both).

# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 19
def initialize(type_of_match)
  raise Exceptions::NilReferenceError, "type_of_match" if type_of_match == nil
    @player1_last_move = no_last_move
    @player2_last_move = no_last_move
    @match_type = type_of_match
end

Public Instance Methods

any_moves_to_undo?() click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 71
def any_moves_to_undo?
  get_last_move_for_player(1) != no_last_move && get_last_move_for_player(2) != no_last_move
end
get_last_move_for_player(player_number) click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 31
def get_last_move_for_player(player_number)
  raise_error_for_invalid_player_number(player_number)
  last_move = player_number == 1 ? @player1_last_move : @player2_last_move
end
moves_recordable?(match_number) click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 66
def moves_recordable?(match_number)
  match_manager = GamePlay::MatchTypeManager.new
  match_manager.player_type(match_number, 1) == "Human" || match_manager.player_type(match_number, 2) == "Human"
end
no_last_move() click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 14
def no_last_move
  -1
end
number_of_human_players() click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 75
def number_of_human_players
  first_player_type = @match_type.player1_type.selected_option
  second_player_type = @match_type.player2_type.selected_option
  count = 0
  count = count + 1 if first_player_type == :Human
  count = count + 1 if second_player_type == :Human
  count
end
raise_error_for_invalid_player_number(player_number) click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 26
def raise_error_for_invalid_player_number(player_number)
  raise Exceptions::NilReferenceError, "player_number" if player_number.nil?
  raise Exceptions::InvalidValueError, "player_number" if player_number != 1 && player_number != 2
end
undo_last_move(game_board, player_manager) click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 44
def undo_last_move(game_board, player_manager)
  raise Exceptions::NilReferenceError, "game_board" if game_board.nil?
  raise Exceptions::NilReferenceError, "player_manager" if player_manager.nil?
  first_player_type = @match_type.player1_type.selected_option
  second_player_type = @match_type.player2_type.selected_option
  raise Exceptions::GameRuleViolationError, Languages::MessageGenerator.no_moves_to_undo_error if !any_moves_to_undo? || number_of_human_players == 0
  if number_of_human_players == 1
    game_board.revert_board(get_last_move_for_player(1))
    game_board.revert_board(get_last_move_for_player(2))
    @player1_last_move = no_last_move
    @player2_last_move = no_last_move
  elsif number_of_human_players == 2
    player_number = player_manager.get_player_number(player_manager.current_player)
    game_board.revert_board(get_last_move_for_player(player_number))
    if player_number == 1
      @player1_last_move = no_last_move
    else
      @player2_last_move = no_last_move
    end
  end
end
update_last_move_for_player(player_number, updated_move) click to toggle source
# File lib/tic_tac_toe_rz/tictactoeruby.core/players/player_movement_manager.rb, line 36
def update_last_move_for_player(player_number, updated_move)
  if player_number == 1
    @player1_last_move = updated_move
  else
    @player2_last_move = updated_move
  end
end