c++ - 用随机值填充我的数组 C++

标签 c++ arrays vector

我正在尝试制作一款简单的战舰游戏。我坚持尝试将船只随机放置在我的板上。我有一种感觉,因为我应该使用 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

谢谢。

最佳答案

你的主要问题是gridclearBoard 时超出范围(并被有效删除)返回,和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) 坐标得出元素有点复杂。使用两种计算方法中的哪一种并不重要,但在一个版本中 ixjy ,而在另一个情况下,情况正好相反( iy 等)。

关于c++ - 用随机值填充我的数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31363069/

相关文章:

C++ R - 需要树实现

c++ - 将静态访问者与静态多态性层次结构耦合

c++ - 使用 GDB 在 main() 之前调试错误

r - 聚类向量在 R 中得到一个零一矩阵

c++ - 将整数转换为数组

javascript - 使用 push() 将对象添加到对象中

c - C 中的数组和枚举有什么区别?

c - 读取由 12 个数字组成的数组,每个数字之间有空格 - C 编程

c++ - 按索引删除一堆元素?

c++ - 按字符串C++对存储在 vector 中的对象进行排序