为猜谜游戏生成一个随机数生成器

Generating a random number generator for a guessing game

本文关键字:一个 随机数生成器 游戏      更新时间:2023-10-16

这个程序是一个高低猜谜游戏,其中生成一个随机数,用户有6次尝试猜测该数字。我只复制了我的主函数和DrawNum和GetGuess函数的定义,如果问/需要,将发布更多。我的目标是让DrawNum函数返回随机数,并在GetGuess函数中调用DrawNum函数(如果这是最有效的方法)。该函数构建良好,但当我运行程序时,我得到运行时检查失败#3 -变量'MaxNum'正在使用而未初始化。

int main ()
{
    int money;
    int bet;
    int guesses;
    unsigned int seed = 0;
    srand(static_cast<unsigned>(time(NULL)));   //get a value for the time from the     computer's clock and with
    srand (seed);                               //it calls     srand to initialize "seed" for the rand() function
    PrintHeading ();                            //Prints output heading
    GetBet (money, bet);
    GetGuess ();
    CalcNewMoney (money, bet, guesses);
    bool PlayAgain ();
}
int DrawNum (int max)
{
    double x = RAND_MAX + 1.0;      /* x and y are both auxiliary */
    int y;                          /* variables used to    do the */
                                    /* calculation */
    y = static_cast<int> (1 + rand() * (max / x));
    return (y);                     /* y contains the result */
}
int GetGuess ()
{
    int guess;          //user's guess
    int guesses;    //number of Guesses
    int MaxNum;
    int RandNum;
    RandNum = DrawNum (MaxNum);
    for (int guesses = 1; guesses <= 6; guesses++)
    {
        cout << "Guess " << guesses <<  ":" << endl;
        cin >> guess;
        if (guess > RandNum)
        {
            cout << "Too high... " <<endl;
        }
        else if (guess == RandNum)
        {
            cout << "Correct!" << endl;
        }
        else
        {
            cout << "Too low... " << endl; 
        }
    }
    return (guesses);
}

从问题的标题中我知道你主要关心的是数字的随机生成。
如果我说对了,这是我的建议(否则你应该通过提供你所需要的额外信息来重新表述你的问题):
你的随机生成器不正确,rand()生成的随机数不是均匀分布的,这是众所周知的事实,使用% -会导致顺序中的第一个数字很幸运地被选中。

所以我建议你使用random_engine generator或random_device

std::default_random_engine generator(time(0));
 std::uniform_real_distribution<double> distribution(first, last);
 return distribution(generator);

缺点:如果打开乘法程序使用相同的随机数生成器,它们将输出相同的结果,因为它们具有相同的种子值,即时间。使用随机装置可以解决此问题,请参阅后面的说明:

std::uniform_real_distribution<double> distribution(first, last);
 std::random_device rd;
 std::default_random_engine generator( rd() );
 return distribution(generator);