为了使游戏增加丰富度,不断给玩家新鲜感,很多时候我们都需要用到随机值。下面介绍三种高级的随机值技术,在某些场景下,他们比rand()表现更好。
一、高斯随机值
在日常生活中,我们的身高,体重和智商、运动员奔跑的速度,市区的房价,都满足正态分布(高斯分布)。在游戏中同样如此,比方说我们需要模拟一名射击手打靶:
作为一名专业的射击,显然右侧的更接近真实状况。要不然怎么参加比赛啊。
那么我们用函数怎么取到高斯随机值呢。
根据中央极限定理,对[-1,1]范围内均匀随机求和,那么我们的取值结果会逼近0,标准差为√k/3的正态分布。K为参与求和的随机值数量。比如我们每次取三个数求和,那么标准差是1,就是一个标准的正态分布。
下面的函数取[-3,3]之间随机3个数相加,通过伪随机数生成器使用异或位移操作产生均匀随机数。
66.7%的位于在一个标准差范围内,95.8%的位于在两个标准差范围内,100%的值位于三个标准差范围内。
unsigned long seed = 61829450;