在《Pygame实现记忆拼图游戏7》中,实现了游戏启动后,显示70个图案背面的功能。游戏启动后,会为玩家分组显示70个图案,玩家要在很短的时间内尽量多地记住相同图案的位置,因为之后显示的图案又会遮住,如图1所示。
图1 游戏启动界面
在startGameAnimation()函数中实现上述功能。
1 将70个图案进行随机分组
从图1中可以看出,游戏启动后,每次显示8个图案,最后一次显示剩下的6个图案。因此,首先对70个图案进行随机分组,分成9个组,其中前八个组每组8个图案,最后一组6个图案。将70个图案进行随机分组主要分为两个步骤:第一步是先将图案进行随机排列,第二步是对随机排列的图案进行分组。
1.1 将70个图案随机排列
每个图案用其所在的列数和行数表示,行数和列数组成一个元组,每个元组代码一个图案。在startGameAnimation()函数中,将70个图案随机排列的代码如图2所示。
图2 将70个图案随机排列的代码
其中,第50行代码定义了一个空列表boxes,该列表中将包含随机排列后的图案行列数;第51-53行代码通过两个for循环创建了70个图案的行列数,并将其添加到boxes中;最后第54行代码通过random.shuffle()使boxes中图案随机排列。使用调试代码可以看到随机后的boxes值,如图3所示。
图3 随机后的boxes值
其中,boxes中由70个元组组成,每个元组的第一个元素表示图案的列数,第二个元素表示图案的行数。此时的boxes已经进行了随机化。
1.2 对随机排列的图案进行分组
在得到了70个随机排列的图案行列数之后,对其进行分组,通过自定义函数splitIntoGroupsOf()实现。该函数的代码如图4所示。
图4 splitIntoGroupsOf()函数的代码
其中,splitIntoGroupsOf()的第一个参数表示每组包含的图案数,第二个参数表示要分组的图案列表;第57行代码定义的空列表result用于保存分组之后的图案行列数;第58-59行代码通过for循环对列表进行分组,并把每一组的图案都添加到result中。
在startGameAnimation()函数中调用splitIntoGroupsOf()的代码如图5所示。
图5 调用splitIntoGroupsOf()的代码
其中,8表示每组8个图案,boxes是图2中生成的图案列表,变量boxGroups保存了分组之后的图案,通过调试代码可以显示boxGroups的值,如图6所示。
图6 boxGroups的值
其中,boxGroups被分成了9个组,每一行为一个组中包含的图案,一共8个,最后一组包含6个图案。对比图3可以看出,图6中显示的值就是图3中值的分组。