cocos2dx 随机数

本文介绍了Cocos2d-x中如何生成随机数,包括初始化随机数种子、简单使用方法,如生成指定范围的float数,以及在Lua中的随机函数应用。还提及了高级的arc4random函数,它提供了更大的取值范围和更高的精度,且不需要手动设置种子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

①COCOS2D-X的随机数:

初始化随机数种子

cc_timeval psv; 
CCTime::gettimeofdayCocos2d( &psv, NULL );    // 计算时间种子 
unsigned int tsrans = psv.tv_sec * 1000 + psv.tv_usec / 1000;    // 初始化随机数  
srand( tsrans );
用宏产生随机数
int random = CCRANDOM_0_1(); // 产生0~1之间的随机数

*若不设定srand,则每次生成固定序列。

②简单使用方法:

生成 [1,5]  之间的float 数

int random = CCRANDOM_0_1 * 4 + 1 
生成10%概率

if(1==rand())
//10%的概率达成
else
//90%的概率没达成

筛选型随机数 如希望取0-99的随机数,但不能是6。

X = CCRANDOM_0_1 * 99;
while(X == 6){
X = CCRANDOM_0_1 * 99;
}

取0-99的随机数,但不要5的倍数

X = CCRANDOM_0_1 * 99;
while((X % 5) == 0){
X = CCRANDOM_0_1 * 99;
}

lua的随即函数、可在cocos2d_x + lua中直接使用

math.randomseed(os.time()) //相当于srand()的过程 i=math.random(1,6) //生成一个1到6之间的随机数

④高阶:arc4random(未验证)

藏在C语言标准库(Standard C Library)当中.文档对于它的描述是:

The arc4random() function uses the key stream generator employed by the arc4 cipher, 
which uses 8*8 8 bit S-Boxes. The S-Boxes can be in about (21700) states. 
The arc4random() function returns pseudo-random numbers in the range of 0 to (232)-1, 
and therefore has twice the range of rand(3) and random(3).

arc4random既使用了arc4加密算法避免seed重复,并且比random的取值范围(2**31)-1整整大了一倍。在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0×100000000 (4294967296),从而有更好的精度。此外,使用arc4random()还不需要生成随机种子,因为第一次调用的时候就会自动生成。

获取0到x-1之间的整数的代码如下:

int value = arc4random() % x;

获取1到x之间的整数的代码如下:

int value = arc4random() % x + 1;

生成0到100之间一个浮点数(精度是rand()的两倍):

#define ARC4RANDOM_MAX 0×100000000
double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);

⑤参照:

http://blog.youkuaiyun.com/zltianhen/article/details/8827099
http://bbs.9ria.com/thread-210441-1-1.html
http://blog.youkuaiyun.com/taobao755624068/article/details/8522892

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值