/// <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); }