蛇游戏不起作用

Som*_* PC -2 c++ visual-c++ c++11

这是代码中没有编译的部分.它会在它到达时开始然后停止.我有[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");
Run Code Online (Sandbox Code Playgroud)

Pau*_*zie 5

如果Map是char的二维数组:

char Map[11][22];

问题是这一行:

pellet % Map[11][22]
Run Code Online (Sandbox Code Playgroud)

您正在地图中的越界条目上应用模数.

可以从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++书都会比我更详细地解释这一点.