原地址:http://www.cnblogs.com/cocoaleaves/archive/2009/03/23/1419346.html

学校的MSTC要出杂志,第一期做游戏专题,我写了一下AI,发在“技术入门”栏目。对AI做这样整体设计的内容网上不多见,还请各位高手多多指正~

游戏AI的综合设计

AI (Artificial Intelligence)作为游戏的重要组成部分,对游戏的可玩性起到越来越大的作用。玩家早已不满足傻瓜似的敌人和NPC,渴望见到能像人一样思考的虚拟人物。本文首先介绍游戏常见的人工智能技术,然后综合利用各种技术设计一个较为通用的AI引擎。

有限状态机(FSM):有限状态机是游戏中最常用的人工智能技术,其他技术基本都需要有限状态机的支持。有限状态机把单位的行为抽象成若干种状态,在一定的条件下状态之间可以相互转换。例如,敌人开始处于巡逻状态,当玩家靠近时,转换成追击状态,当玩家远离后,又恢复巡逻。单位的AI可以用一张状态图表示。

模糊逻辑(Fuzzy Logic):模糊逻辑是布尔逻辑的扩展。布尔逻辑中“是”和“否”是绝对的,而模糊逻辑中会有“有点是”、“不怎么是”、“非常是”的区别。例如上例,玩家靠近巡逻状态的敌人,这种靠近就是一种模糊的概念。使用了模糊逻辑后,有时敌人认为距离3米就算靠近了,有时认为距离2米才算靠近。

模糊状态机(FuSM):结合模糊逻辑和有限状态机,就产生了模糊状态机。模糊状态机中,单位不是绝对的处于某种状态,而是同时处于几种状态,只是每种状态的比重不同。

智能地形(Smart Terrain):智能地形是给地形赋予特殊的信息,从而用于AI寻路、伏击等战术。CS中的路径点(Way Point)就是一种智能地形。相似的还有智能物品等。

A*寻路算法(A Star Path Finding):A*算法被证明是最高效的寻路算法,在寻路中被广泛应用。A*算法是对迪杰斯特拉算法的改进,详细资料网上有很多。

脚本系统(Script System):脚本系统应该是游戏引擎的组成部分,但也可以算作AI的一种技术。例如DOTA使用的是WarCraft的引擎,地图编辑者使用地图编辑器为DOTA中的各个英雄编写不同的JASS脚本,英雄们才有了一定的AI。目前最流行的脚本语言是Lua脚本,WOW就是使用Lua做脚本语言。

遗传算法(Genetic Algorithm)神经网络(Neural Network):这二者属于较为高级的AI技术,都具有机器学习,进化的性质。但是,实际游戏中应用的并不多,因为游戏中的单位通常不能接收足够的学习,学习的结果也不好控制,容易出现意想不到的情况。

游戏中的AI引擎就是要综合利用上述技术,并且要与渲染、物理模拟等引擎部件配合。首先我们了解一下人类大脑的结构:

人脑

作用

脑干

呼吸、血液循环等生命中枢

小脑

平衡

运动区

动作

感觉、视觉、听觉、嗅觉区

各种感受

额叶

高层大脑功能

颞叶

记忆

模拟人脑结构,设计我们的AI引擎结构:

AI

作用

技术

物理模拟

碰撞检测、碰撞反应

物理引擎完成

导航

寻路

A*算法、路径点

动画渲染

渲染

有限状态机、渲染引擎完成

感知器

感知

脚本系统、智能地形、智能物品

决策器

决策

脚本系统、有限状态机、模糊逻辑

记忆器

学习

神经网络、遗传算法、脚本系统

各部分可以用消息系统连接起来,并且对外公开接口API,下面是整体结构图:

下面解释该系统的工作原理:

l 物理部分由物理引擎完成,包括碰撞检测、碰撞反应,保存着物体坐标等物理信息。某些碰撞信息要通知感知系统,也就是该单位的触觉。

l 感知系统在不同单位中差别很大。例如最简单的敌人可以没有任何感觉。稍复杂的敌人可以拥有视觉,即可以发现其前方的玩家,这时玩家可以绕的敌人身后偷袭。更复杂的敌人可以拥有听觉,即玩家在身后偷袭时如果打碎了物品也会被敌人发现。魔兽争霸中的单位可以感知附近的敌人,发现敌人进入了一定区域就会自动去攻击。感知系统可以直接决定单位行为,类似与条件反射,例如“受到伤害”的感觉会让单位逃避伤害,哪怕这个单位没有高级决策能力。

l 决策系统是单位的高级AI,单位可以综合感知系统提供的各种信息和其他单位对其下达的命令做出判断。命令可以是玩家的输入,也可以是团队指挥者(也是一个AI单位)下达的。例如DOTA中一个AI英雄通过综合衡量自身的生命、攻击力、对方生命后,决定和对方PK。决策系统可以使用有限状态机、神经网络等技术。同时也可以让单位拥有学习功能,但平衡的学习功能实现起来比较困难。

l 决策系统直接知道单位的行为,是攻击、移动,还是跳跃。单位行为可以由有限状态机管理。另外,较为复杂的游戏地图里,决策系统有时需要导航系统把“前往某处”分解成“先到哪,后到哪”,再控制单位的行为。

至此,整个AI引擎已经比较完善了,在各种类型的游戏中也比较通用。可以把AI的整体框架放到游戏物体基类(GameObject类)中,各派生类继承并重写关键方法,从而表现出不同的智能。

游戏AI的综合设计的更多相关文章

  1. 游戏AI的生命力源自哪里?为你揭开MOBA AI的秘密!

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由wataloo发表在专栏wataloo的试验田 1 设计概要 1.1 设计原则和目的 英雄AI的目的主要有: 1.新手过渡局,让玩家刚 ...

  2. 趣说游戏AI开发:对状态机的褒扬和批判

    0x00 前言 因为临近年关工作繁忙,已经有一段时间没有更新博客了.到了元旦终于有时间来写点东西,既是积累也是分享.如题目所示,本文要来聊一聊在游戏开发中经常会涉及到的话题--游戏AI.设计游戏AI的 ...

  3. 使用行为树(Behavior Tree)实现游戏AI

    ——————————————————————— 谈到游戏AI,很明显智能体拥有的知识条目越多,便显得更智能,但维护庞大数量的知识条目是个噩梦:使用有限状态机(FSM),分层有限状态机(HFSM),决策 ...

  4. 如何建立一个完整的游戏AI

    http://blog.friskit.me/2012/04/how-to-build-a-perfect-game-ai/ 人工智能(Artificial Intelligence)在游戏中使用已经 ...

  5. 游戏AI之初步介绍(0)

    目录 游戏AI是什么? 游戏AI和理论AI 智能的假象 (更新)游戏AI和机器学习 介绍一些游戏AI 4X游戏AI <求生之路>系列 角色扮演/沙盒游戏中的NPC 游戏AI 需要学些什么? ...

  6. 游戏AI之决策结构—有限状态机/行为树(2)

    目录 有限状态机 行为树 控制节点 条件节点 行为节点 装饰节点 总结 额外/细节/优化 游戏AI的决策部分是比较重要的部分,游戏程序的老前辈们留下了两种经过考验的用于AI决策的结构: 有限状态机 行 ...

  7. 做游戏长知识------基于行为树与状态机的游戏AI(一)

    孙广东 2014.6.30 AI. 我们的第一印象可能是机器人,如今主要说在游戏中的应用. 现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完毕的.比方在RPG游戏中 ...

  8. Unity教程之-基于行为树与状态机的游戏AI

    AI.我们的第一印象可能是机器人,现在主要说在游戏中的应用.关于AI的相关文章我们在前面也提到过,详细请戳这现代的计算机游戏中已经大量融入了AI元素,平时我们进行游戏时产生的交互都是由AI来完成的.比 ...

  9. 王亮:游戏AI探索之旅——从alphago到moba游戏

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:王亮,腾讯AI高级研究员.2013年加入腾讯,从事大数据预测以及游戏AI研发工作.目前 ...

随机推荐

  1. win32 右键弹出菜单

    #define  CW_ABOUT  100 #define  CW_DOCUMENT 200 POINT t; GetCursorPos(&t); HMENU hMenu,hPopupMen ...

  2. Python与数据结构[4] -> 散列表[1] -> 分离链接法的 Python 实现

    分离链接法 / Separate Chain Hashing 前面完成了一个基本散列表的实现,但是还存在一个问题,当散列表插入元素冲突时,散列表将返回异常,这一问题的解决方式之一为使用链表进行元素的存 ...

  3. [转载]数学【p1900】 自我数

    题目描述-->p1900 自我数 本文转自@keambar 转载已经原作者同意 分析: 思路还是比较好给出的: 用类似筛选素数的方法筛选自我数. 但是要注意到题目限制的空间仅有4M,不够开10^ ...

  4. Struts2遇到Caused by Action class not found这类问题怎么解决

    刚才碰到个小坑,显示的错误是struts.xml找不到Action,明显不会有错的因为之前还是正常跑起来的,然后百度google搜了一通没解决,maven clean用了没反应还是照样报错. 最后在百 ...

  5. Codeforces 786A Berzerk(博弈论)

    [题目链接] http://codeforces.com/problemset/problem/786/A [题目大意] 有两个人,每个人有一个数集,里面有一些数,现在有一个环,有个棋子放在1, 有个 ...

  6. 【可持久化Trie】模板

    总算找到个能看懂的了,orz Lavender. #define INF 2147483647 #define N 100001 #define MAXBIT 31 int root[N],ch[N* ...

  7. 【莫队算法】bzoj3289 Mato的文件管理

    莫队算法,离线回答询问,按一定大小(sqrt(n*log(n))左右)将答案分块,按 ①左端点所在块②右端点 双关键字排序. 然后暴力转移. 转移的时候用树状数组. O(n*sqrt(n)*log(n ...

  8. 8.5(java学习笔记)8.5 字节码操作(javassist)

    一.javassist javassist让我们操作字节码更加简单,它是一个类库,允许我们修改字节码.它允许java程序动态的创建.修改类. javassist提供了两个层次的API,基于源码级别的和 ...

  9. java web(学习笔记)项目路径问题

    最近刚接触java web特别是是关于项目路径这一块很晕,就把自己遇到的一些疑惑和理解写下来. 首先贴上路径,这里用的是eclipse. 其中我们要注意看WebContent目录,这是web程序的根目 ...

  10. 输入参数之POJO包装类

    1,包装类:需要实现序列化 package com.songyan.pojo; import java.io.Serializable; public class QueryVo implements ...