public void UndoMove(Position source, Position target, Piece capturedPiece) { Piece p = Board.RemovePiece(target); p.DecreaseMove(); if (capturedPiece != null) { Board.PlacePiece(capturedPiece, target); CapturedPieces.Remove(capturedPiece); } Board.PlacePiece(p, source); // #specialMove kingside Castling if (p is King && target.Column == source.Column + 2) { Position sourceR = new Position(source.Row, source.Column + 3); Position targetR = new Position(source.Row, source.Column + 1); Piece R = Board.RemovePiece(targetR); R.DecreaseMove(); Board.PlacePiece(R, sourceR); } // #specialMove queenside Castling if (p is King && target.Column == source.Column - 2) { Position sourceR = new Position(source.Row, source.Column - 4); Position targetR = new Position(source.Row, source.Column - 1); Piece R = Board.RemovePiece(targetR); R.DecreaseMove(); Board.PlacePiece(R, sourceR); } // #specialMove EnPassant { if (p is Pawn && source.Column != target.Column && capturedPiece == EnPassantVulnerable) { Piece pawn = Board.RemovePiece(target); Position posP; if (p.Color == Color.White) { posP = new Position(3, target.Column); } else { posP = new Position(4, target.Column); } Board.PlacePiece(pawn, posP); //CapturedPieces.Remove(capturedPiece); } } }