Athena 发表于 2015-2-6 20:38:24

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

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

程序又称机器人程序,顾名思义既是通过程序模拟替代人类来操作游戏.是一种人工智能简单的应用.而状态机正是人工智能一种简单的实现.

举例说明:

控制游戏角色移动到想要某地准备打怪练级.那么我们想象一下作为人类该怎样一步步的操作呢? 首先通过大脑里预先设定好满足战斗的条件.

如背包未满.装备持久正常.携带药品足够.等等.再用眼睛检查角色各项是否满足其条件.如满足则查找当前画面是否有可攻击的怪物.

如果有则选择. 并攻击.怪物死亡后.检查地面是否有掉落物品.如有则拾取.然后重复之前的动作. 了解了这些情况后.如何编程来实现呢?

传统的编程实现方式既是遵循事先设定的逻辑.从头到尾顺序的执行.其缺点是过于死板.程序一经写成.很难对其进行扩展.

程序规模和代码逻辑成正比.不易于维护. 相较下.状态机编程思想成为更佳的解决方案.下面将通过C语言语法的伪代码来讲解其原理和实现.



状态机的4个要素:现态.条件.动作.次态

1.现态:是指游戏角色当前所处的状态.

2.条件:当一个条件被满足.将会触发一个动作.或者执行一次状态的迁移.

3.动作.条件满足后执行的工作  

4.次态:条件满足后要迁往的新状态.


综上所述.一个状态机可以通过2个函数来完成.第一个函数获取现态.再通过条件返回需要执行的动作.第二个函数.实现动作的集合.并修改次态.

函数一:

unsignedint 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 intProcess() // 函数功能:动作合集,因为我们的状态是游戏客户端控制的.所以不需要我们来调整次态
{

while(1)可以开条子线程写一个死循环检查状态返回的动作码. 如不喜可使用时钟,或其他
{

switch(GetAction())
{
case 1:执行回程补给动作

case 2:执行选怪动作

case 3:执行攻击动作

case 4:执行关机动作

case 5:执行寻路动作

case 6:执行拾取动作

default:输出调试信息   
}
Loop End
}
Function End
}

   
以上函数只为说明思路.其条件设定和逻辑必定不够严谨.请观者不必执着于此.其状态机的优点就是相对灵活.可轻松扩展.并使逻辑清晰.并简单化.

希望各位还不懂此思想的同学.看完此文.能理解其原理后举一反三写出自己W美的状态机



PS:

此文归类科普.适用人群为初入 行业的同学. 当然更欢迎各位前辈大牛光临指教.如有不吝赐教更优秀的思路.小弟和广大新人同学.更是感激不尽.不过.

请那些闲得蛋疼的朋友自重些.有时间能帮助别人就帮一下. 不想的话.就多读几本书来帮帮自己. 再不行就睡会觉来养养精神.别把时间用在说风凉话上. 损人不利己 .

交流不同意见可以.但最好不要带人身攻击.

西木8023 发表于 2015-2-6 21:38:01

支持,赞一个

kevinmou 发表于 2015-2-6 23:07:59

学习了,谢谢楼主

asfsaf 发表于 2015-2-9 05:24:03

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

zhuzhuli 发表于 2015-3-8 23:34:57

求沙发

疼惜那份疼惜 发表于 2015-3-15 14:11:40

OMG!介是啥东东!!!

diddom 发表于 2015-5-18 13:06:19

硬实厉害啊

采姑娘的小熊 发表于 2015-5-18 22:30:47

打酱油的,飘过赚点海币

红颜祸水ing 发表于 2015-6-18 23:28:09

高手云集 马上来看看

yuzhibo 发表于 2015-8-12 09:38:11

手指点一点,海币轻松得到手!
页: [1]
查看完整版本: 工作流程-人工智能之状态机的原理和实现