Fix crashes
This commit is contained in:
parent
77ff697df7
commit
9528fb9849
|
@ -447,7 +447,7 @@ proc getAttacksTo*(self: ChessBoard, square: Square, attacker: PieceColor): Bitb
|
|||
result = result or self.getSlidingAttacks(square, attacker)
|
||||
|
||||
|
||||
proc updateCheckers(self: ChessBoard) =
|
||||
proc updateChecksAndPins(self: ChessBoard) =
|
||||
let
|
||||
side = self.getSideToMove()
|
||||
king = self.getBitboard(King, side).toSquare()
|
||||
|
@ -491,7 +491,7 @@ proc generatePawnCaptures(self: ChessBoard, moves: var MoveList) =
|
|||
nonSideToMove = sideToMove.opposite()
|
||||
pawns = self.getBitboard(Pawn, sideToMove)
|
||||
# We can only capture enemy pieces (except the king)
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove)
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove) and not self.getBitboard(King, nonSideToMove)
|
||||
enemyPawns = self.getBitboard(Pawn, nonSideToMove)
|
||||
rightMovement = pawns.forwardRightRelativeTo(sideToMove)
|
||||
leftMovement = pawns.forwardLeftRelativeTo(sideToMove)
|
||||
|
@ -538,7 +538,8 @@ proc generateRookMoves(self: ChessBoard, moves: var MoveList) =
|
|||
let
|
||||
sideToMove = self.getSideToMove()
|
||||
occupancy = self.getOccupancy()
|
||||
enemyPieces = self.getOccupancyFor(sideToMove.opposite())
|
||||
nonSideToMove = sideToMove.opposite()
|
||||
enemyPieces = self.getOccupancyFor(sideToMove.opposite()) and not self.getBitboard(King, nonSideToMove)
|
||||
rooks = self.getBitboard(Rook, sideToMove) or self.getBitboard(Queen, sideToMove)
|
||||
for square in rooks:
|
||||
let
|
||||
|
@ -555,7 +556,8 @@ proc generateBishopMoves(self: ChessBoard, moves: var MoveList) =
|
|||
## Helper of generateSlidingMoves to generate bishop moves
|
||||
let
|
||||
sideToMove = self.getSideToMove()
|
||||
enemyPieces = self.getOccupancyFor(sideToMove.opposite())
|
||||
nonSideToMove = sideToMove.opposite()
|
||||
enemyPieces = self.getOccupancyFor(sideToMove.opposite()) and not self.getBitboard(King, nonSideToMove)
|
||||
occupancy = self.getOccupancy()
|
||||
bishops = self.getBitboard(Bishop, sideToMove) or self.getBitboard(Queen, sideToMove)
|
||||
for square in bishops:
|
||||
|
@ -584,7 +586,7 @@ proc generateKingMoves(self: ChessBoard, moves: var MoveList) =
|
|||
moveIdx = king.toSquare().uint64
|
||||
occupancy = self.getOccupancy()
|
||||
nonSideToMove = sideToMove.opposite()
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove)
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove) and not self.getBitboard(King, nonSideToMove)
|
||||
# Regular moves
|
||||
for square in KING_BITBOARDS[moveIdx] and not occupancy:
|
||||
moves.add(createMove(king, square))
|
||||
|
@ -600,7 +602,7 @@ proc generateKnightMoves(self: ChessBoard, moves: var MoveList)=
|
|||
knights = self.getBitboard(Knight, sideToMove)
|
||||
occupancy = self.getOccupancy()
|
||||
nonSideToMove = sideToMove.opposite()
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove)
|
||||
enemyPieces = self.getOccupancyFor(nonSideToMove) and not self.getBitboard(King, nonSideToMove)
|
||||
for square in knights:
|
||||
# Regular moves
|
||||
for target in KNIGHT_BITBOARDS[square.uint64] and not occupancy:
|
||||
|
@ -622,7 +624,6 @@ proc generateMoves*(self: ChessBoard, moves: var MoveList) =
|
|||
self.generatePawnMoves(moves)
|
||||
self.generateKnightMoves(moves)
|
||||
self.generateSlidingMoves(moves)
|
||||
# self.updateCheckers()
|
||||
|
||||
|
||||
proc removePieceFromBitboard(self: ChessBoard, square: Square) =
|
||||
|
@ -734,6 +735,7 @@ proc doMove*(self: ChessBoard, move: Move) =
|
|||
else:
|
||||
# Unreachable
|
||||
discard
|
||||
self.updateChecksAndPins()
|
||||
|
||||
|
||||
proc spawnPiece(self: ChessBoard, square: Square, piece: Piece) =
|
||||
|
|
Loading…
Reference in New Issue