public void UndoMovement(Position origin, Position destiny, Piece capturedPiece) { Piece piece = Board.RemovePiece(destiny); piece.DecreaseMovementQuantity(); if (capturedPiece != null) { Board.PlacePiece(capturedPiece, destiny); CapturedPieces.Remove(capturedPiece); } Board.PlacePiece(piece, origin); // #SpecialMove Short Castling if (piece is King && destiny.Column == origin.Column + 2) { Position originTower = new Position(origin.Row, origin.Column + 3); Position destinyTower = new Position(origin.Row, origin.Column + 1); Piece tower = Board.RemovePiece(destinyTower); tower.DecreaseMovementQuantity(); Board.PlacePiece(tower, originTower); } // #SpecialMove Long Castling if (piece is King && destiny.Column == origin.Column - 2) { Position originTower = new Position(origin.Row, origin.Column - 4); Position destinyTower = new Position(origin.Row, origin.Column - 1); Piece tower = Board.RemovePiece(destinyTower); tower.DecreaseMovementQuantity(); Board.PlacePiece(tower, originTower); } // #Special Move en Passant if (piece is Pawn) { if (origin.Column != destiny.Column && capturedPiece == VulnerableEnPassant) { Piece pawn = Board.RemovePiece(destiny); Position pawnPosition; if (piece.Color == Color.White) { pawnPosition = new Position(3, destiny.Column); } else { pawnPosition = new Position(4, destiny.Column); } Board.PlacePiece(pawn, pawnPosition); } } }
private void UndoMove(Position origin, Position destiny, GamePiece capturedPiece) { GamePiece piece = Board.RemovePiece(destiny); piece.DecrementNumberOfMovements(); if (capturedPiece != null) { Board.PlacePiece(capturedPiece, destiny); CapturedPieces.Remove(capturedPiece); } Board.PlacePiece(piece, origin); // SPECIAL MOVES: // Lesser Castling if (piece is King && destiny.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Row, origin.Column + 3); Position rookDestiny = new Position(origin.Row, origin.Column + 1); GamePiece rook = Board.RemovePiece(rookDestiny); rook.DecrementNumberOfMovements(); Board.PlacePiece(rook, rookOrigin); } // Lesser Castling if (piece is King && destiny.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Row, origin.Column - 4); Position rookDestiny = new Position(origin.Row, origin.Column - 1); GamePiece rook = Board.RemovePiece(rookDestiny); rook.DecrementNumberOfMovements(); Board.PlacePiece(rook, rookOrigin); } // En Passent if (piece is Pawn) { if (destiny.Column != origin.Column && capturedPiece == EnPassentTarget) { GamePiece targetPawn = Board.RemovePiece(destiny); Position targetPawnPosition; if (piece.Color == Color.White) { targetPawnPosition = new Position(3, destiny.Column); } else { targetPawnPosition = new Position(4, destiny.Column); } Board.PlacePiece(targetPawn, targetPawnPosition); } } }
private void UndoMove(Position source, Position target, Piece capturedPiece) { ChessPiece p = (ChessPiece)Board.RemovePiece(target); p.DecreaseMoveCount(); Board.PlacePiece(p, source); if (capturedPiece != null) { Board.PlacePiece(capturedPiece, target); CapturedPieces.Remove(capturedPiece); PiecesOnTheBoard.Add(capturedPiece); } //SpecialMove Castling KingSide Rook if (p is King && target.Column == source.Column + 2) { Position sourceRook = new Position(source.Row, source.Column + 3); Position targetRook = new Position(source.Row, source.Column + 1); ChessPiece rook = (ChessPiece)Board.RemovePiece(targetRook); Board.PlacePiece(rook, sourceRook); rook.DecreaseMoveCount(); } //SpecialMove Castling QueenSide Rook if (p is King && target.Column == source.Column - 2) { Position sourceRook = new Position(source.Row, source.Column - 4); Position targetRook = new Position(source.Row, source.Column - 1); ChessPiece rook = (ChessPiece)Board.RemovePiece(targetRook); Board.PlacePiece(rook, sourceRook); rook.DecreaseMoveCount(); } //SpecialMove EnPassant if (p is Pawn) { if (source.Column != target.Column && capturedPiece == EnPassantVulnerable) { ChessPiece pawn = (ChessPiece)Board.RemovePiece(target); Position pawnPosition; if (p.Color == Color.White) { pawnPosition = new Position(3, target.Column); } else { pawnPosition = new Position(3, target.Column); } Board.PlacePiece(pawn, pawnPosition); } } }
public void UndoMove(Position from, Position to, Piece capturedPiece) { Piece p = Board.RemovePiece(to); p.SubtractQntMoves(); if (capturedPiece != null) { Board.PutPiece(capturedPiece, to); CapturedPieces.Remove(capturedPiece); } Board.PutPiece(p, from); }
public void UndoChessMove(Position origin, Position destiny, Piece takenPiece) { Piece returnedPiece = Board.RemovePiece(destiny); returnedPiece.DecreaseQtyMovement(); Board.AddressPiece(returnedPiece, origin); if (takenPiece != null) { Board.AddressPiece(takenPiece, destiny); CapturedPieces.Remove(takenPiece); } //Special move: Castling //Short Castling if (returnedPiece is King && destiny.Column == origin.Column + 2) { Position rookOrigin = new Position(origin.Line, origin.Column + 3); Position rookDestiny = new Position(origin.Line, origin.Column + 1); Piece movedRook = Board.RemovePiece(rookDestiny); movedRook.DecreaseQtyMovement(); Board.AddressPiece(movedRook, rookOrigin); } //Long Castling if (returnedPiece is King && destiny.Column == origin.Column - 2) { Position rookOrigin = new Position(origin.Line, origin.Column - 4); Position rookDestiny = new Position(origin.Line, origin.Column - 1); Piece movedRook = Board.RemovePiece(rookDestiny); movedRook.DecreaseQtyMovement(); Board.AddressPiece(movedRook, rookOrigin); } //Special move: En passant if (returnedPiece is Pawn) { if (origin.Column != destiny.Column && takenPiece == VulnerableToEnPassant) { Piece EnPassantCapture = Board.RemovePiece(destiny); Position EnPassantReturnPosition; if (returnedPiece.Color == Color.White) { EnPassantReturnPosition = new Position(3, destiny.Column); } else { EnPassantReturnPosition = new Position(4, destiny.Column); } Board.AddressPiece(EnPassantCapture, EnPassantReturnPosition); } } }
public void UndoMoviment(Position origin, Position destiny, Piece captPiece) { Piece p = ChessBoard.RemovePiece(destiny); p.DecrementQnttMovies(); if (captPiece != null) { ChessBoard.InsertPiece(captPiece, destiny); CapturedPieces.Remove(captPiece); } ChessBoard.InsertPiece(p, origin); //#jogada especial roque pequeno if (p is King && destiny.Column == origin.Column + 2) { Position originT = new Position(origin.Line, origin.Column + 3); Position destinyT = new Position(origin.Line, origin.Column + 1); Piece T = ChessBoard.RemovePiece(destinyT); T.DecrementQnttMovies(); ChessBoard.InsertPiece(T, originT); } //#jogada especial roque pequeno if (p is King && destiny.Column == origin.Column - 2) { Position originT = new Position(origin.Line, origin.Column - 4); Position destinyT = new Position(origin.Line, origin.Column - 1); Piece T = ChessBoard.RemovePiece(destinyT); T.DecrementQnttMovies(); ChessBoard.InsertPiece(T, originT); } //#jogada especial EnPassant if (p is Pawn) { if (origin.Column != destiny.Column && captPiece == VulnerableForEnPassant) { Piece pawn = ChessBoard.RemovePiece(destiny); Position posP; if (p.Color == Color.Branca) { posP = new Position(3, destiny.Column); } else { posP = new Position(4, destiny.Column); } } } }
/// <summary> /// Undo the movement itself that would put in check /// </summary> /// <param name="piece">Current piece</param> /// <param name="capturedPiece">Captured piece</param> /// <param name="origin">Origin of current piece</param> private void UndoMovement(Position origin, Position target, Piece captured) { Piece piece = Board.RemovePiece(target); piece.DecrementMovements(); StringBuilder text = new StringBuilder(); Position originAux = null; if (captured != null) { text.AppendLine("Undo captured"); text.AppendLine(string.Concat("Captured Piece: ", captured.GetType())); text.AppendLine(string.Concat("Color: ", captured.Color.ToString())); if (captured != EnableEnPassant) { Board.PutPiece(captured, target); text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row)); CapturedPieces.Remove(captured); } else { originAux = new Position(origin.Row, target.Column); Board.PutPiece(captured, originAux); CapturedPieces.Remove(captured); text.AppendLine(string.Concat("Origin ChessPosition: ", originAux.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", originAux.Column, ", ", originAux.Row)); } text.AppendLine(string.Concat("Turn: ", TotalMoves)); text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString())); text.AppendLine(); } Board.PutPiece(piece, origin); text.AppendLine(string.Concat("Undo Piece: ", captured.GetType())); text.AppendLine(string.Concat("Color: ", captured.Color.ToString())); text.AppendLine(string.Concat("Origin ChessPosition: ", origin.ToChessPosition().ToString(), " Origin CanvasPosition(Column, Row): ", origin.Column, ", ", origin.Row)); text.AppendLine(string.Concat("Turn: ", TotalMoves)); text.AppendLine(string.Concat("Date: ", DateTime.Now.ToShortDateString(), " Time: ", DateTime.Now.ToShortTimeString())); WriteLog.ChecksLogs(text); }