2011-01-02 2 views
0

Фон: Я довольно новичок в программировании. Это то, что я до сих пор в моем черновике для игры жизни:.Проблема с программой игры для начинающих C++

#include <iostream> 

using namespace std; 

int main() 
{ 

    //INTRODUCTION 

    int arraySize; 
    cout << "What is the length of your square-shaped grid? Enter an integer value greater than 0. Too big will cause problems."; 
    cin >> arraySize; 
    int original[arraySize][arraySize]; 

    //REQUESTS INPUT FOR ARRAY 

    for (int n = 0; n < arraySize; n++) 
    { 
     for (int x = 0; x < arraySize; x++) 
     { 
      bool ValInput; 
      cout << "\n" << n << "," << x << "..."; 
      cin >> ValInput; 
      original[n][x] = ValInput; 
     } 
    } 

    cout << "\n\n\n"; 

    //DISPLAYS ARRAY 

    for (int row = 0; row < arraySize; row++) 
    { 
     for (int column = 0; column < arraySize; column++) 
     { 
      cout << original[row][column] << " "; 
      if (column == arraySize - 1) 
      { 
       cout << "\n"; 
      } 
     } 
    } 

    cout << "Next frame.\n\n"; 

    //FORMS NEXT FRAME WITH VALUES OF # OF LIVE NEIGHBORS 

    int liveNeighbors = 0; 

    for (int z = 0; z < arraySize; z++) 
    { 
     for (int h = 0; h < arraySize; h++) 
     { 
      liveNeighbors = 0; 
      if (z - 1 > -1) 
       liveNeighbors += original[z - 1][h]; 
      if (z + 1 < arraySize) 
       liveNeighbors += original[z + 1][h]; 
      if (h - 1 > -1) 
       liveNeighbors += original[z][h - 1]; 
      if (h + 1 < arraySize) 
       liveNeighbors += original[z][h + 1]; 
      if (z - 1 > -1, h - 1 > -1) 
       liveNeighbors += original[z - 1][h -1]; 
      if (z - 1 > -1, h + 1 < arraySize) 
       liveNeighbors += original[z - 1][h + 1]; 
      if (z + 1 < arraySize, h - 1 > -1) 
       liveNeighbors += original[z + 1][h - 1]; 
      if (z + 1 < arraySize, h + 1 < arraySize) 
      { 
       liveNeighbors += original[z + 1][h + 1]; 
      } 
      cout << liveNeighbors << " "; 

     } 
    } 

} 

Проблема появляется в последнем шаге я сделал до сих пор (что показывает, как много живых соседей каждая ячейка имеет

Пример: если входной сигнал образца сначала «4» для сетки 4x4, а затем вы вводите несколько значений 1 и 0, значение liveNeighbors не реалистично. Оно может быть в сотнях, когда максимум должен быть только 8 .

Если вы могли бы помочь мне найти решение моей проблемы, это было бы хорошо. Однако имейте в виду, что я новичок.

Спасибо :)

+0

Пожалуйста, уточните свой вопрос ТОЧНО, какие у вас проблемы. «количество живых nieghbors работает только для данных в середине» только говорит, что работает, а не то, что не делает ». Вы должны опубликовать свой код в своем вопросе (а не ссылку на него) и опубликовать что-то, что является предпочтительным и демонстрирует, какие проблемы у вас есть. Если вы не можете этого сделать. Дайте нам несколько примеров ввода и вывода. – Falmarri

ответ

5

Некоторые из ваших условий ошибаетесь:

if (z - 1 > -1, h - 1 > -1) /* ... */ 
if (z - 1 > -1, h + 1 < arraySize) /* ... */ 
if (z + 1 < arraySize, h - 1 > -1) /* ... */ 
if (z + 1 < arraySize, h + 1 < arraySize) /* ... */ 

Запятая не делать то, что вы ожидаете, что вам нужно, вероятно, является логическим «и», который в C++ оператор &&:

if ((z - 1 > -1) && (h - 1 > -1)) /* ... */ 
if ((z - 1 > -1) && (h + 1 < arraySize)) /* ... */ 
if ((z + 1 < arraySize) && (h - 1 > -1)) /* ... */ 
if ((z + 1 < arraySize) && (h + 1 < arraySize)) /* ... */ 

Extra скобка добавлены для читаемости только они не требуются.

Только так вы знаете, это стандартное определение оператора запятая:

Пара выражений, разделенных запятой, вычисляются слева направо и значение левого выражения является отбрасывается.

В вашем случае сравнения в левой части запятых в основном не играют никакой роли в состоянии if.

+0

Это сработало! Большое спасибо. Это делает меня очень счастливым.:) – Guest

+1

Хороший оператор запятой ударил снова ... (и с учетом странного приоритета оператора, я бы не хотел полагаться на оппоненты parens ^^) – delnan

1

Я думаю, что ваша проблема в этом коде:

if (z - 1 > -1, h - 1 > -1) 

Ваша интуиция совершенно правильно здесь, но так, что вы написали это в коде, не означает, что вы хотите. В C++ оператор запятой является эзотерическим оператором, который означает «делать обе вещи, но отбрасывать результат первой операции». В этом случае это означает «проверить, если z - 1> -1, то полностью отбросить этот результат, а затем посмотреть, есть ли h - 1> -1», что совсем не то, что вы хотите. Для того, чтобы проверить и посмотреть, если оба эти условия верны, используйте & & оператора:

if (z - 1 > -1 && h - 1 > -1) 

Это должно помочь исправить ошибку.

Надеюсь, это поможет!

Смежные вопросы