-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsmarter_player.rb
More file actions
45 lines (40 loc) · 1.06 KB
/
smarter_player.rb
File metadata and controls
45 lines (40 loc) · 1.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
require './player.rb'
class SmarterPlayer < ComputerPlayer
def initialize
super
end
def will_be_captured(color)
escape_moves = []
opponent = other_pieces(color)
opponent.each do |piece|
piece.valid_moves.each do |move|
if board[move] && board[move].color == color
start_pos = move
end_pos = board[move].valid_moves.sample
escape_moves << [start_pos, end_pos] unless end_pos.nil?
end
end
end
best_escape_piece = nil
best_escape_value = 0
escape_moves.each do |escape_move|
escape_piece = board[escape_move[0]]
escape_value = PIECE_VALUE[escape_piece.symbol]
if escape_value > best_escape_value
best_escape_value = escape_value
best_escape_piece = escape_piece
end
end
best_escape_piece
end
def make_move(color)
escape_piece = will_be_captured(color)
if escape_piece.nil?
super
else
start_pos = escape_piece.pos
end_pos = escape_piece.valid_moves.sample
return [start_pos, end_pos]
end
end
end