趣学Python游戏编程
上QQ阅读APP看书,第一时间看更新

1.6.2 使用列表

那么有没有更便捷的方法来统一处理多个角色的操作呢?当然有。Python中提供了组合数据类型,目的就是集中管理多个对象,其中最常用的当属列表类型List。既可以动态地向列表中添加对象,也可以随时从列表中删除对象,而随着对象的增加或减少,列表的长度也会自动改变。还可以将循环语句与列表的操作结合起来,从而实现对列表中所有对象的统一操作。

为了生成多个小球,首先定一个空列表,命名为balls。同时定义一个常量NUM,用来表示小球的数量。代码如下:

其次通过for循环语句自动创建每个小球角色,接着为其设置坐标和速度值,最后将其加入列表balls中。代码如下所示:

提示:

上述代码所使用的循环叫作计数循环,循环的总次数由range()函数决定(在这里是10),同时使用循环变量i来记录当前的次数。

循环每运行一次都会创建一个小球角色,这是通过调用Actor()构造方法来实现的。可以看到,Actor方法的参数可以仅仅是一个图片文件名,而角色的位置可以在角色创建后再进行设置。

为了让小球的运动呈现不同的轨迹,在上述代码中为每个小球角色设置的坐标和速度都不相同,这是通过循环变量i的不同取值来实现的。而在每一次循环操作的最后,程序都会调用列表的append()方法,将创建的小球加入列表中。当整个循环语句执行完毕,所有的小球便全部加入列表中。

接下来在update()函数中对所有小球统一进行逻辑更新操作,而这也可以借助for循环语句来实现。代码如下所示:

提示:

在上述代码中所使用的循环叫作遍历循环,意思就是说,循环语句会对列表中的每个对象依次进行操作。

对于balls列表中保存的每一个小球角色,程序首先改变其坐标值,然后执行反弹操作。游戏最终呈现的效果便是所有的小球都在窗口内不停地弹跳。

最后在draw()函数中对所有小球统一进行图像绘制操作,代码如下所示:

可以看到,这里同样采用了遍历循环。调用balls列表中每个小球的draw()方法来完成图像的绘制。

至此,已经完成弹跳小球游戏,最终的游戏效果如图1.11所示。试一试加入更多的小球吧!

图1.11 弹跳小球游戏的最终效果