注:getrand()用 rand()%x替代
本来上午是要转载一篇看起来还不错的博客,被cocos2dx官方微博推荐过。谁知道早上打开链接时那篇博客已经转为私密了。早知道昨晚就应该复制一下内容,今天厚脸皮的来篇原创岂不妙哉。哈哈。
1、简单的随机数用法:CCRANDOM_0_1示例如下:@H_403_23@
- intHelloWorld::getRand(intstart,intend)
- {
- floati=CCRANDOM_0_1()*(end-start+1)+start;//产生一个从start到end间的随机数
- return(int)i;
- }
2、@H_403_23@上述的方法虽然简便,但是运行多次后,发现产生的随机数都一样的,这是为什么呢?这就涉及到“随机数种子”这东西了@H_403_23@。
在计算机中并没有一个真正的随机数发生器,但是可以做到使产生的数字重复率很低,这样看起来好象是真正的随机数,实现这一功能的程序叫伪随机数发生器。
有关如何产生随机数的理论有许多,如果要详细地讨论,需要厚厚的一本书的篇幅。不管用什么方法实现随机数发生器,都必须给它提供一个名为“种子”的初始值。而且这个值最好是随机的,或者至少这个值是伪随机的。“种子”的值通常是用快速计数寄存器或移位寄存器来生成的。
好了,看完上述介绍,多少对随机数种子有了一定的概念,接下来就讲下该如何在调用随机数时初始化随机数种子。代码如下:
- cc_timevalpsv;
- CCTime::gettimeofdayCocos2d(&psv,NULL);
- unsignedlongintrand_seed=psv.tv_sec*1000+psv.tv_usec/1000;
- srand(rand_seed);