所以我一直在嘗試在Xcode中編寫遊戲,其中在終端中使用char類型的多維數組繪製遊戲板。遊戲應該就像是一個地下城,有一扇門,你可以踩下,當你在一個新的房間裏生成。但有時我得到這真討厭的「(11db)」錯誤的事情,其中我的一行被突出顯示「線程1:EXC_BAD_ACCESS(code = EXC_I386_GPFLT)」,開始真的讓我煩惱。這不是我第一次在X代碼中發生(11db)錯誤,而且之前我已經能夠修復它,但是現在我似乎還沒有。也有人真的知道這意味着什麼嗎?我試着做一些Google搜索嘗試找出來,但到目前爲止我還沒有成功。但是,我發現最令人討厭的部分是,它不會每次都發生。有時會在房間創建完成後立即開始運行程序,有時會在您穿過門後發生,甚至在沒有它的情況下甚至無法運行。下面的代碼在那裏發生的事情:XCode 11db error thing
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
//Check to see if door location is the same an an enemy or the player
for (int i = 0; i < enemies.size(); i++){
while ((door_x == enemies.at(i).getX() && door_y == enemies.at(i).getY()) || (door_x == player->getX() && door_y == player->getY())){
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 0);
}
}
room[door_y][door_x] = DOOR;//Place door on map
此錯誤是在上面的代碼中的最後一行發生。有人能告訴我什麼是錯的,爲什麼。雖然我並不陌生於C++,但我在初級階段編程,所以如果這只是一個愚蠢的真正明顯的錯誤,那麼我很抱歉。
編輯: 我被要求包括代碼的其餘部分,所以這裏是創建一個新房間和我的隨機數函數的全部功能。
int randomNumber(int max, int min){
int randomNumber = rand() %(max - min) + min;
return randomNumber;
}
void create_new_room(){
//Get random room height and room width
height = randomNumber(settings[0], settings[1]);
width = randomNumber(settings[2], settings[3]);
room = new char*[height];
for (int iter = 0; iter != height; iter++) {
room[iter] = new char[width];
}
for (int i = 0; i < height; i++){
for (int j = 0; j < width; j++){
room[i][j] = EMPTY;
}
}
enemies.clear();//Delete every object from the vector
//Create the enemies
int numEnemies = randomNumber(settings[4], settings[5]);
for (int i = 0; i < numEnemies; i++){
int randomHeight = randomNumber(height, 0);
int randomWidth = randomNumber(width, 0);
Enemy *e;//Create pointer to class to allow vector class push back
e = new Enemy(randomWidth, randomHeight, HEALTH);
enemies.push_back(*e);
delete e;//Delete pointer e to free memory and avoid any memory leak.
room[enemies.at(i).getY()][enemies.at(i).getX()] = ENEMY;//Place enemy on board
}
//Create Player
int player_y = randomNumber(height, 0);
int player_x = randomNumber(width, 0);
for (int i = 0; i < enemies.size(); i++){
while (player_x == enemies.at(i).getX()){
player_y = randomNumber(height, 0);
player_x = randomNumber(width, 0);
}
}
player = new Player(player_x, player_y, ATTACK);
//Place player on board
room[player->getY()][player->getX()] = PLAYER;
//Create a door
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
//Check to see if door location is the same an an enemy or the player
for (int i = 0; i < enemies.size(); i++){
while ((door_x == enemies.at(i).getX() && door_y == enemies.at(i).getY()) || (door_x == player->getX() && door_y == player->getY())){
door_x = randomNumber(height - 1, 1);
door_y = randomNumber(width - 1, 1);
}
}
room[door_y][door_x] = DOOR;//Place door on map
}
設置[]是設定我具有從與用於最大用戶設置的文本文件中讀取的值和MIN隨機值的陣列。 0 =最大高度1 =最小高度2 =最大寬度3 =最小寬度4 =最大敵人5 =最小敵人
另外我在主要功能頂部使用srand(time(0))
。
我的代碼有點混亂,但在這裏。
它是'lldb',而不是'11db'。 – emlai