vir*_*raj 0 c++ random numbers class blackjack
我正在创建一个BlackJack计划.我想要随机发卡.如果我使用rand()函数并将srand()初始化为time(NULL),那么所有的卡都是相同的.知道问题可能是什么?
//Cards.h
#include <iostream>
#include <time.h>
#include <cstdlib>
using namespace std;
class Cards
{
private:
int val_seed,suit_seed;
public:
int val[10];
string card[10];
int dealcard(int x)
{
srand();
val_seed=rand()%13 + 2;
suit_seed=rand()%4 + 1;
if(val_seed>=1 && val_seed<=10)
{
if(val_seed==10)
{
card[x]="10";
}
else
{
card[x]=val_seed+48;
}
}
else if(val_seed>10)
{
switch(val_seed)
{
case 11: card[x]="J"; val_seed=10; break;
case 12: card[x]="Q"; val_seed=10; break;
case 13: card[x]="K"; val_seed=10; break;
case 14: card[x]="A"; val_seed=11; break;
}
}
switch(suit_seed)
{
case 1: card[x]+='\3'; break;
case 2: card[x]+='\4'; break;
case 3: card[x]+='\5'; break;
case 4: card[x]+='\6'; break;
}
val[x]=val_seed;
}
};
//main.cpp
#include <cstdlib>
#include <iostream>
#include "Cards.h"
using namespace std;
int main(int argc, char *argv[])
{
Cards k;
for(int a=1; a<=9; a++)
{
k.dealcard(a);
}
for(int e=1; e<=9; e++)
{
cout<<k.card[e]<<"("<<k.val[e]<<")"<<" ";
}
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)
And*_*rei 11
种子数生成器ONCE.如果在循环中运行函数,它们的执行速度将超过时间分辨率区间(因此所有种子都是相同的,因此数字也是如此).
在开发应用程序并对其进行调试时,如果您使用相同的已知值为种子生成种子,它将会有所帮助.这意味着连续的调试会话将使用来自生成器的相同值.不要忘记在发布版本中切换回基于time()的种子(或者使用预处理器来检测它是否是Debug或Release版本并为您完成).
| 归档时间: |
|
| 查看次数: |
2605 次 |
| 最近记录: |