Esempio n. 1
0
        private void UndoMove(Position origin, Position destination, Piece capturedPiece)
        {
            Piece p = Board.RemovePiece(destination);

            p.DecreaseNumberOfMoves();
            if (capturedPiece != null)
            {
                Board.PutPiece(capturedPiece, destination);
                Captured.Remove(capturedPiece);
            }
            Board.PutPiece(p, origin);

            //Special Move: Castling - King Side
            if (p is King && destination.Column == origin.Column + 2)
            {
                Position towerOrigin      = new Position(origin.Row, origin.Column + 3);
                Position towerDestination = new Position(origin.Row, origin.Column + 1);
                Piece    tower            = Board.RemovePiece(towerOrigin);
                tower.DecreaseNumberOfMoves();
                Board.PutPiece(tower, towerDestination);
            }

            //Special Move: Castling - Queen Side
            if (p is King && destination.Column == origin.Column - 2)
            {
                Position towerOrigin      = new Position(origin.Row, origin.Column - 4);
                Position towerDestination = new Position(origin.Row, origin.Column - 1);
                Piece    tower            = Board.RemovePiece(towerOrigin);
                tower.DecreaseNumberOfMoves();
                Board.PutPiece(tower, towerDestination);
            }
        }