长假余额为零!我用Python做了个中秋国庆双节拼图游戏

    科技2026-06-06  8

    点击上方“菜鸟学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 初学者进阶的九大技能 菜鸟编程大本营,现已正式上线!接下来我们将会在该公众号上,为大家分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。 长按输入:【拼图】获取源码点这里,获取新手福利
    Processed: 0.015, SQL: 9