内置函数

内置函数

> LeekScript 教程

现在我们来聊聊 LeekScript 的函数!

函数是编程中绕不开的一环。 它能把一系列动作记下来,让你随时想用就用。

Leek Wars 中,函数可以分为两类:

目前我们只讲内置函数。

这是什么?

内置函数是 LeekScript 提供给你的函数,你可以通过它们获取战斗中的各种信息。你也要靠它们来控制韭葱的行动。

函数的语法很好认:

nomDeLaFonction(parametres);

在介绍编辑器的那一章里,你已经在默认 AI 中见过它们了。复习一下:

// 四个非常有用的函数 var enemy = getNearestEnemy(); setWeapon(WEAPON_PISTOL); moveToward(enemy); useWeapon(enemy);

getNearestEnemysetWeaponmoveTowarduseWeaponLeekScript 提供给你的四个函数。

稍加理解,往往不查文档也能明白一个函数有什么用。 函数名通常一目了然,直接说明了它的用途。

返回值

函数的“返回值”是什么? 并不是每个函数都有,但函数可以返回一条信息。

下面这个例子就是如此:

var enemy = getNearestEnemy();

如果你认真看了上一章,就知道这里创建了一个变量“enemy”,同时用等号“=”给它赋了一个值。

那么赋给它的到底是什么呢? 这就轮到 getNearestEnemy 函数登场了。这个函数会返回最近的敌人的 ID。

所以,当你的韭葱执行这段代码时,会调用 getNearestEnemy 函数。 这个函数把最近的那根韭葱的 ID 返回给它,然后这个 ID 被存进变量“enemy”。

如果你好奇,可以加上一句 debug

var enemy = getNearestEnemy(); debug(enemy);

在 1v1 的测试战斗中运行这段代码,你应该会看到显示数字 1 或 0。 战斗中韭葱的 ID 不过就是一些数字。 在一场有 4 根韭葱的战斗中,它们会被编号为 0 到 3。

你也看到了,debug 也是 LeekScript 的内置函数。 你可能想问:为什么要把变量“enemy”放在括号里?这就说到了。

参数

括号里的东西叫作参数。 这些小家伙可是很有用的:函数执行什么动作,取决于它的参数。

回到 debug 函数,它会在战斗日志中显示一条消息。 而这条消息的内容由你通过参数来指定。

如果你把数值 5 作为参数传给 debug,消息就是“5”。 如果你把文本“我爱喝韭葱汤”传给 debug,消息就是“我爱喝韭葱汤”。

下面看看这几个函数分别做了什么:

var enemy = getNearestEnemy(); setWeapon(WEAPON_PISTOL); moveToward(enemy); useWeapon(enemy);

setWeapon 让你的韭葱装备一把武器。 要告诉它装备哪把武器,就得把武器的 ID 作为参数传进去。这里传的是“WEAPON_PISTOL”,这是一个常量,代表武器手枪。这个常量对应数字 37,也就是手枪的 ID。你也可以把 WEAPON_PISTOL 写成 37,效果完全一样。不过使用常量能让代码更好懂,也省得你去记每把武器、每块芯片的 ID。

moveToward 让你的韭葱朝另一根韭葱前进。 为此,这个函数需要目标韭葱的 ID。 这时就该把变量“enemy”拿出来了。别忘了,它现在存着离你最近的对手的 ID。 把这个变量传给 moveToward,你就会朝那根可恶的韭葱走过去。

useWeapon,你的韭葱会尝试向一根韭葱开火。同样,你要告诉这个函数你想朝敌人开火。

既无返回值,也无参数

有些函数既不返回值,也不需要参数。 但它们并不因此就没用!

比如 pause 函数。它能在你观看战斗时让战斗暂停。 (它不会影响战斗本身,效果和你在观战时手动点击“暂停”按钮或按下键盘上的“P”键一样。) 这个函数也不需要参数,所以你没法改变它的行为。

不过我们再回到返回值上来。看看这段代码:

var enemy = getNearestEnemy(); moveToward(enemy);

如果我告诉你 moveToward 其实有返回值呢? 函数的返回值并不是非拿不可。 moveToward 返回消耗掉的移动点数量。 如果你离对手只有两格,这个函数只会让你前进一格。 一旦贴到对手身边,你就没法再朝它前进了,除非踩到它头上。 这种情况下,你的移动点不会全部用完。如果你只用了一点,函数就会返回整数“1”。

例如:

var enemy = getNearestEnemy(); var mpUtilise = moveToward(enemy); debug("我前进了 " + mpUtilise + " 格!");

所以,如果你对这条信息不感兴趣,就不必去接收它。 getNearestEnemy 也是这样,不过说实话,调用这个函数却不接收它的返回值,基本上毫无意义。

总结

内置函数对你会很有用,真的非常有用。可以说,没有它们,你的韭葱什么也干不了。

这个概念极其重要,到了讲自定义函数的那一章,你就会体会到它的全部威力。

别忘了去看看LeekScript 教程中关于文档的附录。 你会在那里学会如何阅读文档,文档里完整列出了 Leek Wars 为你提供的所有函数。