chess_validator 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/chess_validator.rb +1 -2
- data/lib/constants/{square_key.rb → move_key.rb} +0 -0
- data/lib/engine.rb +29 -0
- data/lib/move_logic.rb +10 -11
- data/lib/piece.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0e4f35f7365cba31d8882b494232dd0357745db3b3390d9da373225e9e378ee1
|
4
|
+
data.tar.gz: bab4ecf238d41abc2290e2f1a7bac33d727d14605140e57414cef484225d581f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cde6774a3a7e10f367805944038f8ddafb61c1aa4054067d20de055171b062ed270081deee99a50e14f771a8fd9a4f71bee23eaa19faa0256ba374151e6605f2
|
7
|
+
data.tar.gz: fdec3d74fb38c1bd2a4ecbce08c2d1f7c11e705856f58b858868f0628dfab8d1917e4bb972afb4fb07d0c85ac755cae0f7d04685a427a3dcc8322ad5f15e37b2
|
data/lib/chess_validator.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require '
|
2
|
-
require 'game_logic'
|
1
|
+
require 'engine'
|
File without changes
|
data/lib/engine.rb
ADDED
@@ -0,0 +1,29 @@
|
|
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 get_pieces(fen_notation)
|
24
|
+
fen = PGN::Game.new(moves).positions.last.to_fen
|
25
|
+
BoardLogic.build_board(fen).values
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/move_logic.rb
CHANGED
@@ -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 = []
|
@@ -51,7 +41,8 @@ module ChessValidator
|
|
51
41
|
def with_next_move(piece, board, move)
|
52
42
|
index = INDEX_KEY[move]
|
53
43
|
new_board = board.clone
|
54
|
-
|
44
|
+
piece_type = resolve_piece_type(piece.piece_type, move)
|
45
|
+
new_piece = Piece.new(piece_type, index)
|
55
46
|
new_board.delete(piece.square_index)
|
56
47
|
new_board[index] = new_piece
|
57
48
|
new_board = handle_castle(new_board, move) if castled?(piece, move)
|
@@ -59,6 +50,14 @@ module ChessValidator
|
|
59
50
|
new_board
|
60
51
|
end
|
61
52
|
|
53
|
+
def resolve_piece_type(piece_type, move)
|
54
|
+
if piece_type.downcase == 'p' && ['1', '8'].include?(move[1])
|
55
|
+
move[1] == '8' ? 'Q' : 'q'
|
56
|
+
else
|
57
|
+
piece_type
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
62
61
|
def handle_en_passant(board, pawn_color, move)
|
63
62
|
if pawn_color == 'w'
|
64
63
|
index = INDEX_KEY[move[0] + '5']
|
data/lib/piece.rb
CHANGED
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.
|
4
|
+
version: 0.2.2
|
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/
|
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
|