Skip to content
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;在注释中