Exemplo n.º 1
0
        protected virtual bool IsValidMove(Move move, bool validateCheck, bool careAboutWhoseTurnItIs)
        {
            ChessUtility.ThrowIfNull(move, "move");
            if (move.OriginalPosition.Equals(move.NewPosition))
            {
                return(false);
            }
            ChessPiece piece = GetPieceAt(move.OriginalPosition.File, move.OriginalPosition.Rank);

            if (careAboutWhoseTurnItIs && move.Player != WhoseTurn)
            {
                return(false);
            }
            if (piece == null || piece.Owner != move.Player)
            {
                return(false);
            }
            ChessPiece pieceAtDestination = GetPieceAt(move.NewPosition);

            if (pieceAtDestination != null && pieceAtDestination.Owner == move.Player)
            {
                return(false);
            }
            if (!piece.IsLegalMove(move, this))
            {
                return(false);
            }
            if (validateCheck && WouldBeInCheckAfter(move, move.Player))
            {
                return(false);
            }

            return(true);
        }