-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsliding_piece.rb
91 lines (71 loc) · 1.43 KB
/
sliding_piece.rb
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class SlidingPiece < Piece
def initialize(position, board, color)
super(position, board, color)
end
def moves(start_position)
moves = []
row, col = start_position
self.directions.each do |(row_shift, col_shift)|
1.upto(7) do |mult|
candidate_pos = [row + (row_shift * mult), col + (col_shift * mult)]
# square = @board[candidate_pos]
break unless on_board?(candidate_pos)
if @board[candidate_pos].nil?
moves << candidate_pos
elsif @board[candidate_pos].color != self.color
moves << candidate_pos
break
elsif @board[candidate_pos].color == self.color
break
end
end
end
moves
end
end
class Queen < SlidingPiece
QUEEN_DELTAS = [
[1, -1],
[1, 0],
[1, 1],
[0, 1],
[-1, 1],
[-1, 0],
[-1, -1],
[0, -1]
]
def initialize(position, board, color)
super(position, board, color)
end
def directions
QUEEN_DELTAS
end
end
class Rook < SlidingPiece
ROOK_DELTAS = [
[1, 0],
[0, 1],
[-1, 0],
[0, -1]
]
def initialize(position, board, color)
super(position, board, color)
end
def directions
ROOK_DELTAS
end
end
class Bishop < SlidingPiece
BISHOP_DELTAS = [
[1, -1],
[1, 1],
[-1, 1],
[-1, -1]
]
def initialize(position, board, color)
super(position, board, color)
end
def directions
BISHOP_DELTAS
end
end