Сложность с аккумулятором во вложенном цикле

Я довольно новичок в C ++, и мне нужно написать код для соответствующей игры, и у меня возникли проблемы с функцией, которая обнаруживает совпадения.
Ниже приведена более простая, разбавленная версия игры, которую я сделал, чтобы попытаться отладить функцию соответствия.
По сути, у меня есть набор чисел, хранящихся в 2D-массиве, и мне нужно циклически перемещаться по сетке, чтобы увидеть, есть ли совпадения (3 одинаковых символа в строке, по вертикали или по горизонтали, составляют совпадение). Пользователь получает одно очко за каждый матч.
Каждый раз, когда происходит совпадение, мне нужно накапливать переменную, в которой хранится оценка пользователя. Я думаю, что код довольно интуитивно понятен, циклы и операторы if проверяют второй и третий элементы после i-го элемента, и, если они все одинаковы, совпадение обнаружено.

У меня проблема в том, что точки не добавляются в переменную count, когда они должны. Массив «things» предназначен для эмуляции игрового поля, и я разработал его так, чтобы в нем было хотя бы одно совпадение, которое, по-видимому, не обнаруживаются в моих операторах if. Как я могу это исправить, чтобы «считать» будет хранить баллы?

Я никогда не публиковал здесь ничего раньше, поэтому прошу прощения за слегка странное форматирование, но вот код:

#include <iostream>
using namespace std;
int main()
{
int things[3][3] = {{3, 3, 3}, {2, 8, 4}, {3, 7, 2}};
int count = 0;
for (int i = 0; i <= 3; i++)
{
for (int j = 0; j <= 3; j++)
{
if (things[i] == things[i+1])
count++;
if (things[i] == things[i+2])
count++;
if (things[i] == things[i+3])
count++;
else
{
if (things[j] == things[j+1])
count++;
if (things[j] == things[j+2])
count++;
if (things[j] == things[j+3])
count++;
}
}
}
return 0;
}

0

Решение

3 одинаковых символа подряд, по вертикали или по горизонтали, составляют совпадение

Слишком правильно закодируйте. Сначала вам нужно иметь правильный алгоритм.

Вот как я бы написал это в псевдокоде:

For every row:
- For first n-2 columns in this row
- if current match result and next 2 match results are the same : increment counter

For every column:
- For first n-2 rows in this column
- if current match result and next 2 match results are the same : increment counter
0

Другие решения

Других решений пока нет …