新元的无名杀扩展教程(一)技能_7数据类型及分析,运算
前言
在前面的几期,我们已经了解诸多一般技能和特殊技能的格式,并知道了inherit继承标签的用法。我们在前面几期已经了解了在skill里面许多标签的代表的含义,现在我们来讲讲语法。
数据类型

一.基本数据类型
1.Boolean 布尔
布尔,它用于逻辑判断。有两种:真,即true,和假,即false。
false和true与0和1对应着。
2.Number 数字
数字分为两种,一种为整数,一种浮点数。
整数不用提,可以是整数,负数,0
浮点数,可以理解为小数。但是,我们知道,电脑只能识别二进制的数字,如果是整数,那没有问题,如果是浮点数就会产生误差。假设我们有一个十进制数字1.1,我们现在用二进制转换器来实验它的结果:

我们再把它转化回来

所以,我们不能想当然地认为0.1+0.1就等于0.2,对于计算机来说,它就是个假命题。(虽然很诡异,要我们承认0.2≠0.2!)
我们也可以用科学记数法表示一个数字,比如,1e2就是1×10²,1e-2就是0.01(1×10^-2)。
此外,还有一些特殊的数字
Number.MAX_VALUE,这是最大的数字。
Number.MIN_VALUE,这是最接近0的数字。
Number.POSITIVE_INFINITY或者Infinity,这是无穷大
Number.NEGATIVE_INFINITY或者-Infinity,这是负无穷大
Number.NaN或者NaN,这是一个非数字。两个非数字并不相等。
3.String字符串
字符串,用""或''将字符引起来就叫字符串。
如"yiji"就是一个字符串,"你好呀"就是一个字符串。
一个字符串从一个"或'开始,直到下一个"或'结束。单引号双引号要统一。
要在一个字符串中用"或'请在前面加\比如"\"yiji\" "或者"\'yiji\' "
4.null 空
按字面意思理解就好,即空对象。
5.undefined 未定义
按字面意思理解就好,未定义的都叫undefined。比如你引用了一个不存在的技能,它的值就是undefined
以上为基本数据类型,除此之外,还有BigInt和Symbol数据类型,在这里不做介绍。

二.复杂数据类型
1.Object对象
我们把外面是{},里面是key:value形式,其中每个key:value以,相连,这就叫做object。
比如
{
key0:value0,
key1:value1,
key2:value2
}
这就叫一个object。
可以这么理解object对象。value是一个数据,而key是为它起的名字。
要注意的是,key是一个string字符串,但是可以省略引号。
调出其中的value值方法是:对象名[key值]
比如,我将以上对象命名为object1,如果我要调出其中的value1值,我们就写成:
object1["key1"]
创建新的key:value对的方法为:对象名[创建的key值]=创建的value值
比如我们为object加一个key3:value3对,就写成:
object["key3"]=value3
这里的""双引号不能省略,以上的value3表示任意数据
2.Array数组
我们把外面是[],里面是任意一种数据的,叫做Array,比如
[0,
"三国杀",
true,
{
skill:"yiji"
},
[],
function(){}]
数据分项数,第一项就为0,第二项就为"三国杀",以此类推,等等
同样的,要调出其中任意一项就是:数组名[项数-1]
比如,我们将数组命名为Array1,要调出其中的第一项:
Array1[0]
数组也有一个属性,length,即它的总项数
还是这个Array,Array1.length就等于6
3.Function函数
function是一个放代码的地方,有需要时就会用到它。
可以这样创建一个函数
function(){}
大括号内就是填的你要放的代码。
我们要调用一个函数,就这样写:函数名()
比如我将以上函数命名为myFunction,
我要用时,就写:
myFunction()
小括号中,可以根据函数本身填上各种数据。比如:
myFunction(11,true,"你好")
这些填上的数据会交给其相应函数处理。
这些填上的数据的集合在处理时叫做arguments,其中第一项11为arguments[0],第二项true为arguments[1],"你好"为arguments[2],以此类推。
比如名为myFunction的存的代码是,小括号内填的内容不变:
game.print(arguments[0])
调用myFunction,在游戏的控制台那里可以看见,有一个数字就为11。
以上为对象类数据类型,除此之外,还有RegExp和Date等等,也不做介绍

skill数据
已经知道数据类型了,我们可以对skill的数据类型进行分析
任何技能都是一个object,而其key都是string,这都没什么好说的,重要的是value值。
trigger
trigger的value是一个object,其下的key为player,source,global等等,player,source,global等等的value值为array,array内每一项都为string
即:
trigger:{
player:["",""],
global:["",""],
source:["",""]
}
标签类
特殊技能标签的value都是布尔,
即:
forced:true,
limited:true,
juexingji:true,
zhuanhuanji:true,
zhuSkill:true,
dutySkill:true,
charlotte:true,
动画标签中,skillAnimation的value值是一个boolean布尔,animationColor的value值是一个string字符串
即
skillAnimation:true,
animationColor:"",
在标记标签中mark的value值是一个布尔boolean,marktext的value值是一个string字符串,intro的value值是一个object对象,其下的name的value值为string字符串,其下的content的value值为string字符串(或者function函数)
即
mark:true,
marktext:"",
intro:{
name:"",
content:"limited"
},
衍生技标签derivation,其value值是array数组,这个array的项皆为string字符串;技能组标签group,其value值是array数组,这个array的项皆为string字符串
即
derivation:["",""],
group:["",""],
继承标签inherit,其value值是string字符串
即
inherit:"",
子技能标签subSkill的value值是一个object,其下可以有任意个key,这些key对应的value值也都是object。
函数类
filter,init,content这些的value值都为function。我们已经讲过filter的arguments和init的arguments,这里不再多述。我们要说一下content。
content的function是无名杀独特写法,其有着一些独特的语法,这也是我们要了解的重点。
在content那里,我们不需要arguments,因为它的arguments中的项太多,发动技能的时候,就帮我们处理好了;在filter和init那里我们需要arguments,或者至少为arguments的项起名字。
player属性数据
我们讲一下player的属性,这里指的player就是某一场上角色
player是一个对象,叫元素对象(element)。
player.name1即角色的id,它是一个string字符串
player.identity即身份,它是一个string字符串
player.hp即体力值,显然的,它是一个number数字
player.maxHp即体力上限,同样的,它是一个number数字
player.hujia即护甲值,也是一个number数字
player.skills即技能,它是一个array,array的每一项都是技能的id,技能的id当然是string字符串
player.storage即储存空间,它是一个object。
计算
1.数字运算(结果为number)
四则运算算法不用多提,我们来说一下其运算符号:
加号:+
减号:-
乘号:*
除号:/
此外还有一个取余符号,它专门算余数。比如1/2的余数是1,进行运算后,表达式的值就为1
那么如何用表达式写呢?
写成这样
1%2
这就是取1/2的余数
此外,对于+1和-1,我们也有简便的写法,比如我们想让1加1,自然可以写
1+1
还可以写成
1++
对应的也有
1--
2.关系运算(结果为boolean)
>,<,==,===
>大于符号,它的运算结果是一个boolean布尔
比如
3>5
为假,它结果就是false
再如
4>3
为真,它的结果就是true
<小于同理
==等于
两边相等就为true,否则为false,比如
3==3
为true
此外,number数字和string字符串也可以相等,前提是string字符串里也为数字,比如
1=='1'
为真
特别的:
''==0
为真
number数字也可以和boolean布尔相等,比如
1==true
0==false
为真
string字符串也可以和boolean相等,比如
'1'==true
'0'==false
''==false
为真
特殊的:
undefined==null
为真
===严格等于
===严格等于,等式两边不仅值要一样,而且数据类型一样才为真。
1==='1'
为假
===严格等于比==等于更快,因为==还要进行数据转换。
3.逻辑运算(结果为boolean)
||,&&,!
||或,两边有一真为真,两边皆假为假。
&&且,两边有一假为假,两边皆真为真。
!非,可以使一个布尔值变为相反的
!!双重否定,可以将一个数据变为对应的布尔值。