挂海论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
 友情提示:文字/图片广告均非网站意见,请担保交易勿直接付款,由此产生的责任自负
玩游戏来117游戏网(H5不下载也能玩手游传奇,吃鸡,竞技都有)不懂社区·好资源不错过·各位资源站大佬欢迎来采集搬运寻找会做《单机》游戏修改器的开发作者长期合作,价格不是问题!联系QQ:1874088565
IOS签名/udid证书出售/送证书加群1040456405 ██【我要租此广告位】██.
.. .
查看: 5919|回复: 9
打印 上一主题 下一主题

[讨论交流] 工作流程-人工智能之状态机的原理和实现

[复制链接]

15

积分

6

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
9
海币
740
交易币
0
跳转到指定楼层
楼主
发表于 2015-2-6 20:38:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提醒:若下载的软件是收费的"请不要付款",可能是骗子,请立即联系本站举报,执意要付款被骗后本站概不负责。(任何交易请走第三方中介,请勿直接付款交易以免被骗!切记).

友情提示:文字/图片广告均非本站意见,请担保交易勿直接付款,由此产生的责任自负!!!↑↑


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

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

举例说明:  

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

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

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

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

程序规模和代码逻辑成正比.不易于维护. 相较下.状态机编程思想成为更佳的解决方案.下面将通过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  
}  

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

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



PS:  

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

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

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


联系我时,请说是在 挂海论坛 上看到的,谢谢!



上一篇:想成为编程高手的八大奥秘
下一篇:Delphi做魔域 之怪物列表遍历
免责声明:
1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关。一切关于该内容及资源商业行为与www.52ghai.com无关。

2、本站提供的一切资源内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。

3、本站信息来自第三方用户,非本站自制,版权归原作者享有,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

4、如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵犯你版权的,请邮件与我们联系删除(邮箱:xhzlw@foxmail.com),本站将立即改正。

30

积分

15

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
15
海币
104
交易币
0
沙发
发表于 2015-2-6 21:38:01 | 只看该作者
支持,赞一个

4

积分

0

主题

0

听众
已帮网友解决0 个问题
好评
0
贡献
4
海币
59
交易币
0
板凳
发表于 2015-2-6 23:07:59 | 只看该作者
学习了,谢谢楼主

2

积分

0

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
2
海币
51
交易币
0
地板
发表于 2015-2-9 05:24:03 | 只看该作者
工作流程-人工智能之状态机的原理和实现
3正式会员
128/300

128

积分

51

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
77
海币
6700
交易币
0
5#
发表于 2015-3-8 23:34:57 | 只看该作者
求沙发

35

积分

23

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
12
海币
594
交易币
0
6#
发表于 2015-3-15 14:11:40 | 只看该作者
OMG!介是啥东东!!!
3正式会员
255/300

255

积分

78

主题

4

听众
已帮网友解决0 个问题
好评
0
贡献
177
海币
1838
交易币
0
7#
发表于 2015-5-18 13:06:19 | 只看该作者
硬实厉害啊  

1

积分

0

主题

5

听众
已帮网友解决0 个问题
好评
0
贡献
1
海币
8
交易币
0
8#
发表于 2015-5-18 22:30:47 | 只看该作者
打酱油的,飘过赚点海币

16

积分

11

主题

2

听众
已帮网友解决0 个问题
好评
0
贡献
5
海币
78
交易币
0
9#
发表于 2015-6-18 23:28:09 | 只看该作者
高手云集 马上来看看

52

积分

29

主题

10

听众
已帮网友解决0 个问题
好评
0
贡献
23
海币
7083
交易币
0
10#
发表于 2015-8-12 09:38:11 | 只看该作者
手指点一点,海币轻松得到手!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明|Archiver|手机版|小黑屋|挂海论坛

GMT+8, 2025-4-19 14:06 , Processed in 0.091888 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.2

本站资源来自互联网用户收集发布,如有侵权请邮件与我们联系处理。xhzlw@foxmail.com

快速回复 返回顶部 返回列表