点击上方“菜鸟学Python”,选择“星标”公众号
重磅干货,第一时间送达
今年的国庆长假非常长,不知不觉已经余额为零!朋友圈很多晒出游的照片,聚会的照片,吃吃喝喝真舒服,不过也该收收心啦。
编程需要不断的练习再练习,拳不离手曲不离口,代码几天不写手就生了。这不小编赶紧撸起来,用Python整一个好玩的拼图游戏。
我们以中秋国庆佳节为背景的Python拼图小游戏,利用搜集好的中秋国庆系列图片作为背景,进行拼图,映衬节日的氛围,整体的展示画面如下图所示,其中朱红色为空白区域,通过对空白区域的移动,完成对图片的还原。
01
游戏所需要的库
1).需要用到的库
为了实现这一功能,小编查询了大量的资料,对游戏进行了人性化的定制,可以根据自己的喜好设置游戏难度(选择拼图的阶数),选择游戏的背景,只需要改动参数初始化便可以实现。这个游戏所需要的库有哪些呢,小编对在这里列举,方便大家使用。
random -----随机数
pygame -----python游戏库
copy -----复制的库
PIL -----图像处理的库
os -----系统库
2).游戏的设计思路
绘制画布
使用的pygame中的pygame.display.set_mode((1200, 600))函数设置背景板,根据需求计算背景板大小。
通过计算划分界面个部分的位置,拼图区域与原图区域。
绘图实现
通过pygame.mouse.get_pos() 获取鼠标位置进行交互。
使用设计好的拼图算法(后面有详细介绍)进行位置检测,确定是否交换位置。
使用pygame.display.flip()刷新界面。
个性化设计
玩家可根据自己需求输入num为游戏难度(拼图阶数)。
玩家可根据喜好设置系列背景,程序会从指定文件夹随机选择。
02
编程实现
针对上面的游戏设计,小编将从游戏页面设计、图片加载设计、算法实现等三个方面进行程序讲解。
1).游戏页面设计
对于游戏的页面设计,包含了整体的页面设计和部分的页面设计,小编通过pygame中的函数将页面大小设计为1200*600,旨在将页面分为两个部分,左半部分为拼图区域,右半部分展示原图(下图为4阶拼图)。
2).代码的设计
首先我们要初始化图片的路径,然后输入阶层的数目,将图片进行绘制。
对于拼图难度个性化设计,通过参数num获取输入的阶数。对于图片系列个性化设计,只需要将path路径给为自己准备的图片即可。
接着我们准备地图的初始化:
其中init_Map 表示初始化的地图 之后会被打乱
end_map 是正确分布的地图
地图初始化中,将地图绘制为 num* num 的集合(num为阶数),通过list添加为两层数据使得数组为num*num的大小,最后一个数值代表空白区域。
对于拼图部分和原图部分进行分别绘制,根据获取的地图位置,绘制相对应部分的图片。首先计算出每个块的像素值大小pix_fenge = pic_size /pic_fenge,根据地图数组中的元素位置(x,y)选取原图中对应位置进行绘制,对于空白块,不进行绘制。
3).图片加载设计
小编这里选择的是中秋国庆主题(如果需要的话,大家可以替换为任意主题,比如女朋友的照片等),采用随机选取图片的方式,读取实现存放好的照片,如下图所示。
有了图片素材,接下来就是对素材的预处理了:
先使用os.walk对目标文件夹进行遍历,获取图片序列fileses;
并使用randint随机选取一张图片左为背景图片;
然后通过PIL库读取图像并resize为600*600(注意:某些图像尺寸相差太大,resize之后会变得很变扭,大家视情况而定);
最后保存为临时文件temp.jpg供pyganme调用;
04).算法实现
对于拼图游戏的关键,在于其中的算法,主要思想是检测被点击的图像的位置,根据位置判断被点击的图像是否位于空白图像四周,如果位于,则进行图片互换,否则不进行,具体实现如下所示。
这里地图数组的初始化使用拼图的方式,随机进行1000次的移动,作为初始化的init_map,如果使用随机打乱数组,则有可能无法恢复。
03.
视频演示
对于整个游戏的设计基本介绍完毕了,只需要通过主函数将各部分组合就好了,下面一起来看一些视频演示效果:
大家如果想要源代码进行学习玩耍的话,只需要在下面的公众号后台回复"拼图"即可。
有热门推荐????1. 卧槽!没想到,用Python竟能做五仁月饼2. 超全Python IDE武器库大总结,优缺点一目了然!
3. Python 30道高频面试题及详细解答
3. 精华技巧,学会这几招可以假装是Python高手
4. 哇!用Python读取CVS文件竟然有5招,据说90%的人只会2招
5. 童年听的龟兔赛跑的故事,我终于用100行Python实现了!
6. Python 初学者进阶的九大技能
菜鸟编程大本营,现已正式上线!接下来我们将会在该公众号上,为大家分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。
长按输入:【拼图】获取源码点这里,获取新手福利