public Piece Move(Position source, Position target) { Piece p = Board.RemovePiece(source); p.IncreaseMove(); Piece capturedPiece = Board.RemovePiece(target); Board.PlacePiece(p, target); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } // #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(sourceR); R.IncreaseMove(); Board.PlacePiece(R, targetR); } // #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(sourceR); R.IncreaseMove(); Board.PlacePiece(R, targetR); } // #specialMove EnPassant { if (p is Pawn && source.Column != target.Column && capturedPiece == null) { Position posP; if (p.Color == Color.White) { posP = new Position(target.Row + 1, target.Column); } else { posP = new Position(target.Row - 1, target.Column); } capturedPiece = Board.RemovePiece(posP); CapturedPieces.Add(capturedPiece); } } return(capturedPiece); }