TC官方合作论坛
标题:
【装逼篇】脚本开发中的人工智能实现------有限状态机原理
[打印本页]
作者:
冷月无痕
时间:
2013-10-6 06:23
标题:
【装逼篇】脚本开发中的人工智能实现------有限状态机原理
麻码说标题越长越牛P,而且还要人看了似懂非懂才够噱头
其实是冷月很久没有发帖了,实在是手痒得厉害......
首先贴一段百度来的原文:
一、状态机描述
状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输出是否与输入信号有关,状态机可以划分为Mealy型和Moore型状态机;根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然已经自成一体。Moore型状态机的输出只和当前状态有关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴信息的事件(输入)。Mealy型状态机的输入是由当前状态和输入共同决定,对应到软件设计领域,则该状态机接收的事件含有内蕴信息,并且影响状态机的输出。显然,这种划分在软件设计领域毫无意义。虽然软件设计领域的状态机也有同步和异步的划分,但和数字电路方面的同步异步已经不同。
复制代码
二、状态机分类(后文中如无特别说明,则状态机指软件设计领域的通用有限状态机)
依据状态之间是否有包含关系,分以下两种
(1)常规状态机。状态机中的所有状态是不相交的、互斥的。
(2)层次状态机。状态机中的状态之间要么是互斥的,要么是真包含的,可以用树性结构来描述这些状态集,包含其它状态的状态称为枝节点,不包含其它状态的状态称为叶节点,为方便单树描述,总是设计一个状态包含所有的状态节点,称为根节点。状态机的状态只能停留在叶节点,而不能停留在枝节点,每个枝节点需要指定一个子节点为它的默认子节点,以便状态机进入枝节点的时候能够停留到叶节点。
复制代码
三、状态机实现
(1)switch/case if/else方式实现。用于少量状态(3个及其以下)的时候,不需要引入专门的状态机模块。这种方式不能编写通用的状态机模块,不再多说。
(2)面向过程方式:宏是实现面向过程方式的通用方式。虽然在状态机层面还是可以用面向对象的方式封装,这里还是把它称为面向过程的方式。
复制代码
蒙圈了吧,其实冷月也蒙圈了,还有英文版的,冷月看不懂英文就不发了......
有人要问了,这玩意有什么用?
为什么别人的脚本执行很流畅不会卡住?为什么别人的脚本速度快?为什么别人的脚本全自动?为什么别人的脚本...比我的好?
好吧,以前我们可以说是别人的项目框架设计合理,流程控制逻辑性强,代码风格严谨......等等等等,现在,我们可以很牛13的说一句,那是别人的状态机设计得好!
其实冷月认为吧,我们这些玩儿游戏脚本的所谓全智能零人工并没有多复杂(相比游戏引擎来说)
以冷月的浅薄认识归纳起来不过是以下几点:
一 数据采集
1 界面数据采集(脚本界面控件的数据采集,合理的控件设计,在完善和操作性之间的平衡是必须要把握好的)
2 文件数据采集(文本文件和配置文件是最常用的,通常用来保存数量大的数据)
3 游戏数据采集(游戏里的各类数据,一般通过图色获取或者内存读取)
二 数据处理
1 全局变量(全局变量通常是作为流程控制使用,不建议用来保存采集到的各类数据)
2 字符串(任何数据都可以转换为字符串输出,灵活的使用各种字符串处理方式是至关重要的!)
3 条件(利用采集到的数据,设置合理的条件,才能实现我们想要的效果,也就是各种表达式)
三 流程控制(以树形结构描述)
1 根节点 也就是事件功能,T语言中流程的起始点就是事件功能.通常会在事件功能中通过采集到的数据使脚本执行不同的主功能(比如主线,采集,副本,打怪,吃药等等等等)
2 枝节点 也就是主功能,包含功能ID和操作列表(功能ID只有用在多开的情况下),通过采集到的数据进行条件的判断从而执行不同的操作功能(比如图色,键鼠,内存读写等等)
3 叶节点 也就是操作功能,包含功能ID,默认操作,后续操作,返回值(通常数据的采集都是在操作功能里完成的,返回值是反馈给流程控制的重要数据)
其中,整个流程控制最核心的就是枝节点---主功能(智能不智能就看它了)
主功能的基本结构为:
1)进入操作
2)错误处理
好吧,前面说了这么多其实都是为了这个做铺垫......
1. 数据错误处理(包含了采集数据错误,比如文字识别错误,找图找色找字错误,还有数组下标越界,坐标越界等等)
2. 操作错误处理(比如因为延时造成的键鼠操作无效,或者各类操作超时,比如游戏卡屏,人物卡位(走不了),卡怪(打不死),卡物品(捡不到),等等)
3. 状态错误处理(比如窗口位置移动,遮挡,人物被PK,死亡,物品消耗,装备持久度等等)
3)退出操作
最后,很多人忽视的细节就是这个退出操作.
所有的功能流程最终必须执行一个退出操作,所有的操作功能必须不存在死循环!!!
好吧,其实说白了就是细节决定成败.想要脚本稳定,错误的处理就要严谨.想要脚本速度快,就要注意操作的方式和流程的优先级.想要脚本全自动,功能就要完善.
就拿一个简单的打怪功能来说(不考虑其他状态):
功能参数:功能ID,默认操作死循环,默认数量无限,默认怪物名称不限
1 判断操作,如果操作不为死循环执行2,否则执行3 (进入操作)
2 判断任务数量,如果任务完成执行9,否则执行3
3 判断是否选中怪,如果选中怪执行4,否则执行5
4 判断怪物名称,如果符合条件执行6,否则执行5
5 判断是否超时,如果超时执行9,否则按TAB键(选怪),执行3(超时错误处理)
6 发动攻击,执行7
7 判断怪物是否死亡,如果死亡执行1,否则执行8
8 判断操作是否超时,如果超时执行9,否则执行6 (超时错误处理)
9 根据功能执行状态返回完成或者超时的标记数据(退出操作并返回数据)
那么如何用T语言去实现这个功能的流程,就看你对T语言基础语法的掌握程度了,越熟悉基础语法实现起来越简单!!!
冷月的砖就抛到这里,难得发个贴,希望大家都来参与讨论,分享自己的经验.
篇外话:
其实,目前的后台脚本游戏数据的采集靠的还是各类插件(无论图色还是内存)
那么我们能用TC做些什么呢?
1 界面设计(学习要点:控件事件结合控件API的应用技巧)
2 字符串处理(学习要点:熟悉所有字符串API,以及灵活配合应用)
3 流程控制(学习要点:熟练掌握T语言基础语法中的流程控制语句,运算符与条件表达式)
作者:
TC兔子
时间:
2013-10-6 07:03
装的真够大!把你QQ留到百合了,给你挂了个高富帅的帽子,看看有没有如花联系你~
不过内容还不错,建议贰陌,清风他们也来点!
作者:
我是冰冻的番茄
时间:
2013-10-6 08:11
作者:
klyyz1980
时间:
2013-10-6 08:32
何为学问?且看楼主!
作者:
25705871
时间:
2013-10-6 09:01
作者:
whoyeyang
时间:
2013-10-6 09:10
装的真够大!把你QQ留到百合了,给你挂了个高富帅的帽子,看看有没有如花联系你~
不过内容还不错,建议贰陌,清风他们也来点!
TC兔子 发表于 2013-10-6 7:03:40
喜闻乐见
作者:
dongyijun1979
时间:
2013-10-6 10:28
貌似很高科技的样子
作者:
shadow
时间:
2013-10-6 10:38
看看那啊啊啊
作者:
河风
时间:
2013-10-6 10:49
这是基础理论了。看一下
作者:
ksap787523
时间:
2013-10-6 11:38
111111111111111111111
作者:
baijianming
时间:
2013-10-6 11:39
这是基础理论了。看一下
作者:
jianqiumy
时间:
2013-10-6 16:56
应该看看
作者:
78213505
时间:
2013-10-7 01:47
高端、大气、上档次的感觉
作者:
nmqlzh
时间:
2013-10-7 17:40
回复
1楼
冷月无痕
的帖子
为了继续看下文 不得不拍你一板砖
接家伙
作者:
313767070
时间:
2013-10-7 17:40
路过看看。
作者:
q273814
时间:
2013-10-7 18:23
111111111111111111111111111
作者:
as128214121
时间:
2013-10-7 21:25
牛13,ye~果然看不懂,看学问?请看4L
作者:
cxdgtgqqqf
时间:
2013-11-21 01:31
一定要学好。
作者:
laozeixp
时间:
2013-11-27 10:44
看看天影天堂
作者:
JSDYWZ
时间:
2013-11-28 00:18
状态机实现
作者:
qvoovq
时间:
2013-12-6 21:33
141111
作者:
ulcel800
时间:
2014-1-24 10:32
作者:
dabaowl
时间:
2014-1-26 01:24
作者:
myaoao
时间:
2014-2-17 20:18
学习
作者:
好好学习007
时间:
2014-2-18 23:18
大神贴。
作者:
suya3204
时间:
2014-2-28 20:32
很感谢啊。。 。 分析的确实不错
作者:
xmm1100
时间:
2014-3-1 09:11
好东西啊 !扩展思维!
作者:
killer201233
时间:
2014-3-19 22:56
111111111111111111111
作者:
djzlove129
时间:
2014-3-20 14:39
kankan
作者:
crazychw
时间:
2014-3-21 09:40
多谢楼主,顶下脚料
作者:
yanzheng
时间:
2014-3-28 18:41
看看
作者:
SuperHan
时间:
2014-3-29 12:22
吼吼叫了
作者:
chibandewu
时间:
2014-3-29 14:18
很给力!!
作者:
xzk0419
时间:
2014-3-29 15:46
真的好罗索
作者:
hualaosi
时间:
2014-3-29 17:37
暂时看不懂,不过,估计将来真有这样需要的时候,我会学识看懂的。
作者:
317994436
时间:
2014-4-6 22:55
中的人工智能实现------有
作者:
qq462621349
时间:
2014-4-21 17:57
必须顶
作者:
行尘
时间:
2014-4-22 03:12
看看
作者:
caijuan2013
时间:
2014-4-22 07:51
check
作者:
言术
时间:
2014-4-22 10:07
高大上的感觉
作者:
zhujun8469
时间:
2014-4-23 16:54
顶一个
作者:
adbook
时间:
2014-4-23 17:08
学学 回复 看看
作者:
uuuusb
时间:
2014-5-25 13:49
撒旦法
作者:
saina6281
时间:
2014-6-2 07:25
人工智能实现------有限状态机
作者:
wdq108
时间:
2014-6-11 19:25
冷月牛逼,这么好的文章原来竟然没发现
作者:
573438701
时间:
2014-7-1 22:56
膜拜冷导
作者:
lyzfp
时间:
2014-7-12 12:01
一块好砖,看看。
作者:
2218585368
时间:
2014-7-16 16:01
很有深度的发言,值得学习!!
作者:
gs228796
时间:
2014-7-17 08:59
000000000000000000000000
作者:
feixianglmq
时间:
2014-7-23 15:46
zsdsdsdasdadas
作者:
a125675677
时间:
2014-7-25 23:41
xuexiz
作者:
lizhe9558
时间:
2014-8-22 10:46
了解下,谢谢
作者:
husiyu317
时间:
2014-8-22 17:19
人工智能实现
作者:
asdfeaa
时间:
2014-8-23 21:05
作者:
piaosen
时间:
2014-8-29 10:36
看看还有啥
作者:
callox
时间:
2014-9-14 16:45
脚本开发中的人工智能实现------有限状态机原理
作者:
IY读书只为养猪
时间:
2014-9-15 21:34
6666666666666
作者:
xzlanxing
时间:
2014-9-16 10:19
这个不错
作者:
s52o1
时间:
2014-9-21 19:48
dddddd
作者:
qsmoon
时间:
2014-9-23 22:04
这个很可以!
作者:
q0252
时间:
2014-10-1 21:02
11111111111
作者:
nba521314
时间:
2014-10-2 22:54
rgrhtrher
作者:
26666180
时间:
2014-10-3 00:30
。。。。。。。。。
作者:
忽悠大王
时间:
2014-10-15 11:11
学习一下。
作者:
oyplc2
时间:
2014-10-15 14:42
看一下
作者:
iookk2012
时间:
2014-11-5 03:09
瞧瞧敲起
作者:
T星人
时间:
2014-11-5 03:49
谢谢分享
作者:
luxinwen
时间:
2015-1-1 23:42
回复回复
作者:
itsok
时间:
2015-1-10 06:27
ddddd
作者:
wuhuan285021112
时间:
2015-1-27 18:00
对USA飞机扫ijfoi
作者:
da1990
时间:
2015-1-28 05:52
粑粑说 精辟最重要
作者:
laowantong
时间:
2015-3-26 00:19
作者:
2837271954
时间:
2015-4-19 15:16
作者:
hlincs
时间:
2015-4-19 16:22
脚本开发中的人工智能实现------有限状态机原理
作者:
2837271954
时间:
2015-4-21 07:45
没有下载
作者:
ugvlc
时间:
2015-4-21 18:28
fgdgffgfgfgfgdfggfg
作者:
爱上老公
时间:
2015-4-22 00:50
话说的真好
作者:
for
时间:
2015-5-8 14:37
的撒范德萨发的股份的施工方的广泛地
作者:
1601086461
时间:
2015-6-2 23:04
看看看看
作者:
117611798
时间:
2015-6-2 23:58
作者:
wen911119
时间:
2015-9-8 13:31
向大师学习
作者:
guanshui088
时间:
2015-10-5 01:07
啊噶速度发
作者:
liu1ang
时间:
2015-10-15 10:30
【装逼篇】脚本
作者:
boood
时间:
2016-5-21 15:46
学习学习
作者:
jie820090428
时间:
2016-6-1 21:01
ryreyreyer
作者:
tbmbx2017
时间:
2016-9-11 00:18
求看隐藏内容,谢谢
作者:
c5291314
时间:
2016-12-23 15:44
看看把
作者:
shufu
时间:
2017-5-15 17:13
也来点!
欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/)
Powered by Discuz! X3.1