头号玩家 | 冠军Pony:我有特别的代码调试技巧

发布于 2019年12月27日

因为游戏主体需要在网页上直接运行的,不能像以往常规的用调试工具或print等调试方法。而写代码出错是难免的,现在给初次接触游戏的同学分享一些个人的人调试技巧。

接下来看这样的一个小案例,

在关卡:https://codecombat.163.com/play/level/kithgard-brawl

中有一个同学,在运行以下代码时遇到了死循环的问题,不知道怎么解。

接下来我们尝试用「say」来举例该问题的调试方法。

(在这里我们不谈他的代码的好坏,仅针对他的思路调试出问题)

用法一、看程序是否运行到某处

上面有3个while,那到底是在哪生了死循环呢?我们先在最下面的while里加一句,hero.say('已经运行到这里了!')。结果发现,英雄一直并未说出这句话。说明,下面的内容,程序根本没有运行到。

接下来我们在第二个while里写了一句hero.say('已经运行到这里了!')。这里我们发现,英雄一直在反复说这句话。说明这里出现了问题!!!

用法二、看程序中某些你关心的变量内容

既然我们知道了,是第2个while产生的死循环。那么,很明显,我们应该关心indx的值的变化。

我们只需要hero.say(indx),就很明显的发现indx被卡在了固定的一个数字,并没有按我们的想的往下+1。

说明逻辑出现了问题,这时我们再看,发现indx+ = 1写在了enemyhealth < enemies[indx].health条件下,反过来当条件不成单时就不会再加1。这就是一直无法跳出的原因!!知道了原因,再来改就很简单了。如下:

以上就是用say来调试一个小BUG的的案例,感觉say还是挺管用的。有时候,我们不希望英雄说话(因为会停下来),这时用pet也是一样的。

三、一些有趣而实用的另类方法

say除了以上用法,我本人还会用来做一些查询,比如看看敌人的type等。最有趣的,我会用来分析英雄的伤害,举例一个我的自己的案例。

运行结果如下,这样就能很清楚的看出每个技能的伤害差别实际有多少了。所以我当时得出的结论是,这个大块头的普攻伤害比有的技能还高!!!!我还不如多普攻一些,在某些条件下才放技能好了。

以下就是特约作者Pony给大家带来的分享,希望对初学者有帮助。!