У меня есть некоторое время (правда) l oop, и есть список, который я обновляю в конце каждого l oop, но я смог точно определить место, где список меняется в середине л oop. Тем не менее, я не написал ни одного кода, адреса которого в этой части кода бывают l oop 2D-массивы, называемые test1 и test2, отличаются, когда я запускаю код, хотя нигде (я проверил ctrl + F) внутри movePiece обращается к boardHistory.
Я хочу как-то отследить этот список, чтобы при его изменении я может видеть стек вызовов и строку, которая изменила его.
while (true)
{
prompt();
if (!moveSet.empty())
{
inStr = moveSet.next();
}
else
{
inStr = Console.ReadLine().ToLower();
}
validInput = true;
if (!inputIsValid(inStr))
{
validInput = false;
Console.WriteLine("invalid input");
}
if (validInput)
{
string[] arr = inStr.Split(' ');
int[,] test1 = boardHistory[boardHistory.Count - 1].boardValues;
movePieceTrad(arr[0], arr[1]);
int[,] test2 = boardHistory[boardHistory.Count - 1].boardValues;
if (!moveValid)
{
continue;
}
else
{
turn++;
posOrNegTurn = -posOrNegTurn;
int w = tradToCoords(arr[1])[0];
int u = tradToCoords(arr[1])[1];
bool tempPawnBool = false;
if (Math.Abs(board[w, u]) == 1)
{
tempPawnBool = true;
}
int[] movement = {
tradToCoords(arr[0])[0], tradToCoords(arr[0])[1],
tradToCoords(arr[1])[0], tradToCoords(arr[1])[1]
};
bool tempCaptureBool = false;
int[,] test4 = boardHistory[boardHistory.Count - 1].boardValues;
int test5 = boardHistory[boardHistory.Count - 1].boardValues[w, u];
if (boardHistory[boardHistory.Count - 1].boardValues[w, u] != 0) // if the last board state had a piece where the last move landed
{
tempCaptureBool = true;
}
if (moveWasEnPassant)
{
board[w, u - board[w, u]] = 0;
tempCaptureBool = true;
}
moveHistory.Add(new Move(
Math.Abs(board[w, u]),
board[w, u] / Math.Abs(board[w, u]),
tempCaptureBool,
tempPawnBool,
movement
));
moveWasEnPassant = false;
if (!(board[w, u] == 1 && u - tradToCoords(arr[0])[1] == 2) &&
!(board[w, u] == -1 && u - tradToCoords(arr[0])[1] == -2))
{
resetEnPassant();
}
int temp = board[w, u]; //the value of the piece just moved
int type = temp / Math.Abs(temp);
if (Math.Abs(temp) == 6)
{
if (type == -1) castlePiecesMoved[0, 1] = 1;
if (type == 1) castlePiecesMoved[1, 1] = 1;
}
if (Math.Abs(temp) == 4)
{
if (type == -1 && w == 0) castlePiecesMoved[0, 0] = 1;
if (type == 1 && w == 0) castlePiecesMoved[1, 0] = 1;
if (type == -1 && w == 7) castlePiecesMoved[0, 2] = 1;
if (type == 1 && w == 7) castlePiecesMoved[1, 2] = 1;
}
if (!aMoveExistsForType(posOrNegTurn))
{
if (posOrNegTurn == -1 && blackIsChecked)
{
Console.WriteLine("--White wins by checkmate--");
printBoard();
}
else if (posOrNegTurn == 1 && whiteIsChecked)
{
Console.WriteLine("--Black wins by checkmate--");
printBoard();
}
else
{
Console.WriteLine("--Draw by stalemate--");
printBoard();
}
//BoardObject tempBoardObject2 = new BoardObject(board, possibleEnPassants, castlePiecesMoved, posOrNegTurn);
//boardHistory.Add(tempBoardObject2);
break;
}
BoardObject tempBoardObject = new BoardObject(board, possibleEnPassants, castlePiecesMoved, posOrNegTurn);
boardHistory.Add(tempBoardObject);
}
}
printBoard();
}