贪吃蛇游戏打不开
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++ 书籍都比我更详细地解释了这一点。
这是代码未编译的部分。它会开始,然后在到达这里时停止。我有一个 [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++ 书籍都比我更详细地解释了这一点。