我正在尝试制作一款简单的战舰游戏。我坚持尝试将船只随机放置在我的板上。我有一种感觉,因为我应该使用 vector 而不是数组。但我不确定如何创建二维 vector 。
这是我目前所拥有的:
using namespace std;
void clearBoard(const int row, const int col)
{
int grid[row][col];
for (int i = 0; i < row; i++) {
for (int j = 0; j < col;j++) {
grid[i][j] = 0;
cout << grid[i][j] << " ";
}
cout << endl;
}
}
void setShips(int max_ships1, int row, int col)
{
int ship_counter = 0;
while(ship_counter < max_ships1) {
int x = rand() % row;
int y = rand() % col;
int matrix[x][y]
if (matrix[x][y] != 1) {
ship_counter++;
matrix[x][y] = 1;
cout << matrix[x][y] << " ";
}
cout << endl;
}
}
int main(int argc, char* argv[])
{
int _row = atoi(argv[0]);
int _col = atoi(argv[2]);
int max_ships;
if (_row > _col) {
max_ships = _row;
}
else if (_col > _row) {
max_ships = _col;
}
else {
max_ships = _row;
}
cout << "enter the size of the board:";
cin >> _row >> _col;
clearBoard(_row, _col);
setShips(_row,_col,max_ships);
return 0;
}
如果用户决定使用 3x3 板,则第一个函数返回:
0 0 0
0 0 0
0 0 0
我希望随机生成 1 来代表战列舰的位置。 这是 3x3 板上的示例:
1 0 0
0 1 0
1 0 0
谢谢。
最佳答案
你的主要问题是grid
当 clearBoard
时超出范围(并被有效删除)返回,和matrix
(与 grid
完全无关的数组)每次通过您的 while
都会超出范围环形。这意味着您正在填写 grid
用零,然后用随机数据创建一堆其他数组,有时将一个元素设置为 1。您需要制作 grid
全局,或从 clearBoard
返回并将其传递给 setShips
作为论点。
传递多维原始数组有点复杂,因此如果您不想使数组成为全局数组,使用 vector 可能会让这对您来说更容易一些。要创建一个二维 vector ,您可能会认为 std::vector<std::vector<int>>
会工作,但这不太正确。您可以那样做,如评论中所述,但从技术上讲,std::vector<std::vector<int>>
就是所谓的锯齿状数组,这意味着您可以让每一行具有不同的长度 - 与您知道每一行必须始终具有相同长度的原始二维数组不同。
用 vector
制作二维数组的正确方法这是:
std::vector<int> grid(row * col);
grid[i * row + j] = 1; // Or i * col + j will also work.
如您所见,通过元素的 (x,y) 坐标得出元素有点复杂。使用两种计算方法中的哪一种并不重要,但在一个版本中 i
是x
和 j
是y
,而在另一个情况下,情况正好相反( i
是 y
等)。
关于c++ - 用随机值填充我的数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363069/