過去幾周我一直在做迷宮遊戲,並在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,但是我的技能水平還不夠高,無法將其應用到我的代碼中,即使搜索了幾個小時的如何實現它 –