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); } }