请教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 实在没看明白你这是干嘛用的
四个语句一样啊
@temp 不管是w,n,e,s,执行的内容是一样的啊。
@maze_exits 赋值是什么?
@cst最终赋值无非就是方向的简写,那@maze_exits直接取值不就得了。 其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式 for 循环
while循环
参考神灯教教材
总之,比zmud灵活太多了。 回复 1# hanlinjiang
其实我就想问问,在lua下 有没有什么办法可以代替 #forall的使用方式
hanlinjiang 发表于 2017-10-24 02:03 AM http://www.pkuxkx.com/forum/images/common/back.gif
完全没读懂
建议大致解释一下这几句的作用,这样才能告诉你能用什么方法处理 本帖最后由 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 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 "没有" 回复 7# creat
追问一个数组问题,现在有两个数组 a = {"north", "west", "south", "east"}另外一个b= {"west", "east"} 现在我要用a里面每一个元素分别判断在不在b里面,按照先用north 在用west 再 south最后east 这个顺序依次于b做比较 第一存在于b的元素 被赋值 比较结束。这个应该如何简单的实现。 回复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() 教主的想法确实是挺有创意的,这样速度可以快很多,看来我还得多学习,多开拓一下思路啊。
页:
[1]
2