public Piece ExecuteMove(Position origin, Position destination) { Piece p = Bd.GetPiece(origin); p.AddQtMovies(); Piece catchedPiece = Bd.GetPiece(destination); Bd.PutPiece(p, destination); if (catchedPiece != null) { catched.Add(catchedPiece); } //#Jogada especial Roque pequeno if (p is King && destination.Coluna == origin.Coluna + 2) { Position tOrigin = new Position(origin.Linha, origin.Coluna + 3); Position tDestination = new Position(origin.Linha, origin.Coluna + 1); Piece T = Bd.GetPiece(tOrigin); T.AddQtMovies(); Bd.PutPiece(T, tDestination); } //#Jogada especial Roque Grande if (p is King && destination.Coluna == origin.Coluna - 2) { Position tOrigin = new Position(origin.Linha, origin.Coluna - 4); Position tDestination = new Position(origin.Linha, origin.Coluna - 1); Piece T = Bd.GetPiece(tOrigin); T.AddQtMovies(); Bd.PutPiece(T, tDestination); } //#Jogada especial enPassant if (p is Pawn) { if (origin.Coluna != destination.Coluna && catchedPiece == null) { Position posP; if (p.Color == Color.White) { posP = new Position(destination.Linha + 1, destination.Coluna); } else { posP = new Position(destination.Linha - 1, destination.Coluna); } catchedPiece = Bd.GetPiece(posP); catched.Add(catchedPiece); } } return(catchedPiece); }