贪吃蛇游戏打不开

Snake game doesn't work

这是代码未编译的部分。它会开始,然后在到达这里时停止。我有一个 [11][22] 的 Char Map,这是我的棋盘。我想要做的是让“*”随机生成,并作为我的蛇的食物。

srand(time(NULL));
int pellet=rand()%21;

while (GameRunning == true)
{
    for (int pellet = rand(); pellet % Map[11][22]; pellet++)
    {
        cout << '*';
    }
    system("cls");

如果Map是char的二维数组:

char Map[11][22];

问题出在这一行:

pellet % Map[11][22]

您正在对地图中的越界条目应用模数。

地图可以从第一维0 to 10开始索引,第二维从0 to 21开始索引。例如,Map[0][0] 是有效条目,Map[4][7] 也是有效条目,但 Map[11][22] 不是有效条目。

在这个越界条目中,那里的值恰好是 0,导致被零除错误(计算 n mod 0 导致此错误)。


为了尽可能简单地解释,将二维数组想象成一个网格。在您的例子中,网格有 11 行和 22 列。

所以现在您想到达该网格上的某个点,比如第三行第五列。为此,您会说 Mat[2][4]。它不是 Mat[3][5] 的原因是在 C++ 中,数组索引从 0 而不是 1 开始。现在有了这个,您正在访问 Mat[11][22],这是一行一列越界。

是的,您将数组声明为 11 行 22 列的大小,但这仅在告诉 C++ 数组有多大时(当您声明数组时)相关。当您需要访问数组中的各个元素时,您必须使用从 0 开始的索引才能到达您感兴趣的条目。

跟进:任何优秀的 C++ 书籍都比我更详细地解释了这一点。