public Piece PerformMove(Position source, Position target) { Piece p = Board.RemovePiece(source); p.IncreaseMoveCount(); Piece capturedPiece = Board.RemovePiece(target); Board.PlacePiece(p, target); if (capturedPiece != null) { Captured.Add(capturedPiece); } // #Special move - Castling - Kingside Rook if (p is King && target.Column == source.Column + 2) { Position rookSource = new Position(source.Row, source.Column + 3); Position rookTarget = new Position(source.Row, source.Column + 1); Piece rook = Board.RemovePiece(rookSource); rook.IncreaseMoveCount(); Board.PlacePiece(rook, rookTarget); } // #Special move - Castling - Queenside Rook if (p is King && target.Column == source.Column - 2) { Position rookSource = new Position(source.Row, source.Column - 4); Position rookTarget = new Position(source.Row, source.Column - 1); Piece rook = Board.RemovePiece(rookSource); rook.IncreaseMoveCount(); Board.PlacePiece(rook, rookTarget); } // #Special move - En Passant if (p is Pawn) { if (source.Column != target.Column && capturedPiece == null) { Position pawnPosition; if (p.Color == Color.White) { pawnPosition = new Position(target.Row + 1, target.Column); } else { pawnPosition = new Position(target.Row - 1, target.Column); } capturedPiece = Board.RemovePiece(pawnPosition); Captured.Add(capturedPiece); } } return(capturedPiece); }
/// <summary> /// Moves a piece from the origin to the destination /// </summary> /// <param name="origin"></param> /// <param name="destination"></param> public Piece ExecuteMovement(Position origin, Position destination) { Piece p = Board.RemovePiece(origin); p.IncrementMovements(); Piece captured = Board.RemovePiece(destination); Board.PlacePiece(p, destination); if (captured != null) { Captured.Add(captured); } // SPECIAL PLAY SMALL CASTLING if (p is King && destination.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Line, origin.Column + 3); Position rookDest = new Position(origin.Line, origin.Column + 1); Piece rook = Board.RemovePiece(rookOrigin); rook.IncrementMovements(); Board.PlacePiece(rook, rookDest); } // SPECIAL PLAY BIG CASTLING if (p is King && destination.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Line, origin.Column - 4); Position rookDest = new Position(origin.Line, origin.Column - 1); Piece rook = Board.RemovePiece(rookOrigin); rook.IncrementMovements(); Board.PlacePiece(rook, rookDest); } // SPECIAL PLAY EN PASSANT if (p is Pawn) { if (origin.Column != destination.Column && captured == null) { Position pawnPos; if (p.Color == Color.White) { pawnPos = new Position(destination.Line + 1, destination.Column); } else { pawnPos = new Position(destination.Line - 1, destination.Column); } captured = Board.RemovePiece(pawnPos); Captured.Add(captured); } } return(captured); }