不是真正的随机

Not truly Random

本文关键字:随机      更新时间:2023-10-16

出于某种原因,我将在下面发布的代码并非完全随机。。。我使用了srand(),试图使其随机。。我不知道为什么它表现得很奇怪。。。

#include<vector>
#include "../Header Files/SinglePlayer.h"
SinglePlayer::SinglePlayer()
{
}
int myRand(int low, int high) 
{
   srand(time(NULL));
   return rand() % (high - low + 1) + low;
}
void SinglePlayer::startGame()
{
    cout << "Starting Single Player........." << endl;
    cout << "Starting out with two cards...." << endl;
    int randomCardStarterOnePlayer = myRand(0,10);
    int randomCardStarterTwoPlayer = myRand(0,10);
    int randomCardStarterOneAI = myRand(0,10);
    int randomCardStarterTwoAI = myRand(0,10);
    this -> calculateRandomStarter(randomCardStarterOnePlayer,
                                   randomCardStarterTwoPlayer,
                                   randomCardStarterOneAI,
                                   randomCardStarterTwoAI);
    cout << "You Start out with " << amountPlayer << endl;
    cout << "Computer Starts out with " << amountAI << endl;
}
void SinglePlayer::calculateRandomStarter(int randomOnePlayer, int randomTwoPlayer, int randomOneAI, int randomTwoAI)
{
    amountPlayer = amountPlayer + randomOnePlayer + randomTwoPlayer;
    playerCards.push_back(randomOnePlayer);
    playerCards.push_back(randomTwoPlayer);
    amountAI = amountAI + randomOneAI + randomTwoAI;
    AICards.push_back(randomOneAI);
    AICards.push_back(randomTwoAI);
}
SinglePlayer::~SinglePlayer()
{
}

结果:

~~~~~~二十一点

你想玩单人游戏还是多人游戏?(输入0表示单个玩家,1个用于多人游戏)

0

开始单人游戏。。。。。。。。。

从两张牌开始。。。。

你从2 开始

计算机启动时有2个

你可以看到播放器和电脑以相同的数字开始。。这种情况总是出于某种原因。。。我似乎看不出这个问题,请帮忙。

time(NULL)以秒为单位返回时间,因为每次生成新数字时都会设置新的种子,所以(在大多数情况下)每次都可能设置与种子相同的数字。移动:

srand(NULL)

从main开始,或者在某个地方只调用一次。

听起来代码中的time(NULL)返回了一些常量,并没有像您预期的那样调用std::time(NULL)。如果是这样的话,您将从rand()中正确生成一个随机数。

试着打印time(NULL)的输出,并检查您是否真的得到了自epoch以来经过的秒数。如果没有,请确保包含<ctime>并调用完全合格的srand(std::time(NULL))