友情提示:380元/半年,儿童学编程,就上码丁实验室。
各位小伙伴大家好:
上期我们修改了部分bug,本期继续来抓bug之旅。
今天我们要修改的bug难度比较大,在前面的程序运行过程中,我们细心的小伙伴会发现。
当敌机数量超过3架,那么前面创建的飞机就不会发射子弹了。
为了解决这个bug我也从网上查找过相关资料,但大多只有三言两语。
这里为大家做一个详细的解说。
所用的知识难度也有点大,建议初中以上的孩子去理解。如果不理解也没关系,我们将在即将开始的Python编程第二季会有相关方面知识的讲解。
我们解决这bug用的知识是列表(链表),这两个名词含义不同,但这里不做解释。
在这前我们还是把子弹的做一点修改,碰撞之后删除克隆体。
不明白的小伙伴可以参考前面的课程。
接下来我们来使用列表。
说先插入两个列表,
wzx列表用来存储敌机的x坐标。
wzy列表用来存储敌机的y坐标。
然后让子弹按顺序出现在敌机相应的位置上(敌机的坐标分别存在两个列表中)。
当子弹在相应的位置上显示过之后就删除相应的位置。
下面来看一下效果。
通过视频我们可以看到,虽然这个子弹可以从敌机上正常显示了。但是有个子弹会在没有敌机的位置上发射。
从这个子弹的发射位置我们可以猜到是(0,0)
产生的原因是一个时间差(产生坐标和删除坐标之间的时间差)
删除坐标的时间是0.02秒,而产生敌机的坐标是0.04秒。这就导致列表为空,使得读取第一个坐标错误。
这里我们的解决方式是,先判断一下,列表是否为空,如果为空我们就等待0.02秒后产生新的坐标。
代码如下:
现在我们再来看看视频:
写程序就是一个不断完善和改进的过程。看着自己的代码错误越来越少,越来越接近自己的设想。我想着大概就是编程的乐趣之一吧。
转自公众号:
高维数学