甚至每个人都可能玩过。同样的照片可以一起去掉。但是,仅当连接图片的路径是直线、“L”形(连接线上有一个角)或“U”形(连接线上有两个角)时才可用。
那么程序是如何实现的呢,先看一下整个的设计思路:发现有很多想要学习Python却不知道如何下手的朋友,我这里整理了一些关于Python的学习资料,从基础到入门到实战都有!有需要的朋友可以关注并私信“01”免费获取...
01.
游戏的界面设计
1).首先是对于整体界面的设计,如下图所示:
大家运行程序后,会首先弹出选择框,是否从第一关开始,选择第一关后,点击游戏便可以开始游戏。我们设计了一个菜单,点击游戏/开始游戏即可!
02.
把火影忍者的人物放画布
接下来就是将游戏人物放到画布上去,这里我们选择了我最喜欢的火影忍者的头像,哈哈!
1).首先程序规定了每一个种类图片
图片所能出现的次数为4次,然后如果我们想实现一个8x8大小的图片地图,那么就一共有8x8/4=16种类型的图片可以出现。我们将每一种类型图片编码为一个数字,例如上图中鸣人的编号为0,小樱的编号为1。然后在对应到图片上去,所以就会得到16(种类)x4(每个种类的图片数量)=64个图片,如下图所示:
2).然后,我们将上述的图片打乱
按照画布上的位置分别放置图片,就得到了连连看的图片界面。
3).部分代码如下图所示
该函数是对画布图片进行一个初始化:
- 首先,是将每一个类别的小图片都添加张,形成一个 * 大小的一维数组;
- 然后,将小图片的索引顺序进行打乱;
- 最后,是将小图片的索引转化为一个二维数组,也就是呈现给大家的一个正方形的界面。
这里是将我们存放到里面的图片,通过函数self. get_left_top_point函数来获得其对应的坐标,并按照此坐标将图片放置到画布的相应位置。
其中有一点应用的很是巧妙,就是利用索引来作为判断是否是一类图片的标志(后面有代码示例的),接下来就是进行图片的消除,如下图所示。
03.
核心算法解释
敲黑板划重点来了,只有符合上述三种情况的图片我们才能够消除,那么程序如何判断二者是否符合被消除的条件呢?
- 我们以直线连接为例。上图中可以直线连接的两个佐助横纵坐标分别为(2,3)和(3,3),那么我们就判断他们x坐标(直线连接,横纵坐标肯定有一个相等,就不用判断相等的坐标了);
- 如果他们中间没有其他的图片,那么他们就可以被连接然后消掉,否则就不可以;
例如(4,4)和(4,6)的小樱之间有一个其他人的存在,他们就不能被连接,其他的情况也是类似判断,部分代码如下图所示:
上面的3中连接方法(直连,L型连接和U型连接)。当我们判断二者可以连接后,利用tkinter的画布中的delete函数,便可以将图片删掉。部分程序如下所示: