2

我正在尝试编写“康威生命游戏”可视化。我想我对如何去做有一个可靠的想法,但我遇到的问题是:当我尝试输出二维数组的行和列时,它开始在数字之间跳跃,并且永远不会停止滚动号码。它似乎被 78 的“x”抓住了。

#include <iostream>
#include <cstring>
#include <cstdlib>
#define HEIGHT 25
#define WIDTH 80
using namespace std;

void makeBoard();
int seed = 0;

int main()
{
    makeBoard();
}

void makeBoard()
{
    int board[79][24] = {0};
    /* Seed the random number generator with the specified seed */
    srand(seed);
    for(int x = 0; x <= 79; x++)
    {
        for(int y = 0; y <= 24; y++)
        {
            /* 50% chance for a cell to be alive */
            if(rand() % 100 < 50)
            {
                board[x][y] = {1};
            }
            else
            {
                board[x][y] = {0};
            }
            /*if(board[x][y] == 1) {
                    cout << "SPAM" << endl;
                     }*/
                     //this is just printing out the current location it is iterating through.
            cout << "X: " << x << " Y: " << y << endl;
        }
        cout << endl;
    }
}

运行它所需的所有代码都应该在那里。

感谢您的帮助和耐心。

4

2 回答 2

6

您的索引超出范围。[79][24] 的数组具有从 0-19 到 0-23 的索引。您的状态分别在 79 和 24 停止。将 <= 替换为 <。

于 2013-07-14T02:41:16.090 回答
0

大小为 N 的数组从 0 变为 n-1。您需要将 <= 替换为 <,因为您在数组的每个维度上都超出了界限。

另请注意,您只有 79 列和 24 行,而不是您在程序顶部定义的 80 和 25。您可以通过以下方式解决此问题:

int board[HEIGHT][WIDTH];

然后将79和24分别替换为HEIGHT和WIDTH,将循环条件中的<=改为<。这样,您所需要做的就是更改顶部的那些单个值以更改整个电路板的大小。

于 2013-07-14T03:04:12.690 回答