2017-12-10战斗有限状态机FSM

来源:互联网 发布:反转二叉树 js 编辑:程序博客网 时间:2024/05/19 04:51


1.https://www.processon.com/

在线做流程图


2.FSM:状态变化导致行为变化

有限的行为

有外部、内部的触发,造成转变

转变告诉给AI,AI去执行


AI执行后,反作用回状态,同步


3.可扩展性的代码

先罗列行为:巡逻Patrol、追逐Chase、攻击Attack、死亡Dead

抽离共性:FSMState父类,上面4个继承父类

单独给个类:AdvanceManager,对4个行为进行整体的管理,它控制4个行为的转换

从4个状态到AdvanceFSM,是“”管理“”关系


这个单独的类,继承自AIControl,它挂在到游戏对象上



能不能把AdvanceFSM,提一个父类FSMBase出来:


在接到一个模块和功能时,先做下面的设计:




如果增加一个状态5:ChangeBullet换子弹

很容易扩展了;利于维护;实现功能的前提下,考虑结构;


同理:界面MVC设计,都可以用设计图


---------------

什么是有限状态机?状态的转换函数


好处:简单、高效、易于扩展、模块化处理


一定要考虑清楚,转换为什么,转换的条件;


案例:Patrol巡逻,可能发现玩家了,转为Chase追逐

还可能被攻击没生命了,转为Dead

            Chase追逐,可能追上了,开始Attck

                                   可能没追上丢失了,回到Patrol

还可能被攻击没生命了,转为Dead

              Attack,对方丢了,打死对方,Patrol

                               对方跑或其他玩家仇恨值最高了,Chase,“放风筝”

                                被还击,Dead

               Dead,Destroy



“”发现玩家“”就是状态。Chase等,就是行为;状态驱动行为;用枚举来定义状态、行为;枚举写在管理里面,AdvanceFSM

通过“字典”来对应状态和行为,存储转换过程;


针对策略游戏,分为行为层、策略层;是多个FSM


---------------


http://img.blog.csdn.net/20151229191202225

原创粉丝点击