游戏中的状态机研究报告

游戏中的状态机研究报告

ID:35231759

大小:99.00 KB

页数:9页

时间:2019-03-22

游戏中的状态机研究报告_第1页
游戏中的状态机研究报告_第2页
游戏中的状态机研究报告_第3页
游戏中的状态机研究报告_第4页
游戏中的状态机研究报告_第5页
资源描述:

《游戏中的状态机研究报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、游戏中的状态机研究报告姚慧敏一、什么是状态机关于状态机的一个极度确切的描述是它是一个有向图形,由一组节点和一组相应的转移函数组成。状态机通过响应一系列事件而“运行”。每个事件都在属于“当前”节点的转移函数的控制范围内,其中函数的范围是节点的一个子集。函数返回“下一个”(也许是同一个)节点。这些节点中至少有一个必须是终态。当到达终态,状态机停止。二、状态机的分类和扩展1.有限状态机(1)有限状态机的定义和特征:有限状态机,它包含了有限个“状态”和状态之间的“转移”,彼此连成一个有向图。它主要用于整个游戏场景的管理或操作单个的游戏对象和人物。有限状态机也是一种有向图的数据结构,由三部分组成:◎

2、内在的所有条件;◎输入条件;◎状态之间起到连接作用的转换函数。一个有限状态机是一个设备,或是一个模型,具有有限数量的状态。它可以在任何给定时间根据输入进行操作,使得系统从一个状态转换到另一个状态,或者是使一个输出或者一种行为的发生,一个有限状态机在任何瞬间只能处于一种状态。(2)完成一个有限状态机先记下AI要进行的基本行为,然后用图形表示,再变成实际的代码。下面以一个带有武器的士兵AI来举例说明怎样设计一个有限状态机。AI规则:◎敌人在户外区,没有障碍物◎他有预定停留点,循环巡逻◎当你进入敌人的视线锥面时,敌人激活◎敌人看到你就追◎他带有剑◎如果离你很近,他就会停下来,用剑刺你图形布局:在

3、编码之前,一定要用简单的框图得到所有状态和变换的全貌。状态用一个圆表示,而箭头则表示状态转换正在发生,标记好每一个状态和状态转换之间的条件,在接下来的编码中将会表现的更加清晰。如下图所示,士兵有四种状态,到达停留点(RealignWaypoint)、寻找停留点(SeekWaypoint)、追逐玩家(Chaseplayer)和攻击玩家(Fightplayer)。转换的条件有:转弯(Aligned)、找到巡逻点(WaypointReached)、看见玩家(Seeplayer)、距离限制(Distance)、玩家死亡或离开视线(Playerdeadorlostsight)。编写代码:完成规则和图

4、之后,编写有限状态机就是一件很简单的事情了。对于状态机中所有的状态,我们要先枚举出来,最好用0来代表初始的状态,用整数表示其他的状态。因此,如果有限状态机欧N个状态的话,则最后一个状态的枚举值应为N-1。我们学习了C++语言,因此用C++中的#define语句生产状态名。有限状态机的程序框架如下所示:#defineSEEK_WAYPOINT0#defineROTATE_WAYPOINT1(…)用一个整形变量表述AI所处的状态,从而驱动一个switch结构:intstateswitch(state){case0:{//这个状态的特定代码break;}(…)caseN-1:{//这个状态的代码

5、break;}default:{break;}}上面是一个有限状态机的代码框架,下面我们来完成我们的士兵状态机。#defineSEEK_WAYPOINT0#defineROTATE_WAYPOINT1#defineCHASE_PLAYER2#defineFIGHT_PLAYER3boolaligned;boolreachwaypoint;boolseeplayer;boolplayerlost;booldistancelimited;intstate;while(1){switch(state){case0:{animation1();if(reachwaypoint){state=1;}

6、elseif(seeplayer){state=2;}break;}case1:{animation2();if(aligned){state=0;}break;}case2:{if(playerlost){state=0;}elseif(!distancelimited){state=3;}break;}case3:{if(distancelimited){state=2;}ifelse(playerlost){state=1;}break;}default:break;}}这样,在switch结构中每个case控制一个特定的状态,将每一个case中状态的活动分为三个部分:◎状态名◎该状

7、态中要进行的默认动作◎求输出变换时要进行的运算case[NAMEOFSTATE]:[DEFAULTACTIONS][CONDITIONEVALUATION]if(TRANSTION)state=destintionstate;(…)break;这样布局case,可以使代码的速度更快,更容易找到潜在的缺陷。2.并行自动机并行自动机也叫多状态自动机,意思就是,一个AI同时兼任两部状态机的工作,例如上例中的士兵,如果给他一把枪

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。