游戏人工智能开发之进阶版随机技术

又get3种新的rand方式,简单又实用

分别为高斯分布随机,过滤随机,和perlin随机,perlin老朋友了,主要说说前两种。

高斯分布随机(Gaussian Randomness)

高斯分布也叫正态分布(Normal distribution)或钟形曲线(bell curves),正态分布再熟悉不过了。它长这个样子:

为什么要根据高斯分布来产生随机呢,这里要提到一个名词“中心极限定理(central limit theorem)”。中心极限定理:在自然界与生产中,一些现象受到许多相互独立的随机因素的影响,如果每个因素所产生的影响都很微小时,总的影响可以看作是服从正态分布的。中心极限定理就是从数学上证明了这一现象 。简单来讲就是:在现实生活中的随机性概率加起来是符合正态分布的。这就是我们为什么使用高斯分布随机的原因,就是为了时产生的结果更真实。

基于高斯分布的这种随机可以用于:速度,人的特性,随即一片森林的树木高低,人的身高,发射子弹的偏差,等等自然界常见的事情。

Unity中的实现代码:

using UnityEngine;
using System.Collections;

public class Gaussian : MonoBehaviour
{
    public int seed = 61829450;
    double sum = 0;
    long r = 0;
    // Use this for initialization
    void Start()
    {

    }

    // Update is called once per frame
    void Update()
    {
        if (Time.frameCount % 7== 0)
        {
     //       seed = 61829450;
            sum = 0;
        for (int i = 0; i < 3; i++)
        {
            long holdseed = seed;
            seed ^= seed << 13;
            seed ^= seed >> 17;
            seed ^= seed << 5;
            r = holdseed + seed;
            sum += (double)r * (1.0 / 0x7FFFFFFFFFFFFFFF);
        }
        print( sum); //returns [-3.0, 3.0] at (66.7%, 95.8%, 100%)
        }
    }
}

下图示普通伪随机和高斯随机分别模拟射子弹的偏差

高斯分布大部分的点都在中心,普通的伪随机分布的比较均匀,明显高斯分布更加真实。玩家当然也希望能射准,爆头率更高。

高斯分布的用途:

1.    速度

2.    加速度

3.    尺寸,宽度,高度,质量

4.    模拟视觉,反应时间

5.    子弹填充速度,开火速度

6.    刷新率,冷却率

过滤随机

过滤随机更讲求“公平”,也就是随的越乱就好。过滤是指,我们随机的数有时候太接近,或者差距太多的时候把这些数“过滤”掉,重新随机。

有证据证明,当随机的表现非常小的时候,人类并没有感觉这是随机的。

举个例子,很多人不相信掷硬币的结果是随机的,因为你掷出的结果可能是这样的:

有大量的重复00000或11111紧挨在一起。如果你把暴击设为随机产生,随机结果如上图,敌人可能连续发动四五个暴击直接把你连死,这不是玩家想要的结果。但这确实是随机产生的啊,所以有的时候玩家的乐趣比真实性更重要。

二进制过滤

挡在下面几种情况的时候发生过滤:

1.    如果新产生的数已经有四个了,重新随机一个新数

2.    如11001100,会被替换为11001101

3.    111000 或 000111,替换最后一个数

替换前替换后作对比:

过滤整数

1.    有两个重复的随机数,则重新随机新数

2.    隔了一个数的重复,如“8, 3, 8” 或 “6, 2, 6”

3.    太多极限值出现,即太多大值和小值,如“6, 8, 7, 9, 8, 6, 9”

4.    10个数以内出现两组重复数如“5, 7, 3, 1, 5, 7”

5.    连续上升,或连续下降,如“3, 4, 5, 6”

6.    10个数之内重复次数过多,如“9, 4, 5, 9, 7, 8, 9, 0, 2, 9”

替换前替换后作对比:

过滤浮点小数

0-1之间的浮点数

1.    两个连续数字相差小于0.02,如0.875 和0.856

2.    三个连续数字相差小于0.1,如0.345, 0.421, 和0.387.

3.    五个连续增加或连续下降,如0.342, 0.572, 0.619, 0.783, 和0.868.

4.    太多极限值出现,即太多大值和小值,0.325, 0.198, 0.056, 0.432, and 0.216.

总结

如果想要产生的结果更真实,就是用高斯分布随机。如果为了让玩家更开心,可以对产生的随机数进行过滤。

          ------by  wolf96    http://blog.csdn.net/wolf96

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-14 16:20:45

游戏人工智能开发之进阶版随机技术的相关文章

unity3d 游戏人工智能开发之状态机(C#模板与示例)

Finite State Machine 状态机 This is a Deterministic Finite State Machine framework based on chapter 3.1 of Game Programming Gems 1 by Eric Dybsend. Therea are two classes and two enums. Include them in your project and follow the explanations to get the

游戏人工智能开发之人群的动态行为交互仿真

博主把实验效果做成了视频,可以先看一下: youtube(清晰):https://youtu.be/S5wLx-zMrIE 优酷:http://v.youku.com/v_show/id_XMTMxOTM3NTE1Ng==.html TX:TX:http://v.qq.com/page/q/m/x/q0163gorwmx.html 动态人群交互模拟基于一般适应综合征理论General Adaptation Syndrome Theory 先了解一下什么是  一般适应综合征(general ada

HTML5 Canvas核心技术:图形、动画与游戏开发 PDF扫描版?

HTML5 Canvas核心技术:图形.动画与游戏开发 内容简介: <HTML5 Canvas核心技术:图形.动画与游戏开发>中,畅销书作家David Geary(基瑞)先生以实用的范例程序直接切入这套API,全面讲解其功能,以求让读者实现出内容丰富且界面一致的网络应用程序,并将开发好的程序部署在多种设备及操作系统之上. 教程地址:HTML5 Canvas核心技术:图形.动画与游戏开发 PDF扫描版? HTML5 Canvas核心技术:图形.动画与游戏开发 目录: 前言 第1章 基础知识 1.

游戏服务器开发需要学习的技术

一,游戏服务器编程语言的选择 所谓的游戏服务器编程语言其实有很多,基本上任何一种语言都可以作为游戏服务器的编程语言.这需要根据自己游戏的类型和要求加以选择.比如C++,Java ,Erlang,go等等.目前我用过的只有C++和Java.但是以Java为主.所以接下来就以自己的经验,谈谈以Java为核心的游戏服务器开发技术体系. Java目前作为游戏服务器开发语言已经很是普遍.但是大多数是作为页游或手游的服务器,而端游戏一般选择C++,因为端游对服务器的性能要求相对比较高一些.两种语言各有利弊.

java集合框架小结(进阶版)之HashMap篇

基本概念: Hash(哈希):hash一般也译作“散列”.事实上,就是一个函数,用于直接定址.将数据元素的关键字key作为变量,通过哈希函数,计算生成该元素的存储地址. 冲突:函数是可以多对一的.即:多个自变量可以映射到同一函数值.一般而言,不同的key的hash值是不同的.在往hash表中映射的时候,不同的hash值可能映射到同一存储地址,这种情况被称为冲突. 解决冲突的方法: 1. 链表法:将冲突的各个元素用一个一维数组来维护.(java源码实现) 2. 开发寻址法:具体的有线性探测法.二次

25 个超棒的 HTML5 &amp; JavaScript 游戏引擎开发库

25 个超棒的 HTML5 & JavaScript 游戏引擎开发库 就像在汽车中,引擎完成主要的工作,使汽车看起来不可思议.游戏引擎同理,游戏开发者完成细节的工作,使游戏看起来真实.吸引人眼球.游戏引擎负责其余的事情.早期,游戏开发者通常从草图做起,花费高昂,且不容易获利.为了让游戏开发更加简单容易,主要的开发者开始授权他们的基本游戏引擎,如 Unreal.而且,随着手机和平板游戏的出现,所需预算比以前更少,对 JAVASCRIPT 和HTML5 游戏引擎的需求大增. 如果你是一个游戏开发者,

细数捕鱼游戏软件开发的游戏技巧,趣味性十足遵循经典套路设计

捕鱼游戏作为深海捕鱼游戏从出现就吸引了很多人的目光,并且在随着技术的发展和进步下,手机捕鱼游戏开发也逐渐的愈演愈烈,甚至是成为了当下流行的投资运营选择.其实在手机捕鱼游戏开发下的捕鱼游戏蕴含了许多还没有被玩家了解透彻的游戏技巧,仍然需要玩家在捕鱼游戏中自己慢慢的发现与总结.欢迎咨询电话:15315986100:QQ:3410861822 手机捕鱼游戏开发,华软打造值得玩 谈及捕鱼游戏的游戏技巧很多人都认为捕鱼游戏就是简单的点击屏幕进行发射就好,账户金币没有了就等着系统的补助发放,丝毫不去想如何捕

ES系统封装教程 高级进阶版 提供Wind7,xp系统下载

 ES系统封装教程 高级进阶版,提供我自己封装的Wind7 x86&x64和XP三个版本的系统下载.这个教程不是为没有基础的人准备的,要想从头学起,我推荐几个基础的教程. 1.使用 VMware Player 创建适合封装的虚拟机 2.使用 Easy Sysprep v4 封装 Windows XP 基础篇 3.使用 Easy Sysprep v4 封装 Windows 7 凡是里面用到的的工具我都会提供下载地址. 虚拟机VM ware10 .系统补丁到2014年10月.系统运行库.封装用的

[转载]HTML5游戏前端开发秘籍

http://isux.tencent.com/html5-game-development-cheats.html 转载至腾讯ISUX HTML5游戏前端开发秘籍 本文由米随随编写 QQ空间Android版4.2和4.5上线的玩吧游戏“空间疯狂套牛”是一款使用HTML5开发出的手机游戏,虽然还有很多不足,但其中使用的一些技术与技巧还是很有必要为大家分享出来,方便大家用秘籍打通各种关卡创造出更多更好的HTML5游戏.(本秘籍主要讲述使用HTML + CSS技术方面) 一.自适应 Android手