예제 #1
0
        public Piece PerformMove(Position source, Position target)
        {
            Piece p = Board.RemovePiece(source);

            p.IncreaseMoveCount();
            Piece capturedPiece = Board.RemovePiece(target);

            Board.PlacePiece(p, target);
            if (capturedPiece != null)
            {
                Captured.Add(capturedPiece);
            }

            // #Special move - Castling - Kingside Rook

            if (p is King && target.Column == source.Column + 2)
            {
                Position rookSource = new Position(source.Row, source.Column + 3);
                Position rookTarget = new Position(source.Row, source.Column + 1);
                Piece    rook       = Board.RemovePiece(rookSource);
                rook.IncreaseMoveCount();

                Board.PlacePiece(rook, rookTarget);
            }

            // #Special move - Castling - Queenside Rook

            if (p is King && target.Column == source.Column - 2)
            {
                Position rookSource = new Position(source.Row, source.Column - 4);
                Position rookTarget = new Position(source.Row, source.Column - 1);
                Piece    rook       = Board.RemovePiece(rookSource);
                rook.IncreaseMoveCount();

                Board.PlacePiece(rook, rookTarget);
            }

            // #Special move - En Passant

            if (p is Pawn)
            {
                if (source.Column != target.Column && capturedPiece == null)
                {
                    Position pawnPosition;
                    if (p.Color == Color.White)
                    {
                        pawnPosition = new Position(target.Row + 1, target.Column);
                    }
                    else
                    {
                        pawnPosition = new Position(target.Row - 1, target.Column);
                    }
                    capturedPiece = Board.RemovePiece(pawnPosition);
                    Captured.Add(capturedPiece);
                }
            }

            return(capturedPiece);
        }
예제 #2
0
        /// <summary>
        /// Moves a piece from the origin to the destination
        /// </summary>
        /// <param name="origin"></param>
        /// <param name="destination"></param>
        public Piece ExecuteMovement(Position origin, Position destination)
        {
            Piece p = Board.RemovePiece(origin);

            p.IncrementMovements();
            Piece captured = Board.RemovePiece(destination);

            Board.PlacePiece(p, destination);
            if (captured != null)
            {
                Captured.Add(captured);
            }

            // SPECIAL PLAY SMALL CASTLING
            if (p is King && destination.Column == origin.Column + 2)
            {
                Position rookOrigin = new Position(origin.Line, origin.Column + 3);
                Position rookDest   = new Position(origin.Line, origin.Column + 1);
                Piece    rook       = Board.RemovePiece(rookOrigin);
                rook.IncrementMovements();
                Board.PlacePiece(rook, rookDest);
            }

            // SPECIAL PLAY BIG CASTLING
            if (p is King && destination.Column == origin.Column - 2)
            {
                Position rookOrigin = new Position(origin.Line, origin.Column - 4);
                Position rookDest   = new Position(origin.Line, origin.Column - 1);
                Piece    rook       = Board.RemovePiece(rookOrigin);
                rook.IncrementMovements();
                Board.PlacePiece(rook, rookDest);
            }

            // SPECIAL PLAY EN PASSANT
            if (p is Pawn)
            {
                if (origin.Column != destination.Column && captured == null)
                {
                    Position pawnPos;
                    if (p.Color == Color.White)
                    {
                        pawnPos = new Position(destination.Line + 1, destination.Column);
                    }
                    else
                    {
                        pawnPos = new Position(destination.Line - 1, destination.Column);
                    }
                    captured = Board.RemovePiece(pawnPos);
                    Captured.Add(captured);
                }
            }

            return(captured);
        }