Class: Minimax
Instance Attribute Summary
Attributes inherited from Player
#team
Instance Method Summary
collapse
Methods inherited from Player
#initialize
Constructor Details
This class inherits a constructor from Player
Instance Method Details
#computer? ⇒ Boolean
45
46
47
|
# File 'lib/nick_tac_toe/minimax.rb', line 45
def computer?
true
end
|
#get_max_move(board) ⇒ Object
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# File 'lib/nick_tac_toe/minimax.rb', line 7
def get_max_move(board)
current_max_move = Move.new(0, -1)
board.remaining_moves.each do |remaining_move|
new_board = board.copy
new_board.set_cell(remaining_move, team)
return Move.new(remaining_move, 1) if player_won?(team, new_board)
return Move.new(remaining_move, 0) if new_board.cells.all? { |cell| cell == new_board.player_one || cell == new_board.player_two }
return Move.new(remaining_move, -1) if player_won?(new_board.opponent_for(team), new_board)
new_rating = get_min_move(new_board).rating
if new_rating > current_max_move.rating
current_max_move = Move.new(remaining_move, new_rating)
end
end
return current_max_move
end
|
#get_min_move(board) ⇒ Object
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/nick_tac_toe/minimax.rb', line 23
def get_min_move(board)
current_min_move = Move.new(0, 1)
board.remaining_moves.each do |remaining_move|
new_board = board.copy
new_board.set_cell(remaining_move, new_board.opponent_for(team));
return Move.new(current_min_move.position, 1) if player_won?(team, new_board)
return Move.new(current_min_move.position, 0) if new_board.cells.all? { |cell| cell == new_board.player_one || cell == new_board.player_two }
return Move.new(current_min_move.position, -1) if player_won?(new_board.opponent_for(team), new_board)
new_rating = get_max_move(new_board).rating
if new_rating < current_min_move.rating
current_min_move = Move.new(remaining_move, new_rating)
end
end
return current_min_move
end
|
#move_for(board) ⇒ Object
2
3
4
|
# File 'lib/nick_tac_toe/minimax.rb', line 2
def move_for(board)
get_max_move(board).position
end
|
#player_won?(team, board) ⇒ Boolean
39
40
41
42
43
|
# File 'lib/nick_tac_toe/minimax.rb', line 39
def player_won?(team, board)
return true if board.rows.any? { |row| row == [team]*3 }
return true if board.columns.any? { |column| column == [team]*3 }
return true if board.diagonals.any? { |diagonal| diagonal == [team]*3 }
end
|