public Piece Move(Position origin, Position destination) { Piece piece = Board.RemPiece(origin); piece.IncrementQtyMovement(); Piece capturedPiece = Board.RemPiece(destination); Board.AddPiece(piece, destination); if (capturedPiece != null) { CapturedPieces.Add(capturedPiece); } // Castling if (piece is King && destination.Col == origin.Col + 2) { Position originRook = new Position(origin.Row, origin.Col + 3); Position destinationRook = new Position(origin.Row, origin.Col + 1); Piece rook = Board.RemPiece(originRook); rook.IncrementQtyMovement(); Board.AddPiece(rook, destinationRook); } if (piece is King && destination.Col == origin.Col - 2) { Position originRook = new Position(origin.Row, origin.Col - 4); Position destinationRook = new Position(origin.Row, origin.Col - 1); Piece rook = Board.RemPiece(originRook); rook.IncrementQtyMovement(); Board.AddPiece(rook, destinationRook); } // En Passant if (piece is Pawn) { if (origin.Col != destination.Col && capturedPiece == null) { Position pawnPos; if (piece.Color == Color.White) { pawnPos = new Position(destination.Row + 1, destination.Col); } else { pawnPos = new Position(destination.Row - 1, destination.Col); } capturedPiece = Board.RemPiece(pawnPos); CapturedPieces.Add(capturedPiece); } } return(capturedPiece); }