TC官方合作论坛

标题: 【装逼篇】脚本开发中的人工智能实现------有限状态机原理 [打印本页]

作者: 冷月无痕    时间: 2013-10-6 06:23
标题: 【装逼篇】脚本开发中的人工智能实现------有限状态机原理
麻码说标题越长越牛P,而且还要人看了似懂非懂才够噱头其实是冷月很久没有发帖了,实在是手痒得厉害......

首先贴一段百度来的原文:
  1. 一、状态机描述
  2. 状态机理论最初的发展在数字电路设计领域。在数字电路方面,根据输出是否与输入信号有关,状态机可以划分为Mealy型和Moore型状态机;根据输出是否与输入信号同步,状态机可以划分为异步和同步状态机。而在软件设计领域,状态机设计的理论俨然已经自成一体。Moore型状态机的输出只和当前状态有关,和输入无关,如果在软件设计领域设计出这种类型的状态机,则该状态机接受的事件都是无内蕴信息的事件(输入)。Mealy型状态机的输入是由当前状态和输入共同决定,对应到软件设计领域,则该状态机接收的事件含有内蕴信息,并且影响状态机的输出。显然,这种划分在软件设计领域毫无意义。虽然软件设计领域的状态机也有同步和异步的划分,但和数字电路方面的同步异步已经不同。
复制代码
  1. 二、状态机分类(后文中如无特别说明,则状态机指软件设计领域的通用有限状态机)
  2. 依据状态之间是否有包含关系,分以下两种
  3. (1)常规状态机。状态机中的所有状态是不相交的、互斥的。
  4. (2)层次状态机。状态机中的状态之间要么是互斥的,要么是真包含的,可以用树性结构来描述这些状态集,包含其它状态的状态称为枝节点,不包含其它状态的状态称为叶节点,为方便单树描述,总是设计一个状态包含所有的状态节点,称为根节点。状态机的状态只能停留在叶节点,而不能停留在枝节点,每个枝节点需要指定一个子节点为它的默认子节点,以便状态机进入枝节点的时候能够停留到叶节点。
复制代码
  1. 三、状态机实现
  2. (1)switch/case if/else方式实现。用于少量状态(3个及其以下)的时候,不需要引入专门的状态机模块。这种方式不能编写通用的状态机模块,不再多说。
  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