ltblue
发表于 2015-4-21 13:22:48
回复 5# jarlyyn
我有点明白你所谓状态机的概念了
游戏中,每个模块(任务,打坐,等待,渡河),都有各自的过程,各自的状态
你的mush里的触发,只做变量上的调整,不直接对游戏进行操作,甚至不通过lua来对游戏进行直接操作,而是通过修改各种变量(也就是状态),让lua根据当前处于的各种不同状态来进行相应的操作。
是不是这么个意思?
但这样我不理解,在某个状态下,总有一个监控状态的lua在运行,然后根据不同状态来调用不同的函数(或者说模块)吧?而这个lua是一直运行的吗?根据什么触发的呢?难道是.*?又或者是个计时器?
传统来说,zmud的思路,是一环扣一环,触发-命令-触发,这么来的
你的做法是触发-改变量-检查变量-操作。检查变量是怎么做到的?我没想通
至于你说的那个什么库啊什么的......我根本不是程序员,lua是对着手册写的......
jarlyyn
发表于 2015-4-21 13:26:06
回复jarlyyn
我有点明白你所谓状态机的概念了
游戏中,每个模块(任务,打坐,等待,渡河),都有 ...
ltblue 发表于 2015-4-21 01:22 PM http://pkuxkx.com/forum/images/common/back.gif
异步是个大坑,慎入。
以mud来说,一般是这样。
维护一个大的数组,表明了mud中所有的状态。包括血/经验/任务等。
绝大部分的触发器做的就是更新这个数组。
然后通过一个出发来出发检查状态。我的机器里是busy test,检查是否忙。
当不忙的情况下,检查所有状态,并进行相应的操作。
其实人脑玩游戏,做的也是这么个流程。
jarlyyn
发表于 2015-4-21 13:36:34
回复jarlyyn
但是,我这么写,好像要想在等待的时候打坐,就很麻烦:又要保证能打坐,又要保证能随 ...
ltblue 发表于 2015-4-21 01:03 PM http://pkuxkx.com/forum/images/common/back.gif
实际上这没有什么野路子不也路子的问题。程序这玩意是跳跳大路通罗马的,不同的框架,模型都有很多。
其实上你要能够归纳一下。
不能乘船,不能跨江,能力不足之类,归跟到底是错误。就是看你怎么去做相应的错误处理了。
以我的代码为例
https://github.com/jarlyyn/helllua/blob/master/mods/walk.mod
我当年的所有代码都是以do_动作名(参数,成功后续,失败后续)来做的。
walk["stepfail"] 这个函数就是用来处理意外状况的。
6年前的代码了,当年也是个野路子,很多写法结构可能不够先进。
但整体框架还是没啥大问题,可以自洽的。
ltblue
发表于 2015-4-21 13:47:53
回复 12# jarlyyn
问一下,所谓的”异步“是什么概念?我有”异步“的倾向吗?
jarlyyn
发表于 2015-4-21 13:50:37
回复jarlyyn
问一下,所谓的”异步“是什么概念?我有”异步“的倾向吗?
ltblue 发表于 2015-4-21 01:47 PM http://pkuxkx.com/forum/images/common/back.gif
协程也好,wait也好,其实都是异步的。
就mud机器人本身来说,其实本质也是异步的……
异步的概念就是,代码并一定是按顺序执行完的,而是等到某个情况下再继续执行下一步的程序。
这样的话可能有多个任务同时执行,并被挂起的。
cappuccino
发表于 2015-4-21 13:52:32
有船不坐,你想扮Cool啊?
就打开打坐类(#t+的那种),然后同时打坐,同时等待这句
艄公们把踏脚板收了起来,长篙一点,渡船向江心驶去。
这句话的思想其实就是在等船中间插入了一个打坐模块。。wait里你也可以做的。。
jarlyyn
发表于 2015-4-21 14:07:33
另外提醒一句。
如果用状态机模式做的机器人,在pkuxkx应该有政策上的问题。
我并不在这里玩,写机器人的乐趣也远大于玩游戏的乐趣。所以这点对我没影响。
ltblue
发表于 2015-4-21 14:18:50
回复 15# jarlyyn
如果是这样的话,异步不是必须得做吗?
因为我其实必须同时做很多事情啊
我渡河的时候,必须得看有没有杀手来,不可能渡河的时候只渡河,其他不管,那就完蛋了......
这么说的话,异步这个坑非走不可啊
就算是所谓”状态机“,你也得同时兼顾很多状态,渡河模块处于什么状态,杀人模块处于什么状态,饮食情况处于什么状态,身上的钱够不够等等
jarlyyn
发表于 2015-4-21 14:21:57
回复jarlyyn
如果是这样的话,异步不是必须得做吗?
因为我其实必须同时做很多事情啊
我渡河的时 ...
ltblue 发表于 2015-4-21 02:18 PM http://pkuxkx.com/forum/images/common/back.gif
这些和异步是没关系的。
异步是要同时。比如你会边walk边大家么?边打坐边买东西么……
不会。
所有的意外都是一个错误。
然后由意外处理程序进行处理。
cancel当前活动,重新判断状态机。
是否处于战斗状态也是状态机的一部分。
ltblue
发表于 2015-4-21 14:23:51
回复 16# cappuccino
wait里怎么做呢?
举例子:
我想在等船的时候打坐,船一到就上船,船没到,打坐一次结束继续下一次打坐
我必须同时等待两个信息:打坐结束和船到了
如果用触发,我可以分别有两个”类“触发,一个是打坐的,一个是等船的
打坐的负责专心打坐,等船的负责改”船到没到“的变量,如果
打坐结束的时候,船到了=0,则继续打坐
打坐结束的时候,船到了=1,则关闭打坐模块,进船
大体就这么个情况吧,也可以用halt打坐直接进船
如果用lua的wait,我怎么wait?用
船到了|打坐结束吗?两个用或者等?然后如果是一个就这么做,否则那么做?
那这两个模块不就到一起了吗?打坐模块无法独立出来。
又或者wait有其他用法?
请教,多谢
页:
1
[2]
3
4
5
6
7
8
9
10
11