Appearance
GQ变量与基本语法
在整个计算过程中,我们需要创建无数的变量,在合适的时机对他们进行各种计算,然后将结果传递给api,使其完成游戏内的各种操作!
GQ变量是什么
GQ变量类似其他语言的变量,不考虑深层运行原理,可以理解为名字与内容的集合,变量名就是名字,变量值的集合!
GQ变量
(如果您有GQ自定义命令的经验,请不要将此变量与GQ自定义命令的变量混淆,此变量更接近GQ自定义命令的全局变量而不是实体变量,并且GQ引擎中没有实体变量的概念)
变量由变量名与变量值,这个类似游戏中的记分板,记分项对应分数
变量名由数字([0-9]),大写英文字母([A-Z]),小写英文字母([a-z])和下划线(_)组成,但是不可以以数字作为第一个字符
aaa
abc
abc123
_abcd
如上都是合法的,但
123abcd是非法的
变量值只能是GQ数据类型
当我们创建一个变量aaa的值为100时:aaa = 100;
创建数组:abc = [1,2,3,4];
GQ引擎的语句需要以;结尾
创建变量
变量是最基础的节点,用于储存信息,首先需要创建:name = “gqcraft”;
(由于通篇都是创建的示例,就不再过多演示了)
调用变量
创建后的变量可以在后续程序中调用,但是要注意作用域(后面会详细说明)
调用变量只需要使用变量名,就可以调用变量了,假设:a = 1;b = 2;
那么:
a = b;
//此时a为2
c = a + b;
//此时c就为4
临时变量与永久变量
默认创建的变量不会被保存,游戏关闭后则会销毁,但是可以通过关键词save来将其设为永久变量(但不会立即保存),设置一个永久变量bbb的值为10:save bbb = 10;
修改永久变量:save bbb = 10 + aaa;
如果不添加save关键词则会被作为临时变量处理
某些即时数据(例如商城交易)需要立即保存或是想要立刻对之前变动的变量进行保存,那么需要关键词savenow来设置或保存:savenow ccc = aaa + bbb;
空值与删除
若变量未被声明则会返回null,若是想要删除变量也可以将变量设为null
小提示:将已确定的数据在程序开始部分声明好,易于维护!
//在此编写你的命令引擎脚本
//auth:user_gqcraft
//测试用脚本
a = 1;
b = 2;
……
for (ag.i in range(10)){
print(a);
}
基本语法说明
按照顺序这个应该在变量之前,但是为了能够更加清晰的认识语法,所以将变量提前了,接下来我们系统说明下语法
GQ引擎的语法类似javascript,但是也汲取了其他语言的优点,每一条语句后需要使用;结尾,只有;结尾才记为语句结束,否则可能出错,语法内的多余空格会被忽略,所以如下是等价的:
a = 1;
a=1;
a = 1;
a=1;
赋值符号
在GQ引擎中同样使用=作为赋值符号,意为将右侧值赋给左侧变量,例如将“hello”赋给test:test = “hello”;
savenow test_string = “hello world”;
new_array = [1,2,3,4];
foods = {"bread":10,"count":100,"name":"面包"};
语句结束
GQ引擎以;结尾,若未使用;结尾则认为语句未结束,会继续向后关联解析,除了开头的例子,如下语法也是允许的:
save a
=
1;
变量作用域
变量的作用域为整个游戏,所以变量可以在多个程序(命令块)之间同步信息,但临时变量会在游戏结束时销毁,必须重新赋值
被{}所包裹的程序无法直接调用外层变量(但可调用外部执行体,因为执行体是全局的)
如果想要调用外层变量,对于执行体来说直接传递参数,但对于if以及for则需要使用局部变量,他与变量有着几乎一致的规则,但是命名方式不同,局部变量必须使用ag作为开始,然后通过.连接,比如ag.i当我们在使用循环命令时,需要一个等差的变化量,一般是i,由于这个值只在循环内使用所以创建时必须使用局部变量,假设name = “gq”;age = 24;:
for (ag.i in range(10))(ag.name = name,ag.age = age){
cmd("gq","say 我是" + ag.name + “我今年“ + ag.age + “岁”)
}
//cmd命令是一个内置的执行体,他的语法需要传递两个参数,示例中第一个参数仅用于演示,无实际意义
(具体if与for传递参数会在其章节详细说明)
基本运算
| 运算符 | 含义 | 备注 |
| + | 加法运算 | |
| - | 减法运算 | |
| * | 乘法运算 | |
| / | 除法运算 | |
| % | 取模运算 | |
| () | 提高优先级 | |
| ** | 指数运算 | |
| ++ | 自增运算 | |
| -- | 自减运算 | |
| += | 加法运算并赋值 | |
| -= | 减法运算并赋值 | |
| *= | 乘法运算并赋值 | |
| /= | 除法运算并赋值 | |
| == | 判断两边是否相等,返还布尔值,如相等为true,反之为false | |
| != | 判断两边是否不相等,返还布尔值,如不相等为true,反之为false | |
| > | 判断左边是否大于右边,返还布尔值,如大于为true,反之为false | |
| < | 判断左边是否小于右边,返还布尔值,如小于为true,反之为false | |
| >= | 判断左边是否大于等于右边,返还布尔值,如大于为true,反之为false | |
| <= | 判断左边是否小于等于右边,返还布尔值,如小于为true,反之为false | |
| ==== | ====================以下为逻辑运算====================== | ==== |
| && | 逻辑运算”与“,判断两侧是否同时为true,若左侧为true则返还右侧布尔值 | |
| || | 逻辑运算”或“,判断两侧是否有一侧为真,若左侧为false则返还右侧布尔值 | |
| ! | 逻辑运算”非“,取反 |
注释在源码不会被执行,但是推荐使用多行注释,单行注释被压缩时可能出现异常
GQ引擎注释与javascript相似//为单行注释,/**/为多行注释:
//作者:gqcraft
a = 1;
/*这一段不会执行
这一段也是
a = 2;
包括这一段*/
a的值不会被改变,因为a = 2;在注释中