Esempio n. 1
0
        private void CheckIfKingCrossesAttackedField(IBoard board, Position from, Position to, ChessColor color)
        {
            if (to.Col < from.Col)
            {
                for (int i = to.Col; i <= from.Col; i++)
                {
                    Position currentPosition = Position.FromChessCoordinates(from.Row, (char)i);

                    if (MovedFigures.IsFieldAttacked(board, currentPosition, color))
                    {
                        throw new InvalidOperationException(ExceptionMessages.KingCannotCrossAttackedField);
                    }
                }
            }
            else
            {
                for (int i = from.Col + 1; i <= to.Col; i++)
                {
                    Position currentPosition = Position.FromChessCoordinates(from.Row, (char)i);

                    if (MovedFigures.IsFieldAttacked(board, currentPosition, color))
                    {
                        throw new InvalidOperationException(ExceptionMessages.KingCannotCrossAttackedField);
                    }
                }
            }
        }
Esempio n. 2
0
        private void CheckIfKingIsInCheck(IBoard board, ChessColor color)
        {
            var position = board.GetFigurePostionByTypeAndColor("King", color);

            if (MovedFigures.IsFieldAttacked(board, position, color))
            {
                throw new InvalidOperationException(ExceptionMessages.CannotCastleIfKingIsInCheckException);
            }
        }