【问题标题】:Place a letter randomly into an array in C++在 C++ 中将一个字母随机放入一个数组中
【发布时间】:2019-02-21 15:46:49
【问题描述】:

我正在用 C++ 创建一个战舰游戏,但我无法弄清楚如何在我的板上随机水平放置 1x3 船。我拿了一个 10x10 的板子,里面装满了“O”(代表“海洋”),我试图弄清楚如何随机放置一个 1x1 的“S”(代表船)。

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    const int rows=10;
    const int cols=10;
    srand(time(NULL));

    char board[100];

    ifstream fin;
    fin.open("board.txt");
    for (int i=0; i<rows*cols; i++) fin >> board[i];
    fin.close();

    for (int r=0;r<rows;r++) {
        for (int c=0;c<cols;c++) {
            cout << board[r*rows+c] << " ";
       }
       cout << endl;
     }
}

我的“board.txt”是保存 10x10 板的文件。我正在专门寻找如何在板上随机放置 1 个字母“S”,这样我就可以自己弄清楚如何将“S S S”水平放置到数组中的某个位置。

请记住,我正在学习 C++ 的大学课程,所以我在这方面还很陌生,所以没有仇恨。

【问题讨论】:

    标签: c++ srand


    【解决方案1】:

    由于您的矩阵是 10 x 10,因此要将 S 放置在某处,您只需生成一个介于 0 和 99 之间的随机数并将其用作索引。

    您可以使用uniform_int_distribution 和例如一个 LCG1minstd_rand

    #include <iostream>
    #include <fstream>
    #include <random>
    using namespace std;
    
    int main() {
        const int rows = 10;
        const int cols = 10;
        uniform_int_distribution<int> dist(0, rows * cols - 1);
        random_device rnd_seed;
        minstd_rand rnd_gen { rnd_seed() };
    
        char board[100]{};
    
        ifstream fin;
        fin.open("board.txt");
        for (int i = 0; i < rows*cols; i++) fin >> board[i];
        fin.close();
    
        board[dist(rnd_gen)] = 'S'; // place S at a random location
    
        for (int r = 0; r < rows; r++) {
            for (int c = 0; c < cols; c++) {
                cout << board[r*rows + c] << " ";
            }
            cout << endl;
        }
    }
    

    1LCG 非常快,但可以预测。对于一款游戏,您可能想要查看 PRNG 之类的 mt19937(速度较慢但更难预测),或真正的 RNG,random_device(最慢)。

    另请参阅this explanation,了解为什么 srand/rand() 被认为是有害的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-22
      • 2017-10-25
      • 1970-01-01
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多