创建自己的函数

创建自己的函数

> 教程

创建函数

我们已经用过好几个标准函数(setWeapon、moveToward 等)。你也可以用下面的语法,创建属于自己的自定义函数

关键字 return 是可选的,用来让函数返回一个值。在上面的例子中,函数接收参数 xy,并返回它们的和:x + y

创建函数 canFinish(enemy)

我们之前写的判断能否“斩杀”敌人的代码相当长,也不方便复用,所以要把它放进一个函数里。

我们来创建一个自定义函数 canFinish(enemy),它接收一个敌人,并返回一个布尔值,表示能不能把它斩杀。

把斩杀判断的代码复制到一个函数中,写法如下:

注意:记得指明计算针对的是哪把武器,否则计算结果不对。另外,如果你的行动点足够对敌人开足够多枪、把它打死,函数就返回 true;反之,如果敌人能活下来,就返回 false(这时你或许可以改做别的事)。

现在,我们可以在主代码中使用函数 canFinish,把代码写得简单得多:

你知道吗?把多处重复的同一段代码移进一个函数里,这种做法叫作提取函数。

创建函数 getClosestCellToUseWeapon(enemy)

你可能已经发现,要使用机关枪这把武器(以及之后的激光),你必须和敌人处在同一条直线上。

所以你得走到一个能使用武器的格子上,而不是像用手枪时那样,只是朝敌人靠近。

为此可以使用标准函数 getCellsToUseWeapon,它会返回所有能对目标使用武器的格子。接下来就要从中挑出一个:最近的那个!

所以我们来创建函数 getClosestCellToUseWeapon,用 for in 循环找出离我们最近的格子:

用它来代替原来用 moveToward 的移动:

如果你已经得心应手,还可以自己编写这些函数:

你还可以:

想更清楚地看到地形和格子,可以在战斗中按 T 键开启战术模式。

在接下来的章节里,我们会讲一些更难的内容。所以不妨花点时间,多摆弄摆弄你的函数和前面学过的知识——光凭这些,就足以让你在排行榜上往上爬了!

❓ 测验

要返回一个数的平方,下面哪个函数写得对?

function carre(x) { return x * x } function carre(x) { x * x } function carre() { return x * x } fonction carre(x) { return x * x }

哪个函数能算出列表中的最大值?

function maximum(liste) { var maxi = -99999 for (var e in liste) { if (e > maxi) { maxi = e } } return maxi } function maximum(liste) { var maxi = 99999 for (var e in liste) { if (e < maxi) { maxi = e } } return maxi } function maximum(liste) { var maxi = 99999 for (var e in liste) { if (e > maxi) { maxi = e } } return maxi } function maximum(liste) { var maxi = -99999 for (var e in liste) { if (e < maxi) { maxi = e } } return maxi }

完整 AI