public virtual bool WouldBeInCheckAfter(Move move, Player player)
{
ChessUtilities.ThrowIfNull(move, "move");
GameCreationData gcd = new GameCreationData();
gcd.Board = Board;
gcd.CanWhiteCastleKingSide = CanWhiteCastleKingSide;
gcd.CanWhiteCastleQueenSide = CanWhiteCastleQueenSide;
gcd.CanBlackCastleKingSide = CanBlackCastleKingSide;
gcd.CanBlackCastleQueenSide = CanBlackCastleQueenSide;
gcd.EnPassant = null;
if (_moves.Count > 0)
{
DetailedMove last = _moves.Last();
if (last.Piece is Pawn && new PositionDistance(last.OriginalPosition, last.NewPosition).DistanceY == 2)
{
gcd.EnPassant = new Position(last.NewPosition.File, last.Player == Player.White ? 3 : 6);
}
}
gcd.HalfMoveClock = i_halfMoveClock;
gcd.FullMoveNumber = i_fullMoveNumber;
ChessGame copy = new ChessGame(gcd);
Piece p = copy.GetPieceAt(move.OriginalPosition);
copy.SetPieceAt(move.OriginalPosition.File, move.OriginalPosition.Rank, null);
copy.SetPieceAt(move.NewPosition.File, move.NewPosition.Rank, p);
return(copy.IsInCheck(player));
}