Пример #1
0
        public override bool ValidateMove(Vector direction)
        {
            if (direction.Equals(new Vector( 1,  2)) ||
                direction.Equals(new Vector( 2,  1)) ||
                direction.Equals(new Vector(-1,  2)) ||
                direction.Equals(new Vector(-2,  1)) ||
                direction.Equals(new Vector( 1, -2)) ||
                direction.Equals(new Vector( 2, -1)) ||
                direction.Equals(new Vector(-1, -2)) ||
                direction.Equals(new Vector(-2, -1)))
            {
                Position pos = GetPositionOnBoard().Move(direction);
                IChessPiece piece = Board.GetFieldPiece(pos);
                if ((piece == null) || (!Color.Equals(piece.Color)))
                    return true;
            }

            return false;
        }
Пример #2
0
        public override bool ValidateMove(Vector direction)
        {
            int yDir = (Color == ChessColor.Black) ? -1 : 1;

            // Move
            if ((direction.Equals(new Vector(0, yDir))) ||
                (OnStartPosition && direction.Equals(new Vector(0, yDir * 2))))
            {
                Position pos = GetPositionOnBoard().Move(direction);
                IChessPiece piece = Board.GetFieldPiece(pos);
                if (piece == null)
                {
                    if (Math.Abs(direction.y) > 1)
                    {
                        pos = pos.Move(new Vector(0, -yDir));
                        piece = Board.GetFieldPiece(pos);
                        if (piece == null)
                            return true;
                    }
                    else
                    {
                        return true;
                    }
                }
            }
            // Attacking
            else if (direction.Equals(new Vector( 1, yDir)) ||
                     direction.Equals(new Vector(-1, yDir)))
            {
                Position pos = GetPositionOnBoard();
                IChessPiece enemy = Board.GetFieldPiece(pos.Move(direction));

                if ((enemy != null) && (enemy.Color != Color))
                    return true;
                // En Passant
                else if (EnPassantPossible)
                    return true;
            }

            return false;
        }