我有一个简单的程序,到目前为止创建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]);
}
}
答案 0 :(得分:3)
您想在srand(time(NULL));
开始时拨打main
。
但是,除此之外,您的逻辑的其余部分似乎可能错误。特别是,它现在看起来像你可以(例如)作为社区卡交易五个ace(或者是你的循环/条件用于修复它?)
通常你想填充牌组,用std::random_shuffle
随机移动,然后将牌从那里移到社区,玩家和对手的手中。
答案 1 :(得分:3)
在调用rand
之前,只需使用srand
一次正确的种子。通常,使用srand(time(0))
。
或者,C ++ 11提供了许多具有细粒度规范的更好random number generators(rand
基本上不保证它产生的数字的质量。)
答案 2 :(得分:2)
在程序开头写srand
func
它将当前时间作为种子
int main()
{
srand(time(0));
// STUFF
}