我正在为学校制作一个创造扫雷游戏的项目。
#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 :(得分:0)
你的if语句会因为我的计算方式来管理不存在的东西(你不需要在行和列的大小之后查看矩阵的大小)
(你没有正确地启动雷区而不使用列)
答案 1 :(得分: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)
...