设为首页 加入收藏

TOP

(Visual C++)游戏开发笔记十七 游戏基础算法(一) 游戏随机系统初步 (二)
2014-11-23 19:42:59 】 浏览:337
Tags:Visual 游戏 开发 笔记 十七 基础 算法 随机 系统 初步
:在开始产生随机数前,调用一次srand(time(NULL))(注意:srand()一定要放在循环外面或者是循环调用的外面,否则的话得到的是相同的随机数)。

下面我们给出第四个小例子


[cpp]
//MyRand04.cpp

#include
using namespace std;
#include
#include
int main( )
{
int i;
srand((unsigned)time(NULL)); //初始化随机数种子
for (i=0; i<10; i++) //产生10个随机数
{
cout< }
cout< return 0;
}
//MyRand04.cpp

#include
using namespace std;
#include
#include
int main( )
{
int i;
srand((unsigned)time(NULL)); //初始化随机数种子
for (i=0; i<10; i++) //产生10个随机数
{
cout< }
cout< return 0;
}


每次运行得到不同的随机序列:


1294 18562 14141 18165 11910 29784 11070 13225 131 24405

1774 25714 18734 16528 20825 17189 9848 8899 2503 5375


五、几种随机数的简单算法

1.产生一个范围内的随机数

一般地,我们可用j=1+(int)(n*rand()/(RAND_MAX+1.0))来生成一个0到n之间的随机数。

若用int x = rand() % 101;来生成 0 到 100 之间的随机数这种方法是不可取的,比较好的做法是:

j=(int)(100.0*rand()/(RAND_MAX+1.0))

当然,如果是在gcc,vc之外的编译器,我们也可以使用random(100)。下面的例子都是用了random(n)(VC无法识别random这个函数,VC下我们还是采用 j=(int)(100.0*rand()/(RAND_MAX+1.0)).

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

解决方法: www.2cto.com

x = random(100);

while (x==6) {

x = random(100);

}

又如希望取0-99的随机数,但不要5的倍数 解决方法:

x = random(100);

while ((x % 5)==0) {

x = random(100);

}

3、从连续的一段范围内取随机数。

如从40--50的范围内取随机数。 解决方法: x=random(11)+40

4、从一组乱数中取随机数。 如:从 67, 87, 34, 78, 12, 5, 9, 108, 999, 378十个数中随机取数。 解决方法:可以用数组将些十个数存贮,然后把0--9中取出的随机数作为序号,实现随机取数。

a = new Array(67, 87, 34, 78, 12, 5, 9, 108, 999, 378);

j = random(10);

x = a[j];


六、产生一定范围随机数的通用算法公式

▲要取得[a,b)的随机整数,使用(rand() % (b-a))+ a (结果值含a不含b)。

▲要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a (结果值含a和b)。

▲要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1 (结果值不含a含b)。

▲即(通用公式:a + rand() % n;取得[a,a+n) 的随机整数,其中的a是起始值,n是整数的范围。)

▲要取得[a,b) 的随机整数,另一种表示:a + (int)(b-a) * rand() / (RAND_MAX + 1)。

▲要取得[a,b] 的随机整数 另一种表示:a + (int)(b-a) * rand() / (RAND_MAX )。

▲要取得[0,1] 之间的浮点数 ,可以使用rand() / double(RAND_MAX)。


了解了随机数产生的基础知识和一些产生随机数的算法,相信大家心里应该有底了,比如如何设置各阶段装备强化的成功率,副本里装备的掉落率,通关奖励翻牌的掉落率,攻击暴击的概率,攻击MISS的几率,梦幻西游里碰到变异宝宝的概率等等。

最后,我们提出两个要点,就算这篇文章你看过后不能留下深刻印象,只要记住以下两个要点,就算是我的这篇文章没白写,

因为它让你有收获了:

1.计算机的伪随机数是由随机种子根据一定的计算方法计算出来的数值。所以,只要计算方法一定,随机种子一定,那么产生的随机数就是固定的。

2.只要用户或第三方不设置随机种子,那么在默认情况下随机种子值为1,来自系统时钟。

作者:zhmxy555

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇richedit研究02 ? 大纲 下一篇VC读配置文件

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目