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

点击上方“菜鸟学Python”,选择“星标”公众号

重磅干货,第一时间送达

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

今年的国庆长假非常长,不知不觉已经余额为零!朋友圈很多晒出游的照片,聚会的照片,吃吃喝喝真舒服,不过也该收收心啦。

编程需要不断的练习再练习,拳不离手曲不离口,代码几天不写手就生了。这不小编赶紧撸起来,用Python整一个好玩的拼图游戏。

我们以中秋国庆佳节为背景的Python拼图小游戏,利用搜集好的中秋国庆系列图片作为背景,进行拼图,映衬节日的氛围,整体的展示画面如下图所示,其中朱红色为空白区域,通过对空白区域的移动,完成对图片的还原。

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

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阶拼图)。


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

2).代码的设计

首先我们要初始化图片的路径,然后输入阶层的数目,将图片进行绘制。

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

对于拼图难度个性化设计,通过参数num获取输入的阶数。对于图片系列个性化设计,只需要将path路径给为自己准备的图片即可。

接着我们准备地图的初始化:

  • 其中init_Map  表示初始化的地图 之后会被打乱

  • end_map 是正确分布的地图

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

地图初始化中,将地图绘制为 num* num 的集合(num为阶数),通过list添加为两层数据使得数组为num*num的大小,最后一个数值代表空白区域。

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

对于拼图部分和原图部分进行分别绘制,根据获取的地图位置,绘制相对应部分的图片。首先计算出每个块的像素值大小pix_fenge = pic_size /pic_fenge,根据地图数组中的元素位置(x,y)选取原图中对应位置进行绘制,对于空白块,不进行绘制。

3).图片加载设计

小编这里选择的是中秋国庆主题(如果需要的话,大家可以替换为任意主题,比如女朋友的照片等),采用随机选取图片的方式,读取实现存放好的照片,如下图所示。

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

有了图片素材,接下来就是对素材的预处理了:

  • 先使用os.walk对目标文件夹进行遍历,获取图片序列fileses;

  • 并使用randint随机选取一张图片左为背景图片;

  • 然后通过PIL库读取图像并resize为600*600(注意:某些图像尺寸相差太大,resize之后会变得很变扭,大家视情况而定);

  • 最后保存为临时文件temp.jpg供pyganme调用;

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

04).算法实现

对于拼图游戏的关键,在于其中的算法,主要思想是检测被点击的图像的位置,根据位置判断被点击的图像是否位于空白图像四周,如果位于,则进行图片互换,否则不进行,具体实现如下所示。

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

这里地图数组的初始化使用拼图的方式,随机进行1000次的移动,作为初始化的init_map,如果使用随机打乱数组,则有可能无法恢复。     

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

03.

视频演示

对于整个游戏的设计基本介绍完毕了,只需要通过主函数将各部分组合就好了,下面一起来看一些视频演示效果:

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

大家如果想要源代码进行学习玩耍的话,只需要在下面的公众号后台回复"拼图"即可。

有热门推荐????1. 卧槽!没想到,用Python竟能做五仁月饼2. 超全Python IDE武器库大总结,优缺点一目了然!
3. Python 30道高频面试题及详细解答
3. 精华技巧,学会这几招可以假装是Python高手
4. 哇!用Python读取CVS文件竟然有5招,据说90%的人只会2招
5. 童年听的龟兔赛跑的故事,我终于用100行Python实现了!
6. Python 初学者进阶的九大技能

菜鸟编程大本营,现已正式上线!接下来我们将会在该公众号上,为大家分享优质编程语言里趣味的干货,通俗易懂的实战案例,经验分享,让菜鸟也爱上编程。
长按输入:【拼图】获取源码点这里,获取新手福利

你可能感兴趣的:(游戏,编程语言,python,计算机视觉,人工智能)