chess_validator 0.2.9 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/move_logic.rb +19 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae31a40890e32644ea7bab6a82407dea4d40f155a6557777b401b260b18d41d0
|
4
|
+
data.tar.gz: ce29175b6af41591075e5158488c26bffc4cb92ee040d7389d6f751fa8117679
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fc687efb628401bcf9f5f3374b877a4eca8c4d496004dafdff545e66332416565aaa17a988eaf6e83750e39357f2dea684638402f6c641427a0c4460caebefae
|
7
|
+
data.tar.gz: 3fcb3650f113f585147f3afa567134564717f4952af4794de1c0c4b4d3c6cb25ddcd2ae041fc1300c14a45cf1f58279c728578f06aa5b81d220e9774136dce7e
|
data/lib/move_logic.rb
CHANGED
@@ -21,7 +21,7 @@ module ChessValidator
|
|
21
21
|
moves_for_piece(piece).each do |move|
|
22
22
|
if valid_move?(piece, board, move, fen)
|
23
23
|
piece.valid_moves << move
|
24
|
-
target = find_target(board, piece, move)
|
24
|
+
target = find_target(board, piece, move, fen.en_passant)
|
25
25
|
piece.targets << target if target
|
26
26
|
else
|
27
27
|
piece.move_potential << move
|
@@ -29,12 +29,12 @@ module ChessValidator
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
def find_target(board, piece, move)
|
32
|
+
def find_target(board, piece, move, en_passant)
|
33
33
|
if piece.piece_type.downcase == 'p' && piece.position[0] == move[0]
|
34
34
|
nil
|
35
35
|
elsif board[INDEX_KEY[move]]
|
36
36
|
board[INDEX_KEY[move]]
|
37
|
-
elsif piece.piece_type.downcase == 'p'
|
37
|
+
elsif piece.piece_type.downcase == 'p' && move == en_passant
|
38
38
|
en_passant_position = piece.color == 'w' ? move[0] + '5' : move[0] + '4'
|
39
39
|
board[INDEX_KEY[en_passant_position]]
|
40
40
|
end
|
@@ -130,6 +130,7 @@ module ChessValidator
|
|
130
130
|
def king_will_be_safe?(piece, board, move)
|
131
131
|
new_board = with_next_move(piece, board, move)
|
132
132
|
king, occupied_spaces = find_king_and_spaces(new_board, piece.color)
|
133
|
+
return false if king.nil?
|
133
134
|
king_is_safe?(king.color, new_board, king.position, occupied_spaces)
|
134
135
|
end
|
135
136
|
|
@@ -161,7 +162,7 @@ module ChessValidator
|
|
161
162
|
board.values.none? { |piece| [between, move].include?(piece.position) } &&
|
162
163
|
empty_b_square
|
163
164
|
else
|
164
|
-
valid_destination?(king, board, move) &&
|
165
|
+
valid_destination?(king, board, move) && king_will_be_safe?(king, board, move)
|
165
166
|
end
|
166
167
|
end
|
167
168
|
|
@@ -191,21 +192,26 @@ module ChessValidator
|
|
191
192
|
end
|
192
193
|
|
193
194
|
def advance_pawn?(pawn, board, move)
|
194
|
-
if (pawn
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
occupied_spaces << piece.position
|
195
|
+
if empty_square?(board, forward_by(pawn, 1))
|
196
|
+
if (pawn.position[1].to_i - move[1].to_i).abs == 2
|
197
|
+
empty_square?(board, forward_by(pawn, 2))
|
198
|
+
else
|
199
|
+
true
|
200
200
|
end
|
201
|
-
|
201
|
+
else
|
202
|
+
false
|
202
203
|
end
|
203
204
|
end
|
204
205
|
|
206
|
+
def forward_by(piece, count)
|
207
|
+
position = piece.position
|
208
|
+
piece.color == 'w' ? position[0] + (position[1].to_i + count).to_s : position[0] + (position[1].to_i - count).to_s
|
209
|
+
end
|
210
|
+
|
205
211
|
def valid_destination?(piece, board, move)
|
206
212
|
target_piece = find_piece(board, move)
|
207
213
|
if target_piece
|
208
|
-
target_piece.color != piece.color
|
214
|
+
target_piece.color != piece.color && target_piece.piece_type.downcase != 'k'
|
209
215
|
else
|
210
216
|
true
|
211
217
|
end
|
@@ -216,7 +222,7 @@ module ChessValidator
|
|
216
222
|
end
|
217
223
|
|
218
224
|
def empty_square?(board, move)
|
219
|
-
board.values.
|
225
|
+
board.values.none? { |piece| piece.position == move }
|
220
226
|
end
|
221
227
|
|
222
228
|
def valid_move_path?(piece, move, occupied_spaces)
|