chess_validator 0.2.0 → 0.2.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82d293dc8df9520f07a2f6d92b6d9e896f96b244e77088c400ec2896afe099ef
4
- data.tar.gz: 52af33ff9401c878693c751483bedcc05f0e5713e39af53ac5c82d99c7ac09bd
3
+ metadata.gz: bc4e4db78c99ebcedfafa450a0e4153e8356874196a28a60e769dda532a296eb
4
+ data.tar.gz: 6274fc54794fe98fc5ebb8da759e09429f7f8bbb65e182345df17fd7cb564407
5
5
  SHA512:
6
- metadata.gz: fb8d4a4129e5bb7d639dd2851bb4d1c9ce4c44879f2541eb1baf5f3c0ec272cc9c368d6bc7af1a9718eb303263c3405e189bcfeae4bc38b6761877f5f85af7e1
7
- data.tar.gz: 0abbe121cba65bebfae2f3ed8caa4115e4daee8c35c82af697e215db9fc144ff182490690ed843a8bc1943a232d211cba4b01a9e0448ddca67e83ee28d1acf2a
6
+ metadata.gz: ce0c91b9ab1109e68364a5246a4b1a63841f142dfd8af958bdedf1ac15bc698faeec8fdb1c1f3ee2074495ae72f1aade09745ab265502ffa0799468a9180fa85
7
+ data.tar.gz: 6588469e32c28933cfb78671b39d9ea37ee4683eaddc070aa1fa62b9479caa2c9b39d2279cf0a8c229fd75229f77d1ace05d76b1aa6fe519916b264b3de4efb4
@@ -1,2 +1 @@
1
- require 'move_logic'
2
- require 'game_logic'
1
+ require 'engine'
@@ -0,0 +1,37 @@
1
+ require 'move_logic'
2
+ require 'game_logic'
3
+
4
+ module ChessValidator
5
+ class Engine
6
+ class << self
7
+ def find_next_moves(fen_notation)
8
+ fen = PGN::FEN.new(fen_notation)
9
+ MoveLogic.next_moves(fen)
10
+ end
11
+
12
+ def find_next_moves_from_moves(moves)
13
+ fen = PGN::Game.new(moves).positions.last.to_fen
14
+ MoveLogic.next_moves(fen)
15
+ end
16
+
17
+ def make_random_move(fen_notation, pieces_with_moves)
18
+ piece_to_move = pieces_with_moves.sample
19
+ move = piece_to_move.valid_moves.sample
20
+ MoveLogic.make_move(piece_to_move, move, fen_notation)
21
+ end
22
+
23
+ def move(piece, move, fen_notation)
24
+ MoveLogic.make_move(piece, move, fen_notation)
25
+ end
26
+
27
+ def pieces(fen_notation)
28
+ fen = PGN::FEN.new(fen_notation)
29
+ BoardLogic.build_board(fen).values
30
+ end
31
+
32
+ def result(fen_notation)
33
+ GameLogic.find_game_result(fen_notation)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -4,16 +4,6 @@ require 'pgn'
4
4
  module ChessValidator
5
5
  class MoveLogic
6
6
  class << self
7
- def find_next_moves(fen_notation)
8
- fen = PGN::FEN.new(fen_notation)
9
- next_moves(fen)
10
- end
11
-
12
- def find_next_moves_from_moves(moves)
13
- fen = PGN::Game.new(moves).positions.last.to_fen
14
- next_moves(fen)
15
- end
16
-
17
7
  def next_moves(fen)
18
8
  board = BoardLogic.build_board(fen)
19
9
  pieces = []
@@ -29,7 +19,10 @@ module ChessValidator
29
19
 
30
20
  def load_valid_moves(board, piece, fen)
31
21
  moves_for_piece(piece).each do |move|
32
- piece.valid_moves << move if valid_move?(piece, board, move, fen)
22
+ if valid_move?(piece, board, move, fen)
23
+ piece.valid_moves << move
24
+ piece.targets << board[INDEX_KEY[move]] if board[INDEX_KEY[move]]
25
+ end
33
26
  end
34
27
  end
35
28
 
@@ -51,7 +44,8 @@ module ChessValidator
51
44
  def with_next_move(piece, board, move)
52
45
  index = INDEX_KEY[move]
53
46
  new_board = board.clone
54
- new_piece = Piece.new(piece.piece_type, index)
47
+ piece_type = resolve_piece_type(piece.piece_type, move)
48
+ new_piece = Piece.new(piece_type, index)
55
49
  new_board.delete(piece.square_index)
56
50
  new_board[index] = new_piece
57
51
  new_board = handle_castle(new_board, move) if castled?(piece, move)
@@ -59,6 +53,14 @@ module ChessValidator
59
53
  new_board
60
54
  end
61
55
 
56
+ def resolve_piece_type(piece_type, move)
57
+ if piece_type.downcase == 'p' && ['1', '8'].include?(move[1])
58
+ move[1] == '8' ? 'Q' : 'q'
59
+ else
60
+ piece_type
61
+ end
62
+ end
63
+
62
64
  def handle_en_passant(board, pawn_color, move)
63
65
  if pawn_color == 'w'
64
66
  index = INDEX_KEY[move[0] + '5']
@@ -152,9 +154,13 @@ module ChessValidator
152
154
  def king_is_safe?(king_color, board, king_position, occupied_spaces)
153
155
  board.values.none? do |piece|
154
156
  piece.color != king_color &&
155
- moves_for_piece(piece).select do |move|
156
- king_position == move && valid_move_path?(piece, king_position, occupied_spaces)
157
- end.size > 0
157
+ moves_for_piece(piece).any? do |move|
158
+ if piece.piece_type.downcase == 'p'
159
+ king_position == move && piece.position[0] != king_position[0]
160
+ else
161
+ king_position == move && valid_move_path?(piece, king_position, occupied_spaces)
162
+ end
163
+ end
158
164
  end
159
165
  end
160
166
 
@@ -1,16 +1,16 @@
1
- require_relative './constants/square_key'
1
+ require_relative './constants/move_key'
2
2
 
3
3
  module ChessValidator
4
4
  class Piece
5
- attr_accessor :position, :piece_type, :color, :square_index, :valid_moves
5
+ attr_accessor :position, :piece_type, :color, :square_index, :valid_moves, :targets
6
6
 
7
7
  def initialize(char, square_index)
8
8
  @piece_type = char
9
9
  @square_index = square_index
10
10
  @color = get_color(char)
11
11
  @position = get_position(square_index)
12
- @enemy_targets = []
13
12
  @valid_moves = []
13
+ @targets = []
14
14
  end
15
15
 
16
16
  def get_position(square_index)
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.0
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charles Ellison
@@ -18,7 +18,8 @@ extra_rdoc_files: []
18
18
  files:
19
19
  - lib/board_logic.rb
20
20
  - lib/chess_validator.rb
21
- - lib/constants/square_key.rb
21
+ - lib/constants/move_key.rb
22
+ - lib/engine.rb
22
23
  - lib/game_logic.rb
23
24
  - lib/move_logic.rb
24
25
  - lib/piece.rb