MMORPG外挂工作流程-----人工智能之状态机的原理和实现

MMORPG外挂程序又称机器人程序,顾名思义既是通过程序模拟替代人类来操作游戏.是一种人工智能简单的应用.而状态机正是人工智能一种简单的实现.  
 
举例说明:  
 
控制游戏角色移动到想要某地准备打怪练级.那么我们想象一下作为人类该怎样一步步的操作呢? 首先通过大脑里预先设定好满足战斗的条件.  
 
背包未满.装备持久正常.携带药品足够.等等.再用眼睛检查 角色各项是否满足其条件.如满足则查找当前画面是否有可攻击的怪物.  
 
如果有则选择.   并攻击.怪物死亡后.检查地面是否有掉落物品.如有则拾取.然后重复之前的动作.   了解了这些情况后.如何编程来实现呢?  
 
传统的编程实现方式既是 遵循事先设定的逻辑.从头到尾顺序的执行.其缺点是过于死板.程序一经写成.很难对其进行扩展.  
 
程序规模和代码逻辑成正比.不易于维护.   相较 下.状态机编程思想成为更佳的解决方案.下面将通过C语言语法的伪代码来讲解其原理和实现.  
 
 
 
状态机的4个要素:现态.条件.动作.次态  
 
1.现态:是指游戏角色当前所处的状态.  
 
2.条件:当一个条件被满足.将会触发一个动作.或者执行一次状态的迁移. 
 
3.动作.条件满足后执行的工作    
 
4.次态:条件满足后要迁往的新状态.  
 
 
综上所述.一个状态机可以通过2个函数来完成.第一个函数获取现态.再通过条件返回需要执行的动作.第二个函数.实现动作的集合.并修改次态.  

函数一:  
 
unsigned  int GetAction() // 函数功能:获取状态并根据预先定义的条件来返回需要执行的动作码.  
{  
第一步获取状态:  
 
因为当今的MMORPG类游戏.都有各自简单的人工智能成分.所以在其设计时.游戏角色结构中必有一个域.来表示角色当前状态.这正是我们需要的.大前提所在.当然此域需要我们通过逆向分析取得.  
 
如:1=静止 2=休息 3=移动 4=战斗 5=受到攻击 
 
第二步对每种状态的各种条件进行判断.并返回结果.  
 
switch  (游戏角色状态)  
{  
 
case 1:当人物状态为静止时.检测是否符合挂机条件.再检测是否选择了怪物.如果所有条件不成立则返回攻击动作码  
{  
 
检查条件.通过先后逻辑来控制优先级  
 
if  (满足回程补给条件==是) 返回结果 1  
 
else if  (角色选中状态==空) 返回结果 2  
 
else  返回结果 3  
 
}  
 
case 2:当人物状态为休息时.大家知道游戏设计如果角色一段时间没有动作.就会原地休息.因为程序一旦执行.如果返回这个状态就说明程序或者角色出现异常.那我们只能做些停止之类的动作  
{  
 
返回结果 4  
 
}  
 
case 3:当人物状态为移动时.判断条件是否到达目的地  
{  
 
if  (到达目的地==假) 返回结果 5  
 
}  
 
case 4:当人物状态为战斗时.判断攻击目标是否死亡  
{  
 
if  (判断目标死亡==是) 返回结果 6  
 
else 返回结果3  
 
}  
 
case 5:当人物状态为受到攻击时.  
{  
 
返回结果 3  
 
}  
default:  
{  
 
如果状态未定义.可输出调试信息.  
 
}  
 
}  
Function End  
}     
 
 
函数二:  
 
unsigned int  Process() // 函数功能:动作合集,因为我们的状态是游戏客户端控制的.所以不需要我们来调整次态  
{  
 
while  (1)  可以开条子线程写一个死循环检查状态返回的动作码. 如不喜可使用时钟,或其他  
{  
 
switch  (GetAction()  )  
{  
case 1:执行回程补给动作  
 
case 2:执行选怪动作  
 
case 3:执行攻击动作  
 
case 4:执行关机动作  
 
case 5:执行寻路动作  
 
case 6:执行拾取动作  
 
default:输出调试信息 
}  
Loop End  
}  
Function End  
}  
 
    
以上函数只为说明思路.其条件设定和逻辑必定不够严谨.请观者不必执着于此.其状态机的优点就是相对灵活.可轻松扩展.并使逻辑清晰.并简单化.  
 
希望各位还不懂此思想的同学.看完此文.能理解其原理后举一反三写出自己完美的状态机  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值