2.1.3 用列表管理图片块
游戏场景已经准备好了,接下来要考虑创建游戏角色。对于拼图游戏来说,游戏角色就是玩家需要操纵的图片块,准确来说,每一个图片块都对应着一个游戏角色。在弹跳小球游戏中,我们学习了如何创建游戏角色,以及如何对多个游戏角色统一管理,现在是时候将之前学到的知识运用一下了!
还记得吗?可以通过Actor()构造方法来创建一个角色,只需要将角色的图片文件名作为参数传递给Actor()方法即可。例如创建第一个图片块角色的代码可以这样写:
为了管理9个图片块,需要定义一个列表,将创建的图片块角色统统加入其中。代码如下所示:
上述代码中首先定义了一个图片块列表pics,然后调用append()方法将刚才创建的图片块角色pic加入列表。
那么问题来了,总共有9张图片,难道要一张一张地创建角色并加入列表吗?当然不用亲自动手,重复的操作交给循环语句来处理就好了。由于知道循环的确切次数,可以使用计数循环来完成创建角色的操作,在这里循环的次数为8次。
慢着,是不是弄错了,一共9张图片,难道循环次数不是9次吗?没错,只有8次。根据游戏规则,需要移动图片块的位置,倘若将全部的9张图片都加入游戏场景,那么图片块就没移动的空间了,因此需要预留一个空白的区域用来移动图片块。
原来如此。那么还有一个问题就是,每个图片文件的名字都不一样,怎么在循环语句中通过不同的文件名来创建相应的图片块角色呢?这个问题不难解决。请仔细看看图2.1中展示的图片文件名,你会发现所有文件名的前面都是一串相同的字符“puzzle_pic”,只是后面接了个不同的数字(按照从0到8的顺序依次编号)。其实这样来命名就是为了便于循环操作的。
我们可以将图片文件的名字分为两部分,前面是字符串“puzzle_pic”,后面是数字,而数字的编号恰好可以和循环变量的值对应起来。于是可以编写如下代码来自动创建所有图片块角色:
需要注意的是,由于循环变量i的类型是整型,而图片文件名的类型是字符型,为了将i的值转化为图片文件名中的字符,首先需要调用Python内置的str()函数进行类型转换,然后通过字符串连接操作符“+”将文件名的前后两部分连接起来,从而形成完整的图片文件名。
接着将完整的图片文件名传入Actor()方法,便可创建相应的图片块角色。角色创建之后随即将其加入图片块列表。
此外,上述代码还为每个图片块角色定义了一个属性index,并将循环变量的值赋予该属性。那么这个属性有什么作用呢?它实际上记录了图片块的编号,具体作用后面再进行解释。