Подключите четыре, проверьте наличие победителей в C

#c

#c

Вопрос:

 if ((board[y][x] == 'o' amp;amp; board[y][x   1] == 'o' amp;amp; board[y][x   2] == 'o' amp;amp; board[y][x   3] == 'o')  
||  (board[y][x] == 'o' amp;amp; board[y][x - 1] == 'o' amp;amp; board[y][x - 2] == 'o' amp;amp; board[y][x - 3] == 'o') )
    {
     printf("you win!n");
    }
 

это то, что я пытался сделать с помощью char *board[10][10]
в любом случае простой способ решить эту проблему? Я пробовал много других методов, таких как цикл for() и цикл doWhile(), но, похоже, ничего не работает. пожалуйста, совет, спасибо

Комментарии:

1. Отображается какая — либо ошибка? (Что вы подразумеваете под тем, что, похоже, ничего не работает) Не могли бы вы привести весь код? ( x и y = ?) То, что у вас здесь есть, довольно просто и может быть правильным, однако может потребоваться несколько дополнительных проверок.

Ответ №1:

Основная проблема, которую я вижу здесь, заключается в том, что вы проверяете только в одном направлении, поэтому, если последний счетчик опускается в середину «4», это не будет считаться победой.

У меня, вероятно, была бы функция, которая поочередно просматривает каждое направление (например, точки компаса), подсчитывает длину непрерывной «линии» в каждом направлении и сохраняет ее во временной переменной. После того, как это будет сделано для каждого направления, сложите линии в противоположных сторонах и посмотрите, прибавится ли это к 4.

Хотя, вероятно, есть миллион других способов сделать это!

Ответ №2:

Я думаю, что for-loop подходит для вашей проблемы. Для позиции (x, y), (x, y) (1,0) * k(k = 0,1,2, …) будет делать то же самое, что и ваша первая строка.

На самом деле, я думаю, вам следует проверять 4 направления, а не только ось x.

Как я только что сказал, (-1,0) и (1,0) помогут вам проверить положения вокруг (x, y) по оси x.

Аналогично, для других направлений.