我使用srand(SEED)对随机数生成器进行一次播种,其中SEED只是按下按钮多长时间生成的16位数。我的随机数生成器工作正常,但我需要能够提前查看序列中的下四个数字,如果有意义的话,不会破坏任何内容。
所以,我按顺序得到序列中的下一个数字:
num = rand() % 4;
这给了我一个0到3之间的随机数,这很好。让我们说前6个数字是0 3 2 1 2 3,我刚刚生成了该序列中的前3个数字。接下来的四个数字是2,1,2,3。我希望能够获得这些数字并显示它们,但是再次调用rand()会破坏原始序列(顺便说一下,这是SIMON游戏。一种作弊模式可以查看下一步要按的内容)。
调用srand(SEED)会将我带回第一个号码,因此我可以很容易地看到序列中的前四个数字而不会中断任何内容,但如果我想查看数字x - &gt ; x + 4,然后就会搞砸了。
答案 0 :(得分:1)
使用类似的东西:
int nextfourrand[4];
int
myrand (void);
{
int i;
int r = nextfourrand[0];
for (i = 0; i<=2; i++)
nextfourrand[i] = nextfourrand[i+1];
nextfourrand[3] = rand();
return r;
}
并使用此而不是rand()
。然后在init上,在srand()
之后执行:
int i;
for (i = 0; i<=3; i++)
nextfourrand[i] = rand();
接下来的四个随机数位于nextfourrand
数组中。
答案 1 :(得分:0)
我想我可以调用srand(SEED),然后调用rand()适当的次数以回到原来的位置。它有点混乱和低效,但绝对有效。考虑到这是一款SIMON游戏,大多数情况下我必须连续调用rand()才能回到玩家所在的位置,不管怎么说都是30左右。