about srand and rand

二大人 发布于 2015/05/19 15:44
阅读 135
收藏 0
我做了个贪吃蛇程序,里边有food 和snake。
每次snake吃掉food之后,就需要重新生成一个。我是用srand和rand来生成的,
生成之后判断一下有没有跟snake重合,如果重合,则重新生成一个。
现在问题来了,有的时候这个过程会非常慢,我觉得是rand的时候有一定几率某几次总是生成在某个数附近,造成一直跟snake重合。
我想问,是我用rand和srand用的不对吗,还是有更好的方法?
求大神指教
加载中
0
二大人
二大人

我知道我错哪儿了!!

我每次生food的时候都重新设置了一次随机数的种子值,像这样:srand((unsigned)time(NULL));

然后就导致如果有一次恰好生成的跟snake重合的话,那么这一秒内生成的都是重合的,于是他就停顿了一下。

我还以为他吃饱了呢。。。。

0
cocoi
cocoi

这个是你没有考虑snake的位置引起,随机起来刚好都是在snake身上,以下是几种思路,作为抛砖引玉:


  1. 随机种子可以再加入其它的因素进去,比如时间或者其它的


  1. 可以考虑在snake的位置加上一个数,具体可以选择snake的头部或尾部的坐标,然后随机一个方向(上下左右),在随机两个数(横坐标偏移和纵坐标偏移),然后进行相加减,注意这个时候你加减完了之后的数必须在坐标范围之内,如果超出,按照最接近的合法坐标算,否则再进行如上操作。


  1. 把坐标存到二维数组内,默认值为0,然后把snake的坐标的数组的值置为1,生成food时,随机一维和二维的下标,如果值为1,那么二维加1,再取值,一直for循环。
0
k
kchr

"我觉得" 个毛。

加个计数器,(rand 到蛇身的次数)/总的 rand 次数),最后 printf 出来看看。

返回顶部
顶部