2016-04-24 4 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 FAILED (значение выхода 1 ... –

0

Ваш если заявление выглядит после того, как что-то, что не существует из-за того, как вычислен мина (вы смотрите после того, как размер матрицы не после того, как размер строки и столбца)

(вы не правильно инициализировать минное поле и не использовать столбцы)

Смежные вопросы