if (movedirection == 1) { Head_x -= 1; if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; } }0x5EEBFC66 (ucrtbased.dll) (贪吃蛇2.exe 中)处有未经处理的异常: 将一个无效参数传递给了将无效参数视为严重错误的函数。
时间: 2024-04-05 11:31:42 浏览: 20
这个错误通常是由于数组越界访问导致的。根据代码片段,出现异常的可能性很大是由于 `Head_x` 的值小于等于0或大于等于数组 `body` 的长度,导致访问越界。要解决这个问题,可以在代码中加入越界检查,确保访问数组时不会出现越界情况。例如,可以通过判断 `Head_x` 是否大于等于0并且小于数组 `body` 的长度来判断是否越界,如果越界则需要进行异常处理。同时,也需要确保变量 `movedirection` 的值是合法的,避免出现其他类型的异常。
相关问题
if (movedirection == 1) { Head_x -= 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_x == 0) { Head_x = 18; } else if (Head_x == 19) { Head_x = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; }帮我重写向上移动的代码
if (movedirection == 1) { Head_x -= 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_x == 0) { Head_x = 18; } else if (Head_x == 19) { Head_x = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; }
重写后的向上移动的代码:
if (movedirection == 2) { Head_x += 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_x == 0) { Head_x = 18; } else if (Head_x == 19) { Head_x = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; }
void Snake::moveSnakeByDirection() { for (int i = 0; i < 20; i++)//蛇身数值+1 { for (int j = 0; j < 30; j++) { if (body[i][j] > 0) body[i][j]++; } } for (int i = 0; i < 20; i++)//找老蛇头 { for (int j = 0; j < 30; j++) { if (body[i][j] == 2) { Head_x = i; Head_y = j; break; } } } int Max; Max = body[0][0];//查找最大值 for (int i = 0; i < 20; i++)//去蛇尾 { for (int j = 0; j < 30; j++) { if (body[i][j] > Max) { Max = body[i][j]; snaketail_x = i; snaketail_y = j; } } if (movedirection == 1) { Head_x -= 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_x == 0) { Head_x = 18; } else if (Head_x == 19) { Head_x = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; } } if (movedirection == 2) { Head_x += 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_x == 0) { Head_x = 18; } else if (Head_x == 19) { Head_x = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; } if (movedirection == 3) { Head_y -= 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_y == 0) { Head_y = 28; } else if (Head_y == 29) { Head_y = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游
戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; } if (movedirection == 4) { Head_y += 1; if (body[Head_x][Head_y] == -2) { int food_x; int food_y; food_x = rand() % 20; food_y = rand() % 30; body[food_x][food_y] = -2; } else { body[snaketail_x][snaketail_y] = 0; } if (body[Head_x][Head_y] == -1) { if (Head_y == 0) { Head_y = 28; } else if (Head_y == 29) { Head_y = 1; } } if (body[Head_x][Head_y] > 0) { cout << "游戏失败!\n"; Sleep(2000); exit(0); } else body[Head_x][Head_y] = 1; } }
这是一个贪吃蛇游戏的代码,这段代码实现了蛇的移动和游戏规则的判断。你有没有看懂这段代码呢?