过去几周我一直在做迷宫游戏,并在3天前完成编码。我一直在测试游戏中的任何错误,一切看起来都不错,但是我遇到的一个主要问题是如果我想在游戏的一次运行中玩同一级别的游戏,那么游戏会崩溃。例如,我玩等级1和等级2,如果我在主菜单上再次选择其中任何一个,游戏就会变成空白屏幕并崩溃。 我已经来源的bug分为三个我的功能,如下:如何将X重置回阵列中的原始位置?
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,然而,在虚位置游戏会搜索我,这就是'@',因此如果我如果是第二级,那么关卡中不会再有'X'。函数int startingPointX返回0,它不会设置y,给y一个随机值。因此,行lvl1 [x] [y];在虚空位置会使游戏做随机事件,因为y有一个随机值,这可能超出范围,导致崩溃。
我已经尝试了很多方法来改变函数的工作方式,但每次它仍然会崩溃。帮助将不胜感激,谢谢
以下是完整的代码编译并运行: https://drive.google.com/open?id=0B2lLG0MNZMxdT3kteTBtR0puWlE 我使用了Windows的Visual Studio 2015年
你好,我尝试着使用你的第一个想法来硬编码'我'的开始位置,所以它变成了一个空白区域,但似乎并没有加载迷宫中的'@'字符,所以我无法移动迷宫中的任何东西到达最后。 –
我也尝试过使用memcpy,但是我的技能水平还不够高,无法将其应用到我的代码中,即使搜索了几个小时的如何实现它 –