chess_validator 0.2.8 → 0.2.13

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/move_logic.rb +20 -13
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7447add6691d3f9071ad8ef282e15e05303916f4190c68a5a8850bceb6f92677
4
- data.tar.gz: e462bf916cb48a88e3b1a1150d98fba07e913ea5b030df003dc1c2983c595d0b
3
+ metadata.gz: 03b73d5695fddf48ea9494d65ce26cdea0c3400edf94f12a1ae16565a60ca999
4
+ data.tar.gz: ad5ed89124d328363f8f6f193710b827ad21cf5aeb0e4cd95a75041c8068fe7d
5
5
  SHA512:
6
- metadata.gz: 1d8d07cd4aef5cdd849581fcd5e7b90d402877abd076b350ac249d29239769646cafd8619e0e2318d140a0800eae1184bae58126889bec28a89e83d63fdf9fc8
7
- data.tar.gz: 84335e767809eb2475e1018508e02f015b7f66de2d1bdb89ada50e1213f625a5576f5c534413f9280281893d649214ee3b7e660946980320595f34775f7339fc
6
+ metadata.gz: f0b7b7b5f1bc7888385a488e5c1304671ac2122777a06a74061799891b3656be37938a531d912ecf74698fccbcdefeb476d423c9d40dfd5dac53daf3c0abadec
7
+ data.tar.gz: 8b76ad106e6a34fc82e48baea5f125aa0a7271a99c3b2e04dcf2874f728de0909c93f6b89e454fa896b318198f81539f96c66f2d7cc5ccfc222449e612eeb9f3
@@ -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,10 +29,12 @@ module ChessValidator
29
29
  end
30
30
  end
31
31
 
32
- def find_target(board, piece, move)
33
- if board[INDEX_KEY[move]]
32
+ def find_target(board, piece, move, en_passant)
33
+ if piece.piece_type.downcase == 'p' && piece.position[0] == move[0]
34
+ nil
35
+ elsif board[INDEX_KEY[move]]
34
36
  board[INDEX_KEY[move]]
35
- elsif piece.piece_type.downcase == 'p' && piece.position[0] != move[0]
37
+ elsif piece.piece_type.downcase == 'p' && move == en_passant
36
38
  en_passant_position = piece.color == 'w' ? move[0] + '5' : move[0] + '4'
37
39
  board[INDEX_KEY[en_passant_position]]
38
40
  end
@@ -189,21 +191,26 @@ module ChessValidator
189
191
  end
190
192
 
191
193
  def advance_pawn?(pawn, board, move)
192
- if (pawn.position[1].to_i - move[1].to_i).abs == 1
193
- empty_square?(board, move)
194
- else
195
- occupied_spaces = []
196
- board.values.each do |piece|
197
- occupied_spaces << piece.position
194
+ if empty_square?(board, forward_by(pawn, 1))
195
+ if (pawn.position[1].to_i - move[1].to_i).abs == 2
196
+ empty_square?(board, forward_by(pawn, 2))
197
+ else
198
+ true
198
199
  end
199
- valid_move_path?(pawn, move, occupied_spaces) && empty_square?(board, move)
200
+ else
201
+ false
200
202
  end
201
203
  end
202
204
 
205
+ def forward_by(piece, count)
206
+ position = piece.position
207
+ piece.color == 'w' ? position[0] + (position[1].to_i + count).to_s : position[0] + (position[1].to_i - count).to_s
208
+ end
209
+
203
210
  def valid_destination?(piece, board, move)
204
211
  target_piece = find_piece(board, move)
205
212
  if target_piece
206
- target_piece.color != piece.color
213
+ target_piece.color != piece.color && piece.piece_type.downcase != 'k'
207
214
  else
208
215
  true
209
216
  end
@@ -214,7 +221,7 @@ module ChessValidator
214
221
  end
215
222
 
216
223
  def empty_square?(board, move)
217
- board.values.detect { |piece| piece.position == move }.nil?
224
+ board.values.none? { |piece| piece.position == move }
218
225
  end
219
226
 
220
227
  def valid_move_path?(piece, move, occupied_spaces)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chess_validator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.8
4
+ version: 0.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Ellison