穿越位面而来的旅人,
欢迎你来到萨鲁世界,
我为你带来一个消息,
先知邀请你前去见他。

不去                好的
查看: 1335|回复: 0

[萨鲁传奇相关]生成任务,及其它 [复制链接]

Nustyl Vanisheri

求索者

旅行者徽记 光之洗礼

努塔瑞 发表于 2010-3-12 20:36:49 |显示全部楼层
本帖最后由 努塔瑞 于 2010-3-12 20:38 编辑

之前提过提交文档生成任务的想法,这里拿一个框架出来,看看php的[是否container向]的实现难度在哪里

[因为我并没有win32下的GUI编程经验,由瓦大定夺下]

————正文段————

【任务生成的脚本格式】

基本的考虑是节省一下(可能的长任务)按顺序写脚本和录入的麻烦。风格上模仿了lex-yacc链和makefile的写法,看下面:

基本组织(注意不是具体语法,我懒得和空白字符较劲):
%%

(任务基本信息格式我没想,大家补充吧)

%%

[脚本段标识符]
!
[脚本段内容,也就是显示出的提示信息]
!

...(自然会有多个脚本段)

%%

[脚本段标识符i] :[脚本段标识符j1] [脚本段标识符j2] ... [脚本段标识符jk]

...(这里表示脚本段的衍生关系,即段i提供的k个选项分别对应j1...jk)

%%

这样前面的脚本段顺序任意写就可以,但是按钮控件的生成会麻烦些。举个例子:

%%

(略,比如兽人与饼之类的)

%%

[scene]
!
你面前有一个兽人,一张桌子。桌子上有一块饼。
(注释:这里需要指明按钮和其label)
[button] 我抢走饼
[button] 我转身就走
!

[branch1]
!
兽人一拳秒杀你。你囧了。
!

[branch2]
!
兽人把饼吃掉。你很饿。
!

%%

beginid: scene

scene : branch1 branch2

%%

这样生成一个双分支的任务。注意关键字beginid标明了起始环节。

重申这不是最终语法。比如依赖关系的下一行可以定义语义动作,像是makefile一样(或者,语法制导)……

解析文档的瓶颈在于大任务的情况下不可能缓存很多脚本段内容,可能需要对输入流对象做点手脚(我不知道php是不是这么说。如果流指针没有setter或者索性是private而非protected就很麻烦),或是牺牲一点时间做线性查找,再或是管道一下什么的?

另外的天生瓶颈在于,由于是分支性选择的任务,不难想象很可能存在指数级的段数量增长。即使像上面的衍生关系用DAG表达,恐怕可重复利用的脚本段节点也不在多数。也许考虑引入一个链接机制,把大任务分成许多部分制作,然后用链接脚本统一链接会节省解析时间和空间。(我是在抄GNU ld吧……)

总之乱七八糟,大家批评看~
前黑袍法师
旧迦鲁纳斯遗迹考古志愿者(自居)
您需要登录后才可以回帖 登录 | 加入萨鲁

本版积分规则

Archiver|手机版|萨鲁世界2006- ( 苏ICP备15007101号 )

GMT+8, 2024-4-29 15:25 , Processed in 0.020783 second(s), 7 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001- Comsenz Inc.

返回顶部