Я новичок в программировании и особенно новичок в формах Windows, но я пытаюсь сделать игру в крестики-нолики. Я сделал большую часть этого, но, похоже, не могу заставить сравнение работать. Если кусок player1 находится в месте, тогда это место будет установлено на true и false для player2 и на null, если оно не использовалось. Это то, что у меня есть на данный момент (я знаю, что это не лучший способ сделать это) Пожалуйста может кто-нибудь сказать мне, почему он не работает должным образом:
private void check()
{
if ((board[0, 0] != null) && (board[1, 0] != null) && (board[2, 0] != null) && (board[0, 0] == board[1, 0] && board[1, 0] == board[2, 0]))
{
winner = true;
displaywinner();
}
if ((board[0, 1] != null) && (board[1, 1] != null) && (board[2, 1] != null) && (board[0, 1] == board[1, 1] && board[1, 1] == board[2, 1]))
{
winner = true;
displaywinner();
}
if ((board[0, 2] != null) && (board[1, 2] != null) && (board[2, 2] != null) && (board[0, 2] == board[1, 2] && board[1, 2] == board[2, 2]))
{
winner = true;
displaywinner();
}
if ((board[0, 0] != null) && (board[0, 1] != null) && (board[0, 2] != null) && (board[0, 0] == board[0, 1] && board[0, 1] == board[0, 2]))
{
winner = true;
displaywinner();
}
if ((board[1, 0] != null) && (board[1, 1] != null) && (board[1, 2] != null) && (board[1, 0] == board [1, 2] && board[1, 2] == board [1, 2]))
{
winner = true;
displaywinner();
}
if ((board[2, 0] != null) && (board[2, 1] != null) && (board[2, 2] != null) && (board[2, 0] == board[2, 1] && board[2, 1] == board[2, 2]))
{
winner = true;
displaywinner();
}
if ((board[0, 0] != null) && (board[1, 1] != null) && (board[2, 2] != null) && (board[0, 0] == board[1, 1] && board[1, 1] == board[2, 2]))
{
winner = true;
displaywinner();
}
if ((board[0, 2] != null) && (board[1, 1] != null) && (board[2, 0] != null) && ((board[0, 2] == board[1,1]) && (board[1, 1] == board[2, 0])))
{
winner = true;
displaywinner();
}
}
private void displaywinner()
{
if (winner == true)
{
if (turn == true)
{
MessageBox.Show(player1_name + " won");
}
else if (turn == false)
{
MessageBox.Show(player2_name + " won");
}
turn = !turn;
newGameToolStripMenuItem_Click(new object(), new EventArgs());
}
}
И совет, чтобы сделать ваш код более читабельным: создайте метод, который проверяет тройку bool? на ваше условие выигрыша, чтобы вы могли вызывать его с каждой строкой, столбцом или диагональю. Что-то вроде HasTripletWon(board[0,0], board[0,1], board[0,2]).





Когда вы вызываете свой метод
check? Похоже, он будет работать только в том случае, если вы вызываете его после каждого хода, пока никто не выиграл на предыдущем ходу. Вы меняетеturnкаким-либо другим способом после каждого поворота? Ваш вставленный код переключаетturnтолько тогда, когда был найден победитель.