贤知有您 发表于 2012-12-6 14:00:08

ERA新增变量定义和使用指南

ERA新增变量定义和使用指南

编程的兄弟都知道,基本所有编程都可以定义自己喜欢的变量名称。但WOG中,ERM的变量名却都是固定好的,诸如 v变量y变量e变量等,在一定程度上也使得变量个数使用有限制。
ERA中允许自由定义一个变量名,来存储整型变量或字符变量类型的值。(小数类型暂时没研究出来)
ERM帮助内容:
SN:W #1/$1; 使用变量 #1
#1 - 变量的名字
$1 - 变量的值 (可以是直接的值,也可以是一个变量而引用该变量的值)
注:这种变量名并不能像普通WOG变量那样直接使用,需要借助一个额外正常变量来读取(变量类型要相同)。


请看例子:ZVSE
!?PI;
!!SN:W^WOG-1^/1234567890;         [定义一个变量名为“WOG-1”的整型变量(类似于V变量类型)并赋值]
!!SN:W^WOG-2^/^兽哥是帅锅^;       [定义一个变量名为“WOG-2”的字符变量并赋值(类似于Z变量,注意后面必须带^符号)]
!!SN:W^WOG-1^/?y1 W^WOG-2^/?z1;   
!!IF:M^WOG-1 = %Y1   WOG-2 = %Z1^;[显示信息]

注意:测试发现并不能定义一个类似于 E的小数类型变量存储小数类型。
!!SN:W^WOG-3^/3.1415;[会导致错误]

另外,你应该注意到变量名使用^^,跟WOG中字符串使用一样,可以在字符串里面应用“把变量作为字符串变量的一部分”,即可以在里面使用:%Y1 %V1 %Z1 之类(反映该变量的实际值)作为字符串的一部分。

再来一个例子:ZVSE
!?PI;
!!VRv1:S12345;
!!VRv2:S67890;
!!VRy1:S1;
!!SN:W^ERA-1^/v1 W^ERA-2^/v2;
!!SN:W^ERA-%Y1^/?v3;
!!VRy1:+1;                         [改变Y1的值]
!!SN:W^ERA-%Y1^/?v4;               [变量名也跟着变动]
!!IF:M^ERA-1 = %V3   ERA-2 = %V4^; [将显示“ERA-1 = 12345   WOG-2 = 67890”]


使用UN:W#1;可以清空变量。
如:!!SN:W^WOG-1^ W^WOG-2^; 将清除变量。
此时,若再次调用这些变量名的值,将得到一个默认的值(数字类型值为0,字符类型为空)
使用SN:W定义一个变量,主要是使用起来记忆方便。一个有意义的字符串总比一个数字更容易记牢。
最后你是否马上要提问:是不是可以使用中文字符作为变量名?答案是肯定的。ZVSE
!?PI;                              
!!SN:W^兽哥^/^帅到掉渣^;
!!SN:W^兽哥^/?z1;
!!IF:M^兽哥的意义=%Z1^;         [显示信息 “兽哥的意义=帅到掉渣”]


-------------------------------------------------------------------------------------------------------
下面讲解一下ERA中更为强大的变量数组定义方法。


不明白数组是什么没有关系,首先得记住数组相当于一连串相同类型变量的集合。
你看,WOG中y变量(包括正负)一共是200个(y-1~y100)。
你可以把这些都当成是y的一个数组,这个数组拥有200个元素,-100到100代表了每个元素的索引号。
你是否灵光一闪,注意到上面 SN:W 定义变量时,若用 SN:W^ERA-%Y1^..这些方式,加一个Y1循环,不也就定义了一串变量了嘛!
正解,这是个好方法,也相当于定义了一个“ERA-”的数组。


ERA中另外有一个专门定义数组的语法,
请看帮助:
SN:M#1/$1/$2/$3;
在#1的数组编号位置创建一个拥有$1个元素的数组(变量类型由$2 决定)。
解释一下参数。
#1=位置编号,ERA中用一个数字编号代表一个数组的名。
$1 - 数组元素,其实就是数组元素的个数。
$2 - 变量类型(0:整型数值类型,1:字符串文本类型),要定义的变量类型,你姑且可以看作是v变量和z变量类型。
$3 - 保存到游戏存档中 (1: 是, 0: 否),数组属于额外的变量,需要定义是否同时保存到游戏存档中,否则读档后失效。

而读取和设置数组各元素的值则使用下面语法:
SN:M#1/$1/$2;
#1 = 位置编号
$1 - 数组中的元素索引号 (从0开始),注意是从0开始
$2 - 数组元素的值


帮助中的例子比较好理解:ZVSE
!?PI;                              [创建了一个数值类型的数组]
!!SN:M1/3/0/1;                     [在位置1上创建一组拥有3元素的数值型数组]
!!SN:M1/0/111 M1/1/222 M1/2/333;   [设置各元素的值{111, 222, 333}]
!!SN:M1/1/?y5;                     [读取数组索引号是1的元素的值]
!!IF:M^%Y5^;                     [显示信息 "222"]

!?PI;            [创建一个字符串类型的数组]
!!SN:M0/4/1/1;   [在位置0上创建4元素的数组,字符串类型。保存在游戏存档中]
!!SN:M0/2/^Hello^; [储存字符串'Hello'于数组索引2中]
!!SN:M0/3/^world^; [储存字符串'world'于数组索引3中]
!!SN:M0/2/?z1;   [把数组中索引为2的值读取到z1中]
!!SN:M0/3/?z2;   [把数组中索引为3的值读取到z2中]
!!IF:M^%Z1 %Z2^;   [显示信息'Hello world']
提示:经测试,第一参数位置编号从0-2147483647均可以用(这也说明,ERA中已经不必担心变量个数限制了,尽情用吧)


你应该会提问,这么多位置编号,记不住已经使用了哪些怎样办?
ERA中可以用 -1 位置编号来获取一个空闲的编号(未被使用),该编号存储于V1变量中。你只需要用一个较大的V变量再存储V1的值,就可供长期使用了。
如帮助中提到的例子:
!!SN:M-1/0/0/0;    [选择未使用的位置作为临时的储存器](数值类型,未定义元素个数)
!!VRy1:S1;
!!VRy1:R6;             [生成随机数字 (1~7)]
!!SN:Mv1/y1;      [生成一个随机大小的数组](重新定义元素个数为y1)
!!VRy1:-1;            
!!SN:Mv1/y1/777;   [设置最后索引的值为777]


由于数组需消耗较多内存,所以必须先定义数组(告诉系统要应用哪个位置编号),方可读写数组数据,否则返回错误提示“数组并不存在”。
SN:W则与之不同,在没有定义的情况下,仍可返回一个默认值。


-----------------------------------------------------------------------------------
最后举一个小的例子,定义一个数组记录战斗所有堆栈的标志。希望大家有更深刻的理解。

ZVSE
!?PI;
!!SN:M-1/42/0/0 W^StackFL.Array^/v1; [首先定义一个42元素的数组,空闲编号位置存于v1中,再使用变量名StackFL.Array记录v1的数值]

!?FU111111;               [记录当前所有堆栈的标志值]
!!SN:W^StackFL.Array^/?y50; [获得记录堆栈标志的数组编号位置]#0
!!VRy2:S0;                  [从堆栈0开始]#1
!!BMy2:F?y3;                [获得该堆栈的标志]#2
!!SN:My50/y2/y3;            [设置数组y50的第y2元素值为y3(相当于记录堆栈标志)]
!!VRy2:+1;                  [用于循环堆栈号]
!!SN&y2<42:G2;            [从本函数程序语句第三行即 #2开始循环]*(ERA新命令,满足条件下从某句开始循环执行语句,注意行数从0开始)

!?BR&v997=1;[回合数1时触发]
!!FU111111:P;
!!SN:W^StackFL.Array^/?y50;
!!SN:My50/0/?y3;            [读取数组y50第0元素值到y3中]
!!IF:M^第一堆栈编号的标志为: %Y3^;

[ 本帖最后由 贤知有您 于 2012-12-6 17:45 编辑 ]

兽哥哥 发表于 2012-12-6 14:32:52

;kaun; 这个脚本好,值得推荐

贤知有您 发表于 2012-12-6 14:34:17

天啊,居然发帖途中论坛中断链接,只发了一半,而且混乱得很。
重新收拾,真够坑爹了。
;dao;

[ 本帖最后由 贤知有您 于 2012-12-6 14:35 编辑 ]

贤知有您 发表于 2012-12-6 14:37:30

回复 2# 的帖子

兽哥看中的是图片。
脚本是次要的,关键是把ERA中关于新增的变量使用方法推荐给大家。
现在没必要担心变量限制的问题(除了W变量,当然可以用数组来替代,不过有点麻烦)
采用自定义的变量名,方便易记,冲突的机会也更小。

renlinfeng 发表于 2012-12-6 15:17:23

;taoh;007果然高产帝

eva2000as 发表于 2012-12-6 15:26:13

意思就是,只要我们自己约定好,就不用担心变量重复的问题=_,=
由于变量名可以自行定义(C哟~帕斯卡哟~),因此ERM编写自由度可以说是成几何数增加吧。以后只要关心“别人用过什么”,而不用担心“别人用剩下什么”了。

EMP震荡波 发表于 2012-12-6 16:57:37

我还以为SN语句就是用作声音支持的,从来都不看它的说明。被坑了。

mayicomein 发表于 2012-12-6 17:12:37

这种贴我只有默默支持的份。精神上支持你。。。

无心云 发表于 2012-12-6 18:28:33

我也是来围观图片的,顺便鄙视一下某人

songfx 发表于 2012-12-6 18:45:33

建议一级精华,版主们自行定夺。

沧海一粟 发表于 2012-12-6 23:27:10

进来学习ERA。。。
SN真是恐怖,由ERM的1重功力直接上升到ERA的10重功力。。。
如果整形变量的赋值可以中文输入就最好了,我就把心云老大的所有黑道小兄弟给一锅端过来,大鸟、二娃、三牛、四狗。。。;gaxing; ;gaxing; ;gaxing;

dadds 发表于 2012-12-7 01:25:01

意思是说ERA不用为变量不够发愁了?那真是碉堡了

贤知有您 发表于 2012-12-7 11:58:23

回复 11# 的帖子

我说沧大.
整型的肯定是要数字型啦, 字符型就能收集你的大鸟、二娃、三牛、四狗.
;oweojs;
页: [1]
查看完整版本: ERA新增变量定义和使用指南

捐赠