【发布时间】:2017-04-14 20:16:27
【问题描述】:
过去几周我一直在制作迷宫游戏,并在 3 天前完成了编码。我一直在测试游戏的任何错误,一切似乎都很好,但是我遇到的一个主要问题是,如果我想在一次游戏中玩相同的关卡,游戏就会崩溃。例如,我玩关卡 1 和 2,如果我在主菜单上再次选择其中任何一个,游戏就会出现空白屏幕并崩溃。 我已将错误归入我的三个函数,它们如下:
void position(int lvl) {
int x, y;
if (lvl == 1) {
x = startingPointX(lvl, y);
lvl1[x][y] = me;
}
if (lvl == 2) {
x = startingPointX(lvl, y);
lvl2[x][y] = me;
}
if (lvl == 3) {
x = startingPointX(lvl, y);
lvl3[x][y] = me;
}
if (lvl == 4) {
x = startingPointX(lvl, y);
lvl4[x][y] = me;
}
if (lvl == 5) {
x = startingPointX(lvl, y);
lvl5[x][y] = me;
}
if (lvl == 6) {
x = startingPointX(lvl, y);
lvl6[x][y] = me;
}
}
这是第二个功能:
int positionFinder(int lvl, int &y) {
int xCoord;
if (lvl == 1) {
/*This is for level 1*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl1[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 2) {
/*This is for level 2*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl2[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 3) {
/*This is for level 3*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl3[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 4) {
/*This is for the solution of level 1*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl4[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 5) {
/*This is for the solution of level 2*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl5[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 6) {
/*This is for the solution of level 3*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl6[i][j] == '@') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
return 0;
}
第三个函数是这样的:
int startingPointX(int lvl, int &y) {
int xCoord;
if (lvl == 1) {
/*This is for level 1*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl1[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 2) {
/*This is for level 2*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl2[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 3) {
/*This is for level 3*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl3[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 4) {
/*This is for the solution of level 1*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl4[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 5) {
/*This is for the solution of level 2*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl5[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
if (lvl == 6) {
/*This is for the solution of level 3*/
for (int i = 0; i != 20; ++i) {
for (int j = 0; j != 20; ++j) {
if (lvl6[i][j] == 'X') {
xCoord = i;
y = j;
return xCoord;
}
}
}
}
return 0;
}
崩溃的原因是当关卡运行时它会在 int startingPointX 中搜索 X,但是在 void 位置游戏会搜索我,即 '@',因此如果我开始第二关,就会出现在关卡中不再有“X”。函数 int startingPointX 返回 0,它不会设置 y,给 y 一个随机值。因此,行 lvl1[x][y];在 void 位置会使游戏做随机的事情,因为 y 有一个随机值,很可能超出范围,导致崩溃。
我尝试了很多方法来更改功能的工作方式,但每次它仍然最终崩溃。帮助将不胜感激,谢谢
下面是编译和运行的完整代码: https://drive.google.com/open?id=0B2lLG0MNZMxdT3kteTBtR0puWlE 我使用的是 Windows Visual Studio 2015
【问题讨论】:
标签: c++ visual-c++ crash maze