hanlinjiang 发表于 2017-10-23 20:46:55

请教mush大神~~

请问如何在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

nrm 发表于 2017-10-23 22:58:35

实在没看明白你这是干嘛用的
四个语句一样啊
@temp 不管是w,n,e,s,执行的内容是一样的啊。
@maze_exits 赋值是什么?
@cst最终赋值无非就是方向的简写,那@maze_exits直接取值不就得了。

hanlinjiang 发表于 2017-10-24 10:03:08

其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式

nrm 发表于 2017-10-24 10:08:46

for 循环
while循环
参考神灯教教材
总之,比zmud灵活太多了。

creat 发表于 2017-10-24 11:01:35

回复 1# hanlinjiang
其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式
hanlinjiang 发表于 2017-10-24 02:03 AM http://www.pkuxkx.com/forum/images/common/back.gif


完全没读懂
建议大致解释一下这几句的作用,这样才能告诉你能用什么方法处理

hanlinjiang 发表于 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写出来,不过对数组的了解不够,经常出错,所以在此请教

creat 发表于 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 http://www.pkuxkx.com/forum/images/common/back.gif


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

temp="n"
maze_exits="south"
--初始化一个表t,表中有4个变量,对应四个方向
t={w="north",n="east",e="south",s="west"}
--遍历表t
for k,v in pairs (t)      
do
--判断maze_exits是否存在于四个方向中。如果存在则返回temp的值在表中对应的解决方案,也就是最左边的值。打印并结束过程
      if maze_exits==v
      then cst=t return print (cst)
      end
end
--如果maze_exits不存在于四个方向中打印失败信息
print "没有"

hanlinjiang 发表于 2017-11-1 15:50:03

回复 7# creat


    追问一个数组问题,现在有两个数组 a = {"north", "west", "south", "east"}另外一个b= {"west", "east"} 现在我要用a里面每一个元素分别判断在不在b里面,按照先用north 在用west 再 south最后east 这个顺序依次于b做比较 第一存在于b的元素 被赋值 比较结束。这个应该如何简单的实现。

creat 发表于 2017-11-1 19:14:58

回复creat


    追问一个数组问题,现在有两个数组 a = {"north", "west", "south", "east"}另外一 ...
hanlinjiang 发表于 2017-11-1 07:50 AM http://www.pkuxkx.com/forum/images/common/back.gif


    你这个数据结构理论上需要双循环来处理function q_2(a,b)--创建两个形参,相当于local a,b
a = {"north", "west", "south", "east"}
b= {"west", "east"}
for i=1,#a--从1开始遍历表a
do        for k=1,#b--从1开始遍历表b
        do        if b==a then return print (a) end
        end
end        end
q_2()对数据结构进行调整后function q_2_b()
local a = {"north", "west", "south", "east"}
local b,key= {west=0, east=0}
for i=1,#a
do        key=a
        if b then return print (key) end
end        end
q_2_b()

longzaitian 发表于 2017-11-1 20:54:59

教主的想法确实是挺有创意的,这样速度可以快很多,看来我还得多学习,多开拓一下思路啊。
页: [1] 2
查看完整版本: 请教mush大神~~