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

Я довольно новичок в 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;
}

1 ответ

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
Другие вопросы по тегам