发信人: tomup(笑望天)
整理人: littlewing(2001-05-26 09:40:21), 站内信件
|
<图片>
怎么把 MUD 信息显示在 zMUD 的状态栏和状态窗口中
作者:东方英雄(Hero)
<图片>简介
<图片>就象玩 RPG 游戏一样, 游戏屏幕上总可以直接看到你的当前状态,例如气
血(HP),?攻击力, 防御力等等, 如果在玩 MUD 的时候也能随时看到你的各种状态
不是很令人兴奋么?
zMUD 中其实也提供了这些功能, 而且显示内容可以随便你自己定义。 大家先看
看我自己使用 zMUD 时显示的状态栏和状态窗口的信息:
状态栏显示出我的几项基本信息:
<图片>?
右边的状态窗口则显示了我的几乎全部信息: ?
<图片>实地操作
下面我们以气血(HP), 内力和道行(DX)三样为例, 来说明把信息加入状态栏和窗
口显示的方法。
1. 操作状态栏和状态窗口的方法
zMUD 界面中屏幕下部位于输入框上面的空白条就是状态栏, 通过 Windows 菜单
, 选择 status
则可以打开状态窗口。 要往里面加显示的内容, 只须用鼠标右键单击状态栏或状
态窗口即可。
2. 定义变量
首先, 为了显示这三个值, 我们必须为它们定义几个个变量。因为今后变量会用
到很多, 为了
统一区分, 定义变量时我们应该把它分类表示, 有关显示到状态栏和窗口的变量
名, 我们一律
以 SL 为开头, 这样它们的定义如下:
?气血相关变量的定义:
变量名 含义 SLqixue 百分比值 SLcureHP 当前气血值 SLmaxHP 气血最大值
?内力相关变量的定义:
变量名 含义 SLneilileft 内力左边值 SLneiliright 内力右边值
?道行相关变量的定义:
变量名 含义 SLdaoxing 道行值
按下 zMUD 顶部的 Variables 安钮, 选择 New 安钮, 然后在 Varable 栏输入变
量名, Value
和 Default 可以不管它。 分别把所有变量定义好。
3. 把显示内容加入状态栏和状态窗口
鼠标右键单击状态栏, 弹出 define status 对话框, 在 status line 栏中输入
:
HP: @SLqixue%?DX: @SLdaoxing?
在 status window 框中输入:
气血: @CureHP / @MaxHP 内力: @SLneilileft / @SLneiliright牋
当前实际道行: @SLdaoxing?
最后点 "OK" 按钮, 就会看到状态栏和状态窗口中显示出我们定义的内容, 只是
此时没有具体正
确的值显示出来。
4. 从 MUD 屏幕中抓取相关数字
为了适时地在状态窗口中显示我们需要的信息, 这里需要遇到 zMUD 中最重要的
Triggers 功能。
这个功能可以把需要的信息从 MUD 屏幕上抓下来。
按下 zMUD 顶部的 Triggers 按钮, 选择 new, 然后在 Class 栏中填入“状态信
息”, 这样我们
就建立了一个关于状态信息的 Triggers 类(今后可能你会再加入更多的其 Trig
gers, 所以用类的
概念把它们分开存放, 容易查找)。 然后基于这个类, 分别在 Pattern 和 Comm
and 中填入以下内
容: ?
Pattern道行:(%s)(%x)燙ommandSLdaoxing=%2?
按下 "OK" 按钮, 然后用同样的方法, 基于“状态信息”类, 分别填入下面的内
容:
Pattern 气血:(%s)(%d)/(%s)(%d)
Command SLcureHP=%2; SLmaxHP=%4; #math SLqixue (%2*100)/(%4)
Pattern 内力:(%s)(%d)(%s)/(%s)(%d)
Command SLneilileft=%2; SLneiliright=%5?
5. 启动状态信息监测
至此为止, 我们的工作可以算完成了, 剩下来的只需要实际在 MUD 中检验一下。
当您 login
进入西游记后, 首先按下 zMUD 顶部的 Triggers 按钮, 在 stored triggers 栏
中选择“状态
信息”类, 然后按下 Enable Class 按钮, 最后按下 OK 按钮。
在输入框中输入 MUD 命令 hp , 我们马上看到状态栏和状态窗口中的内容变了!
变得和实际值
完全一样。
牋?恭喜!这一节 zMUD 教程顺利结束。
<图片>
如何进行自动问候?
作者:东方英雄(Hero)
当一位player联线进入时,或者当某人走到你身边时,你可以自动向他进行问候
,岂非很方便?下面我们来讲讲如何对此进行设计。
1.定义目标变量
首先,我们需要确定自动问候的条件,即是联线进入时,还是走过来时?或者其
他情况时?下面我们以联线进入时为例。首先需要设置一个变量来存放目标的姓
名,所以,按下zMUD顶部的“Variables”按钮,选择“New”,在“Variable”
中输入变量名字,我们把它取为 WH_ChineseName。
2.获得目标信息
当某人联线进入时,我们需要把他的信息从屏幕上抓下来。这就需要设计一个tr
igger。按下zMUD顶部的“Triggers”按钮,选择“New”,然后在“Class”中建
立一个新的类“问候”。最后添入下面内容,按下“ok”按钮。
pattern:(%x)连线进入这个世界。command:WH_ChineseName=%1;say @WH_Chines
eName, 来啦?欢迎欢迎!
到此,我们只需激活(Enable)“问候”类,当我们呆在客栈时,一旦有人联线进
入,自动问候就开始工作了。
上面可以看出,这是一种开放型的问候,你和目标讲话别人都看得见,如果你希
望只有目标看到,就只能用 tell 或 whisper 命令了。tell 或 whisper 需要目
标的英文 ID,上面的例子中只抓到目标的名字,很明显,它是无法做到这一点的
。所以我们还需要考虑怎么得到目标的英文 ID。
3.如何从中文名字得到英文 ID
从手工得角度可以知道,我们可以通过 who -l 或 finger 来找到目标的英文 I
D,而对于同一地方的人,我们可以用命令“id here”看到当前在场的人或物的
中文名称和对应ID,如:
> id here
在这个房间中, 生物及物品的(英文)名称如下 :
东方英雄 = hero
小影 = yin
木头木脑 = nonee
南城客栈留言板 = board
千里眼 = bigeye, youchai, chai
店小二 = xiao er, xiaoer, xiao, waiter, er
对于机器人而言,它们都是在模拟人的行为,我们这里要用的方法也不例外。首
先我们先为 ID 本身定义一个变量 WH_IdName,过程和前面一样,不再重复。现
在接着说,已经明白的是,我们可以用某个具体的名字用 trigger 来抓他相应的
英文 ID, 如我们用以下内容可以得到东方英雄的 ID:
pattern: 东方英雄(%s)= (%x)
command: WH_IdName=%2
这样我们就可以用 "tell @WH_IdName hello!" 来对目标问候了。但是,面临的
问题没有这么简单,因为事先你并不知道你的对象是谁,而是随机的任何一个人
。所以我们需要用到 zMUD 提供的更高级的 triggers 功能:Variable trigger
s,即变量triggers,顾名思义,我们通过该功能可以动态改变我们的triggers。
这正是我们所需要的!如果动态地改变上面“东方英雄”这一名字,就万事大吉
了。
我们先把上面的 pattern/command 改为:
pattern:(@WH_ChineseName)(%s)= (%x)command:WH_IdName=%3;tell @WH_IdNam
e hello! Welcome
然后,还需要修改前面我们的简单问候trigger(前面第2点)为:
pattern:(%x)连线进入这个世界。command:WH_ChineseName=%1;id here
注意,这两个 triggers 都归于同一个“问候”类中,这样到此为止,我们只须
激活该类(Enable Class),我们的完整的自动问候就会开始工作了。
4.总结
举一反三,通过这个例子,我们学会一种基本的和一种高级的获取屏幕信息的方
法。只要我们能从屏幕上获得需要的信息,就可以设计出更多,更复杂的机器人
,同时提高加强我们的思维和解决问题的能力,不再简单地整天打来打去。
<图片>
自动卖花的设计
作者:东方英雄(Hero)
有人要我写个卖花的设计,专营卖花的呆头呆脑(None)可不要骂我哦!:-) 这里
提供的是设计方法为主,希望大家从中受益。
1. 决定自动卖花的工作流程
卖花给别人,需要对象。基于前面“自动问候”的设计,我们已经知道怎么获得
别人的名字和 ID,这样为我们向他要钱和收钱后把花给他打下基础了。但是我们
还是需要确定整个过程:
暤北鹑艘竽懵蚧ㄊ保愀嫠咚?10 silver 一朵;我们可以要求别人用 buy fl
ower from your_name 来做,这样得到第一个trigger: "xxx想向你购买「flowe
r」。",这个 trigger 可以让我们得到对方的名字和 ID。 曋烙腥宋誓懵蚧ê
螅嫠咚?0 silver 一朵”,并向对方致谢。 暥苑桨亚愫螅玫降诙?
trigger: "XXX给你一些银子。",用这个 trigger 重新得到对方的名字和 ID,
因为此时可能是另一个人把钱给你呢,给花的对象可不能搞错。 暟鸦ǜ苑剑
⑾蚨苑降老病?
OK, 以上我们整理出了程序的流程,下面就是具体实现了。
2. 具体编写实现方法
第一步:我们把这回的设计重新取个类的名字“卖花”,开始设计对方向你购买
花的 trigger。首先增加一个变量 WH_Class, 用来在相同的 Variable trigger
s 处识别不同用处。需要注意:此时我们用到在“自动问候”中的设计概念,不
清楚可参考回头一下:
pattern:(%x)想向你购买「flower」。command:WH_Class=1;WH_ChineseName=%1
;id here
第二步: 编写对方把钱给你后,把花给对方,并恭喜对方:
pattern:(%x)给你一些银子。command:WH_Class=2;WH_ChineseName=%1;id here
第三步: 用相同的 Variable trigger 对以上情况的结果进行不同处理:
pattern:(@WH_ChineseName)(%s)= (%x)command:#if (@WH_Class=1) {WH_IdNam
e=%3;say 10 silver 一朵。;thank @WH_IDName} {WH_IdName=%3;give flower
to @WH_IDName;gongxi @WH_IDName}
至此,一个基本的“自动卖花”设计基本完成,我们只要准备好足够的花和钱袋
,然后激活“卖花”这个类(Enable class),你的卖花机器就会开始工作啦!但
聪明的玩家可以发现里面还有至少两个漏洞,哪里呢?(*xixi) 什么都包办可不
行了,大家充分发挥自己的潜能吧 :P
一点提示:没有花怎么办?(应该向对方道歉,并退回给你的钱);上面第三步无法
判别对方具体给你多少 silver, 怎么办? 请充分考虑如果手工操作你会如何处理
这个 case ?
<图片>
zMUD 中编程的基本概念建立(1)
作者:东方英雄(Hero)
想要较好地把 zMUD 使用起来,事实上的确需要一定的编程基础,不过要求不高
,一般的 Basic 概念即可。最重要的,是我们能对用计算机模拟我们思考解决问
题的方法有一个简单的认识。
在前几篇文章中,已经介绍了 zMUD 编程的几个基本例子,其中包括了变量的定
义、信息的抓取以及变量的赋值等几个方面的内容,但是其中并未谈及细节的道
理(为什么要这样用)。我的想法这些答案的详细说明其实都包含在 zMUD 的帮助
中,实际上只要去查看它的 function 和 command 的帮助清单就行了(虽然不是
中文,略感不便)。在下面只是把变量的简单道理讲一下,方便更多 zMUD 的新手
。
为了更加易懂快速上手,文章中的理论概念基本上我都使用实际的例子解释,即
使道理一时想不通,也不怕,知道怎么去做就行了。
1. 为什么要使用变量
变量的引入,是因为我们在 MUD 中接触到的信息基本上都是不断在变化的,为了
实时处理这些信息,我们通过变量的应用,可以把很多编程的概念溶入 mud pla
y 中,使我们能够通过简单的界面操作从而自动、精确地完成 MUD 中一些复杂、
繁琐的动作。
例如,前面“自动卖花”的设计中,我们使用了一个变量 WH_ChineseName 来存
储对方的中文姓名,这样在后面我们才能再通过 WH_ChineseName 进一步获得买
花对象的英文 ID, 并存储到变量 WH_IdName 中,最后才可能最终使用 give 命
令把花递到对方的手上。如果没有变量的引入,这个过程是完成不了的。
2. 怎么定义变量
变量包括两个组成部分: 变量名和变量值。一个变量的使用必须首先定义过变量
名才行。变量名可以随便自己取,通过 zMUD 顶部按钮“Variable”来定义是简
单的方法。例如我们前面文章中定义的 WH_ChineseName, WH_IdName, WH_Class
等等, 其名称上都是自己随意定的。定义一个新的变量时,我们一定要明确定义
该变量的目的:即用它来做什么? 例如我们很明确 WH_ChineseName 是用来存储
对方中文名字的,而 WH_IdName 是用来存储对方英文 ID 的等等。
变量使用的一个忠告是:尽量能从变量名上反映出该变量的含义。如果我们把 W
H_ChineseName 改为 abcd, 可想而知我们无法从 abcd 看出它用来做什么用,而
WH_ChineseName 却一目了然。
变量使用的另一个忠告是:尽量把变量从变量名上分类。因为可能我们会用到很
多变量,最后混杂在一起时,只会给自己找麻烦。就象 WH_ChineseName 和 WH_
IdName 一样,字面上我们已经知道他们是用于 WH (问候) 的,编写其他类设计
时,就不会搞混它们。 ?
3. 怎么给变量赋值
zMUD 中,变量可以直接赋值,并且变量不分字串、数字变量等概念,你给它们什
么它们就是什么。
例如: WH_ChineseName=东方英雄,WH_IdName=hero, WH_Class=1。 ?
在从triggers中获取信息时,变量可以参数形式赋值。
例如: 屏幕上显示“东方英雄想向你购买「flower」”时,如果定义: ?
pattern: (%x)想向你购买「(%x)」。
command: WH_ChineseName=%1;WH_Object=%2
则表示 把 pattern 中抓取的第一个参数赋值给 WH_ChineseName,把第二个参数
赋给 WH_Object。 这样“东方英雄”字串便自动放到了变量 WH_ChineseName 中
,“flower”字串则放到了变量 WH_Object 中。这里 pattern 中的第一个(%x)
表示抓取字串“想向你购买”前面的任意字符串作为第一个参数,而第二个(%x)
表示抓取字串“想向你购买”后面的任意字符串作为第二个参数。command 中的
%1 表示拿出第一个参数,同样 %2, %3... 则顺序表示拿出第二、第三...个参
数。
对于有关 %x, %1.. 等以及其他更多参数符的说明,请自己参考 zMUD 的 help,
这里不多讲。
4. 怎么把变量使用起来
在“自动卖花”的设计中有下面一个 triggers:
pattern:(@WH_ChineseName)(%s)= (%x)command:#if (@WH_Class=1) {WH_IdNam
e=%3;say 10 silver 一朵。;thank @WH_IDName} {WH_IdName=%3;give flower
to @WH_IDName;gongxi @WH_IDName}
我们可以看到,变量使用的时候,只要不是赋值,变量名前面就应该加上符号“
@”,这样, zMUD 就会自动使用变量对应的值了。
5. 总结
到这里,应该可以明白,利用基本的编程思想,基于 zMUD 为我们提供的 Varia
ble 和 Triggers 功能,我们的确可以在 zMUD 中针对 mud play 的具体要求来
编写一些小程序,而这些程序的编写并不想想象中那样复杂,只是需要我们更多
地了解 zMUD 到底为我们提供了什么手段来实现,我们要做的其实只是把编程思
想溶入到这些手段中即可。
好了,如果大家有更多探讨的兴趣,可以研究一下 zMUD 的帮助,可能的话把心
得寄给我,在此给大家共享你的成果。
<图片>
---- _..._
. '. Http://www.tomup.com
,_ / }
,_\'--, \ _.''~/ E-mail:[email protected]
\'--,_'{_,} -( [email protected]
'.'-.'\;--,___.'_ [email protected]
'._'/ |_ _{@} Oicq:2382228 _
/ ' |-';/ {@} _
/ \ / | \>{@}>{@}_
/ '--;_ _ {@} >_Y{@}
_\ '\ {@}\Y/_{@} Y/
/ |'-.___. / \Y/\|{@}Y/\|//
^^^^^'--'------''--'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
世上本无世外桃源,如果要说有,那就是在你的心里。 |
|