> LeekScript 教程
你正心满意足地敲着自己的 AI。代码一行行滚过,一个个逻辑清晰的变量名和函数名(比如 sfatyu_2)接连登场,生活多么美好…… 突然!你按下了“保存”键,编译器开始检查你的代码。它死死地盯着你,目光灼灼…… 然后,悲剧发生了!编辑器底部冒出一条(甚至好几条!)刺眼的红线。这些古怪又玄奥的咒语到底是什么意思?
这篇指南将为你揭开真相,让你也成为懂行的人。
是谁忘了声明自己的变量?回头看看 变量 和 函数详解 这两篇教程,也许会有帮助。
这里的变量 enemy 没有声明,必须先用关键字 var 创建它。 修正:var enemy = getNearestEnemy();
那这一个呢? !未知函数示例
嗯,作者不过是一只抱着键盘的猴子,没发现自己用的是 getNeerest(根本不存在),而不是就在上方声明的 getNearest。
不能用一个已经声明过的变量名再声明一次变量。

修正(很丑):var moi2 = 1 更好的修正是给变量起一个真正符合其用途的名字。
注意:全局变量的名字也可能引发这个错误。
如果你把神圣的分号写成了逗号,同样会撞上这个错误: 
修正:var enemy = getNearestEnemy();
这是因为变量可以在一行内连续声明: var variable1 = 1, variable2 = 2; 是完全合法的写法(见 变量)。
和上一个错误一样,不能重复使用已经用过的函数名。

修正(非常丑):function getNearest2() {
想拿全局变量的名字当参数名,是吧?要是碰上我哪个没那么好说话的同事,你知道会有什么下场吗?

修正:
正如错误信息所说,所示的那一行少了一个括号。 !错误的 if
这里第 19 行代码应该是 if (not isAlive(enemy)) {
函数调用没有闭合??这就是你的下场! !应为一个值
修正:moveToward(enemy);
参数?那是啥?看来得回头复习一下 函数详解 教程了!
这里的函数 moveToward 接受 1 到 2 个参数,而我们一个都没给。编译器当然要敲我们的手指了。 修正:moveToward(enemy); 或 moveToward(enemy, mp);,其中 mp 是一个数字。
注意,如果给函数传了太多参数,也会得到同样的错误(例如:moveToward(enemy, mp, truc);)。
代码块是什么? 就是被 { } 包起来的一段代码。这里用 { 打开了一个代码块,却没有把它闭合。 !代码块未闭合
这里在 if 结束后少了 }。于是编译器指出了当前代码块的结尾(这里是文件末尾),告诉我们忘了闭合所有代码块。 修正:
这种情况和上一个正好相反:我们用 } 闭合了一个代码块,却没有先打开它…… !没有需要闭合的代码块
修正:if (not isAlive(enemy)) {
再去翻翻 函数详解 教程吧:即使不需要给函数传参数,也至少要写上括号 ()。

修正:function getNearest() {
和上面一样,声明函数时,别忘了在 { 之前闭合括号。
修正:getNearest() {
去 循环 教程转一圈?do-while 要求在代码块结尾写上 while。

修正:} while(true);
什么?没人用 do while?


这两种情况都是忘了给变量起名字。去 变量 教程转一圈也没什么坏处。
修正: var maVariable = 1; global maVariable = "Variable";
else(或 else if)前面必须始终有一个 if(见 条件)。我们这儿可是文明人!没有“如果”,哪来的“否则”?不然可是要被敲手指的。

修正:
当你没有遵守某种表达式的语法时,就会得到这个错误。这里是一个三元表达式。如果你还不了解三元表达式:它是把 if {} else {} 写在一行里的写法(见 条件 和 操作数)。

修正:(getAliveEnemies() > 0) ? getNearestEnemy() : getEnemies()[0];
什么?这段代码毫无用处?你竟敢这么说!我有挑剔过你的代码吗?
跟你说了,是分号!不完全是句号,也不完全是逗号,而是两者各占一点。 无效字符这个错误会毫不留情地砸到你头上。

修正:var enemy = getNearestEnemy();

不应出现?那还用说!你到底是怎么写成这样的?? 不能把运算符(运算符)当变量来用。
LeekScript 只允许在主代码块中声明函数,不能在其他代码块里声明函数。


修正:
有一种特殊情况可以在函数里声明另一个函数,去看看 函数详解 教程吧。
和上一个一样,只不过换成了全局变量!全局变量只能在主代码块中声明,不能在其他代码块里声明。不能在 if 里,不能在循环里,不能在函数里。就这样,句号……哦不,分号。

修正:
会用 include 很好,用对了更好!这里我们试图在主代码块以外的地方引入 AI,编译器正用一双吓人的眼睛盯着我们……

修正:
注意:使用 Pilow 的 AI 却没能赢下战斗,作者概不负责。
这个错误的描述已经把自己解释得很清楚了:break 只能在循环里使用(见 循环)

修正:
注意: 这段代码的效果和用 if 完全一样,因为循环在第一轮就被打断了。不过这样写还是很可笑,不是吗?
和上面那个错误一模一样,只不过你用的是 continue 而不是 break。
注意: 用下面这段代码,可以让几位 Pilow 流泪,顺便给服务器机房加加温:
在“又长又能自我解释的编译错误”这个非常小众的比赛里,冠军就是它了。 如果你遇到这个错误,说明你的代码里有一条语句放在了永远不会被执行的位置。 比如在下面的例子里,我们把 debug 放在了 break 语句之后,而 break 会直接跳出循环!

修正:
正如它的描述所说,return 或 continue 也可能引发这个错误。

Impossible de charger les données du jeu.
Vérifiez votre connexion et réessayez.