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

作者:菜鸟小编

公众号:菜鸟学Python


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

连连看想必大家都玩过,相同的图片,可以连在一起消掉,但前提是图片连接的路径要是直线,或者是“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

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

(连连看运行视频)


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


需要源码,后台输入:【连连看】


往期阅读

速来!免费包邮送35本经典Python书籍

企业难寻AI人才,求职者就业难,如何破局?


涨姿势|一位资深的Python大牛,有趣有料


640?wx_fmt=jpeg



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 答:可以通过以下步骤实现:1. 定义图形,比如一些形状的矩形或圆形;2. 使用Python中的循环语句创建游戏板并将图形填充到板中;3. 编一个函数来检查玩家的移动是否有效;4. 利用Python中的条件判断语句来判断移动是否有效;5. 利用Python中的循环语句来检查玩家是否完成了游戏;6. 将游戏结果和分数输出到屏幕上。 ### 回答2: 连连看是一种益智类游戏,玩家需要在给定的方块中找到相同的图案并用线连接起来消除。下面是一个用Python的简单连连看游戏的示例: ```python import pygame import random # 初始化Pygame pygame.init() # 设定游戏窗口的尺寸 window_size = (500, 500) # 设定每个方块的尺寸和数量 block_size = 50 block_rows = 6 block_cols = 6 # 加载方块的图案 block_images = [] for i in range(1, 7): image = pygame.image.load(f"image_{i}.png") image = pygame.transform.scale(image, (block_size, block_size)) block_images.append(image) # 初始化游戏窗口 window = pygame.display.set_mode(window_size) pygame.display.set_caption("连连看游戏") # 随机生成方块的布局 block_layout = [] for _ in range(block_rows): row = [] for _ in range(block_cols): block_type = random.randint(0, 5) row.append(block_type) block_layout.append(row) # 游戏主循环 running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False window.fill((255, 255, 255)) # 清空窗口 # 绘制方块 for i in range(block_rows): for j in range(block_cols): x = j * block_size y = i * block_size image = block_images[block_layout[i][j]] window.blit(image, (x, y)) pygame.display.flip() # 结束游戏 pygame.quit() ``` 这个示例中使用了Pygame库来创建游戏窗口和绘制图像,通过随机生成方块的布局来生成游戏的初始界面。玩家可以通过点击相邻的方块来连接它们,当找到相同的图案并且它们之间的路径没有其他方块时,这两个方块将被消除。 以上示例仅为连连看游戏的基本框架,你可以根据需要添加更多的功能和规则,例如计分系统、计时功能以及更多难度级别。 ### 回答3: 连连看是一种益智类游戏,玩家需要寻找并消除连接的相同图案,直到没有剩余的图案为止。我们可以使用Python编程语言来编一个简单的连连看游戏。 首先,我们需要导入必要的模块,如pygame来创建游戏窗口,并用random模块来随机布置图案。接着,我们需要定义游戏的基本参数,如窗口大小、图案大小和布局等。 我们可以使用二维列表来表示游戏界面,每个元素对应一个图案,并设置一个二维列表表示图案的位置。在游戏开始时,将随机生成一些图案并将其布置在游戏界面上。当玩家点击两个相同的图案时,这两个图案将会消失。如果没有可连接的图案,玩家可以重新生成图案。 为了实现图案的连线,我们可以使用广度优先搜索算法来检查两个图案是否可以相连。通过遍历图案周围的相邻图案,我们可以确定是否存在一条路径将两个图案连接起来。如果找到了一条路径,则可以消除选定的图案。 此外,我们还可以添加计分系统,记录玩家的得分情况。每次成功消除图案时,可以根据消除图案的数量和消除时间来加分。玩家可以通过限定时间或者步数来增加游戏的难度。 最后,我们可以添加游戏结束的判断条件,当所有的图案都被消除后,游戏结束并显示玩家的最终得分。 通过以上步骤,我们可以使用Python一个简单的连连看游戏。这个游戏不仅能够提供娱乐,还可以锻炼玩家的观察力和反应能力。希望玩家们能够享受这个有趣的游戏!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值