太好玩了,我用Python写了个火影忍者版的连连看

640?wx_fmt=jpeg

作者 | 菜鸟小编

出自 | 菜鸟学Python(ID:cainiao_xueyuan)

暑假马上就要结束了,在暑假即将走向尾声的时候,小编特地为大家准备了一款小游戏——连连看。希望通过这一款小游戏为大家放松身心,迎接新学年的到来。

连连看想必大家都玩过,相同的图片,可以连在一起消掉,但前提是图片连接的路径要是直线,或者是“L”形(连接线有一个拐弯)或者是类似于“U”形(连接线有两个拐弯)。那么程序是如何实现的呢,先看一下整个的设计思路:

640?wx_fmt=png

01.

游戏的界面设计

1).首先是对于整体界面的设计,如下图所示:

640?

大家运行程序后,会首先弹出选择框,是否从第一关开始,选择第一关后,点击游戏便可以开始游戏。我们设计了一个菜单,点击游戏/开始游戏即可!

02.

把火影忍者的人物放画布

接下来就是将游戏人物放到画布上去,这里我们选择了我最喜欢的火影忍者的头像,哈哈!

1).首先程序规定了每一个种类图片

图片所能出现的次数为4次,然后如果我们想实现一个8x8大小的图片地图,那么就一共有8x8/4=16种类型的图片可以出现。我们将每一种类型图片编码为一个数字,例如上图中鸣人的编号为0,小樱的编号为1。然后在对应到图片上去,所以就会得到16(种类)x4(每个种类的图片数量)=64个图片,如下图所示:

640

2).然后,我们将上述的图片打乱

按照画布上的位置分别放置图片,就得到了连连看的图片界面。

640?

3).部分代码如下图所示

640?wx_fmt=png

该函数是对画布图片进行一个初始化:

  • 首先,是将每一个类别的小图片都添加self.num张,形成一个self.picsKind * self.num大小的一维数组;

  • 然后,将小图片的索引顺序进行打乱;

  • 最后,是将小图片的索引转化为一个二维数组,也就是呈现给大家的一个正方形的界面。

640?wx_fmt=png

这里是将我们存放到self.pics里面的图片,通过函数self. get_left_top_point函数来获得其对应的坐标,并按照此坐标将图片放置到画布的相应位置。

其中有一点应用的很是巧妙,就是利用索引来作为判断是否是一类图片的标志(后面有代码示例的),接下来就是进行图片的消除,如下图所示。

640?

03.

核心算法解释

敲黑板划重点来了,只有符合上述三种情况的图片我们才能够消除,那么程序如何判断二者是否符合被消除的条件呢?

  • 我们以直线连接为例。上图中可以直线连接的两个佐助横纵坐标分别为(2,3)和(3,3),那么我们就判断他们x坐标(直线连接,横纵坐标肯定有一个相等,就不用判断相等的坐标了);

  • 如果他们中间没有其他的图片,那么他们就可以被连接然后消掉,否则就不可以;

例如(4,4)和(4,6)的小樱之间有一个其他人的存在,他们就不能被连接,其他的情况也是类似判断,部分代码如下图所示:

640?wx_fmt=png

上面的3中连接方法(直连,L型连接和U型连接)。当我们判断二者可以连接后,利用tkinter的画布中的delete函数,便可以将图片删掉。部分程序如下所示:

640?wx_fmt=png

当我们将所有的图片都消掉后,程序便会弹出提示框,祝贺我们闯关成功。下面,小编就为大家带来视频展示,看看小编的功力如何。

(连连看运行视频)

怎么样看完视频,是不是感觉还不错,唯一美中不足的就是没有加入声音。大家如果有兴趣的可以拿着完整的源码改改,看看能否优化和加入声音,这样效果更佳!

连连看源码:

https://pan.baidu.com/s/12LgfjQFbcvdjUf8co1fqfA 

提取码: cd4t 

(*本文为Python大本营转载,转载请联系原作者)

精彩推荐

2019 AI开发者大会」 除了邀请国内外一线公司重磅嘉宾外,还邀请到了亚马逊首席科学家@李沐,他将于9月5日亲授「深度学习实训营」,通过动手实操,帮助开发者全面了解深度学习的基础知识和开发技巧。原价1099元,目前福利价199元!且现场赠送价值85元《动手学深度学习》一本。

640?wx_fmt=jpeg

社群福利

扫码添加小助手,回复:大会,加入2019 AI开发者大会福利群,每周更新技术福利,还有不定期的抽奖活动~

640?wx_fmt=jpeg

推荐阅读

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值