0

我有一个简单的程序,到目前为止创建了 5 张公共卡(所有整数)。我已经设法设置了这些(它们是全局变量,这是故意的),但是每次我运行程序时,它们都会创建相同的数字。下面是代码。

int communityCards[5];
int playerCards[2];
int opponentCards[2];
int communityValues[5];
int playerValues[2];
int opponentValues[2];

int main(int argc, const char * argv[]) {
    for (int i = 0; i < 9; i++) {
        if (i < 5) {
            communityCards[i] = rand() % 52 - i;
            for (int a = 0; communityCards[a]!=0; a++) {
                communityCards[i]==communityCards[a]?communityCards[i]++: a = a;
            }
        }
        printf("%i ", communityCards[i]);
    }
}
4

3 回答 3

3

您想srand(time(NULL));在开头调用一次main

然而,顺便说一句,看起来你的其余逻辑可能是错误的。特别是,现在您似乎可以(例如)将五张 A 作为公共牌发牌(或者您的循环/条件是否打算解决这个问题?)

通常你会想要装满一副牌,用 洗牌std::random_shuffle,然后将牌从那里移到社区、玩家和对手的手上。

于 2013-06-04T23:05:06.477 回答
3

srand调用rand. 通常,srand(time(0))使用。

或者,C++11 提供了许多更好的具有细粒度规范的随机数生成器rand(基本上不保证它生成的数字的质量)。

于 2013-06-04T23:05:24.420 回答
2

在程序开头写srandfunc 它将当前时间作为种子

int main()
{
    srand(time(0));

    // STUFF
}
于 2013-06-04T23:05:40.393 回答