我试图制作一款简单的战舰游戏。我一直试图随机将船放在我的板上。我有一种感觉,因为我应该使用矢量而不是数组。但我不确定如何创建一个二维矢量。
这是我到目前为止所拥有的:
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
感谢。
答案 0 :(得分:1)
您的主要问题是$(window).trigger('resize');
在grid
返回时超出范围(并且被有效删除),而clearBoard
(与matrix
完全无关的数组)会消失每次通过grid
循环超出范围。这意味着你用零填充while
,然后用随机数据创建一堆其他数组,有时将一个元素设置为1.你需要使grid
全局,或者返回它来自grid
并将其作为参数传递给clearBoard
。
传递多维原始数组有点复杂,因此如果您不想使数组全局化,使用向量可能会使您更容易。要创建二维向量,您可能会认为setShips
会起作用,但这不太对。您可以这样做,如评论中所述,但从技术上讲,std::vector<std::vector<int>>
是所谓的锯齿状数组,这意味着您可以每行的长度不同 - 与原始2D数组不同,您知道每行必须始终具有相同的长度。
使用std::vector<std::vector<int>>
制作二维数组的正确方法是:
vector
正如您所看到的,通过其(x,y)坐标获取元素有点复杂。您使用的两种计算方法中的哪一种并不重要,但在一个版本std::vector<int> grid(row * col);
grid[i * row + j] = 1; // Or i * col + j will also work.
中i
和x
是j
,而在另一个版本中,反之亦然(y
为i
等)。
答案 1 :(得分:0)
您还可以设置这样的2D矢量:
#include<vector>
#include<iostream>
using namespace std;
int main()
{
std::vector< std::vector<int> > grid2D;
//m * n is the size of the grid
int m = 10;
int n = 10;
//Grow rows by m
grid2D.resize(m);
//Grow Columns by n
for(int i = 0 ; i < m ; ++i) grid2D[i].resize(n);
// print out 2D grid on screen
for(i = 0 ; i < m ; ++i){
for(int j = 0 ; j < n ; ++j){
grid2D[i][j]=0;
cout<<""<<grid2D[i][j]<<" ";
}
cout<<"\n";
}
cout<<"\n";
return 0;
}