2016-04-24 209 views
0

我正在爲學校創建一個掃雷遊戲項目。填充二維矢量C++

#include <iostream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 
int mines; 
int rows; 
int columns; 
vector<vector<int> > mineField; 

int main() { 

    cout << "Input number of rows: "; 
    cin >> rows; 
    cout << "Input number of columns: "; 
    cin >> columns; 
    cout << "Input number of mines: "; 
    cin >> mines; 

    int mine = 0; 
    int num_of_mines = 0; 

    vector<int> temp; 

    while(num_of_mines < mines){ 

     mine = rand()%(rows * mines); 

     if(mineField[mine][mine] != 1){ 

      temp.push_back(1); 
      mineField.push_back(temp); 
      num_of_mines++; 

     } 
    } 

return 0; 
} 

我在這裏要做的是使用二維矢量填充雷區,然後嘗試輸出它,看看地雷是否隨機分配。 (1 < =>地雷);但是這不斷給我一個錯誤。 非常感謝您的幫助!

+0

你的錯誤是什麼?此外'礦山'從不初始化。 – ShadowMitia

+0

你需要一些循環來填充行。 –

回答

0

正如其他人所指出的,你的問題是,你不正確地分配你的mineField矩陣。最簡單的就是添加

for (int i = 0; i < rows; ++i) { 
    mineField.push_back(vector<int>(columns, 0)); // init everything to zeroes 
} 

現在你可以用地雷填充礦場了。關於產生地雷的一些指示:目前你只能隨機化一個座標,但你應該隨機化兩個座標。另外,我不完全確定你爲什麼需要乘以mines。我會這樣做:

while (num_of_mines < mines) { 
    minex = rand() % columns; 
    miney = rand() % rows; 
    if (mineField[minex][miney] != 1) 
     ... 
+0

當我初始化矢量中的所有內容到零時,它就起作用了;但是當我輸入大於行的列的值(例如:16x30:99地雷)時,運行將失敗。 –

+0

@WilmerSuarez什麼是錯誤信息? – pingul

+0

沒有消息,它只是說RUN RUN FAILED(退出值1 ... –

0

你的if語句看起來並不因爲我的計算方式存在後(你的矩陣的大小後看一條線,一列的大小後沒有)

(你不正確初始化雷區,不使用的列)