北大侠客行MUD论坛

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

请教mush大神~~

[复制链接]
发表于 2017-10-23 20:46:55 | 显示全部楼层 |阅读模式
请问如何在mush脚本中 用lua实现下面的zmud格式

zmud

#if (@temp=w) {#forall (north|west|south|east) {#if (%pos(%i,@maze_exits)>0 and @cst=0) {cst=%left(%i,1)}}};
#if (@temp=n) {#forall (east|north|west|south) {#if (%pos(%i,@maze_exits)>0 and @cst=0) {cst=%left(%i,1)}}};
#if (@temp=e) {#forall (south|east|north|west) {#if (%pos(%i,@maze_exits)>0 and @cst=0) {cst=%left(%i,1)}}};
#if (@temp=s) {#forall (west|south|east|north) {#if (%pos(%i,@maze_exits)>0 and @cst=0) {cst=%left(%i,1)}}}
 用lua如何实现

北大侠客行MUD,中国最好的MUD
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-10-23 22:58:35 | 显示全部楼层
实在没看明白你这是干嘛用的
四个语句一样啊
@temp 不管是w,n,e,s,执行的内容是一样的啊。
@maze_exits 赋值是什么?
@cst最终赋值无非就是方向的简写,那@maze_exits直接取值不就得了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2017-10-24 10:03:08 | 显示全部楼层
其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-10-24 10:08:46 | 显示全部楼层
for 循环
while循环
参考神灯教教材
总之,比zmud灵活太多了。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-10-24 11:01:35 | 显示全部楼层
回复 1# hanlinjiang
其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式
hanlinjiang 发表于 2017-10-24 02:03 AM



完全没读懂
建议大致解释一下这几句的作用,这样才能告诉你能用什么方法处理
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2017-10-31 20:50:56 | 显示全部楼层
本帖最后由 hanlinjiang 于 2017-10-31 12:53 PM 编辑

回复 5# creat


    简单说是这样的
    #if (@temp=w) {#forall (north|west|south|east) 当变量temp = w的时候 遍历(north|west|south|east)这个四个元素,后面的%i 就是当使用了#forall的时候,所遍历的元素会按顺序存在%i里。
     #if (%pos(%i,@maze_exits)>0 and @cst=0 这个的意思就是说,判断@maze_exits里的值在%i里存在不 此时的%i相当于一个数组 a_table = {"north", "west", "south", "east"}.然后在mud里@maze_exits里的数字就是一个地方的出口 有一个值的时候 也有south、north、east 和 west的时候,但是最多只有 n w s e这四个方向
      cst=%left(%i,1) 这个就是赋值给cst %i里最左边的第一个值

以上这些就形成了 在迷宫里走路时候 所用的靠左行走的方式。我想把这个用lua写出来,不过对数组的了解不够,经常出错,所以在此请教
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-10-31 22:14:51 | 显示全部楼层
本帖最后由 creat 于 2017-10-31 02:26 PM 编辑
回复  creat


    简单说是这样的
    #if (@temp=w) {#forall (north|west|south|east) 当变量temp  ...
hanlinjiang 发表于 2017-10-31 12:50 PM



根据对你描述的个人理解做了一些调整
因为实际上maze_exits这个值是什么样的你并没有进行描述,这里假设maze_exits="south"

  1. temp="n"
  2. maze_exits="south"
  3. --初始化一个表t,表中有4个变量,对应四个方向
  4. t={w="north",n="east",e="south",s="west"}
  5. --遍历表t
  6. for k,v in pairs (t)        
  7. do
  8. --判断maze_exits是否存在于四个方向中。如果存在则返回temp的值在表中对应的解决方案,也就是最左边的值。打印并结束过程
  9.         if maze_exits==v
  10.         then cst=t[temp] return print (cst)
  11.         end
  12. end
  13. --如果maze_exits不存在于四个方向中打印失败信息
  14. print "没有"
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
 楼主| 发表于 2017-11-1 15:50:03 | 显示全部楼层
回复 7# creat


    追问一个数组问题,现在有两个数组 a = {"north", "west", "south", "east"}  另外一个b= {"west", "east"} 现在我要用a里面每一个元素分别判断在不在b里面,按照先用north 在用west 再 south最后east 这个顺序依次于b做比较 第一存在于b的元素 被赋值 比较结束。这个应该如何简单的实现。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-11-1 19:14:58 | 显示全部楼层
回复  creat


    追问一个数组问题,现在有两个数组 a = {"north", "west", "south", "east"}  另外一 ...
hanlinjiang 发表于 2017-11-1 07:50 AM



    你这个数据结构理论上需要双循环来处理
  1. function q_2(a,b)--创建两个形参,相当于local a,b
  2. a = {"north", "west", "south", "east"}
  3. b= {"west", "east"}
  4. for i=1,#a--从1开始遍历表a
  5. do        for k=1,#b--从1开始遍历表b
  6.         do        if b[k]==a[i] then return print (a[i]) end
  7.         end
  8. end        end
  9. q_2()
复制代码
对数据结构进行调整后
  1. function q_2_b()
  2. local a = {"north", "west", "south", "east"}
  3. local b,key= {west=0, east=0}
  4. for i=1,#a
  5. do        key=a[i]
  6.         if b[key] then return print (key) end
  7. end        end
  8. q_2_b()
复制代码
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
发表于 2017-11-1 20:54:59 | 显示全部楼层
教主的想法确实是挺有创意的,这样速度可以快很多,看来我还得多学习,多开拓一下思路啊。
北大侠客行Mud(pkuxkx.com),最好的中文Mud游戏!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 09:58 AM , Processed in 0.010011 second(s), 14 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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