北大侠客行MUD论坛

 找回密码
 注册
搜索
热搜: 新手 wiki 升级
查看: 13021|回复: 8

zmud462部分实现更高版本函数%ismember,%numitems功能的alias

[复制链接]
发表于 2011-5-3 14:54:52 | 显示全部楼层 |阅读模式
1。 对于string类型变量,可以用 %numwords来实现 %numitems的部分功能。 (全部功能是否能实现,我还不知道)
例子:  #var a {w|s|e|e|e|w|w|w|n|e}
#var e %numwords(@a,|)  
#say @e
结果显示 是 10

2. %ismember函数,在462中只能判断逻辑真假,无法确定某个值在string中的位置,这与高级版本中的该函数不同。 在462中实现该功能可以用自身嵌套的alias:


#var fangxiang {n|e|nw|ne|nu|nd|eu|ed|u|enter|s|w|se|sw|sd|su|wd|wu|d|out}
#var q ne;              // 给q 赋值  ne
#var fangxiangnum 1;

#alias chazhaofangxiang {#var fangxiangzhi %word(@fangxiang,@fangxiangnum,|);
#if (@fangxiangnum<=20) {#if (@fangxiangzhi!=@q) {#add fangxiangnum

1;chazhaofangxiang} {#say @fangxiangnum}} {#say 查找失败} }     这个alias 查找

q代表的 ne ,在 fangxiang 列表里面的位置。 检查之后是4。
------------------------------------------------------------------------------------------------------------

关于462中的 %pos 函数,试验结果不理想 :

#var fangxiang {n|e|nw|ne|nu|nd|eu|ed|u|enter|s|w|se|sw|sd|su|wd|wu|d|out}

#var e %pos(eu,@fangxiang)
#say @e , 结果显示17,因为 "|" 在这个函数里面也被认做一个字符,所以用算法

(17+1)/2=9,证明,这个函数把u, 当作是eu 来认了。        (这个问题还要请高手来指点,如何解决)

-----------------------------------------------------------------------------------------------

462中,没有%item 函数, 需要用一些方法绕过去。比如:

#var a {w|s|e|e|e|w|w|w|n|e}
#var b 1
#var d %numwords(@a,|)     // 这个是a中路径的步数。
#alias zou {#var c %word(@a,@b,|);
#if (@b<=@d) {#exec @c;
#wa 1000;
#add b 1;
zou} {wolf}}

打入zou,然后按回车,就能走完从扬州客栈到东大街,然后原路返回,还发个emote表情。呵呵

先试验了这几个。以后的慢慢玩。

[ 本帖最后由 hotel 于 2011-5-3 03:15 PM 编辑 ]
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-5-3 15:45:57 | 显示全部楼层
精品啊,居然用462实现list操作了
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-5-3 16:14:02 | 显示全部楼层
唯独不懂函数
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-5-3 17:01:46 | 显示全部楼层
zeze
这个不错,收藏一下
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2011-5-3 17:34:26 | 显示全部楼层
462如果能实现高级的函数,确实不错
不过,462在做朱熹的任务的时候,那个卡啊~~~~唉
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
 楼主| 发表于 2011-5-3 19:15:21 | 显示全部楼层
再补充一个高版本函数 %delnitem 在462 的实现方法:

#var a {w|s|e|e|e|w|w|w|n|e}
#var b 4 // 假设要去掉第4项
#var c %numwords(@a,|)
#math d (@b-1)*2
#math e  (@c-@b)*2-1
#var aa %left(@a,@d)
#var bb %rightback(@a,@e)
#var cc @aa@bb
#say @cc

在 462中试验过了,完成了对第4项,也就是那个 “e” 的剔除。
执行结果 : w|s|e|e|w|w|w|n|e   呵呵。
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-2-1 15:17:58 | 显示全部楼层
厉害
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-2-27 21:37:55 | 显示全部楼层
专业
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
发表于 2012-6-9 20:23:57 | 显示全部楼层
如果是{e|ne|nw|sw|ed|wu|}之类每个路径是2个字母的怎么实现啊
北大侠客行Mud(pkuxkx.net),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|北大侠客行MUD ( 京ICP备16065414号-1 )

GMT+8, 2024-11-17 02:34 AM , Processed in 0.012434 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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