前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python连连看与记忆翻牌游戏(3)

python连连看与记忆翻牌游戏(3)

作者头像
叶子陪你玩
发布于 2022-05-22 07:04:50
发布于 2022-05-22 07:04:50
85900
代码可运行
举报
运行总次数:0
代码可运行

上篇python连连看与记忆翻牌游戏(2)完成了界面,今天完成最后一篇算法与游戏结合,比较简单,这里简单讲讲。

最终效果:

之前的连接算法中,我们是通过一个矩阵来测试的。

数据结构:二维矩阵

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[1 0 1 0]
 [1 0 0 0]
 [0 1 1 0]
 [1 0 0 0]]

这里我们将游戏图片也对应到一个矩阵中。

首先在游戏初始化中,初始化一个self.grid的空矩阵。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class MyGame():
    def __init__(self):
        pygame.init()
        self.screen = pygame.display.set_mode([Config.SCREEN_WIDTH, Config.SCREEN_HEIGHT])
        self.clock = pygame.time.Clock()

        self.grid = np.zeros((Config.ROW_COUNT,Config.COLUMN_COUNT),dtype='<U10')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']]

然后图片初始化的时候将图片名称填充到矩阵中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def init_imgs_obj(self):
        for row in range(Config.ROW_COUNT):
            for column in range(Config.COLUMN_COUNT):
                x = (Config.MARGIN + Config.WIDTH) * column + Config.MARGIN
                y = (Config.MARGIN + Config.HEIGHT) * row + Config.MARGIN
                obj = ImageButton(self.screen,self.all_imgs_obj[row * Config.COLUMN_COUNT + column],x,y)
                self.grid[row,column] = self.all_imgs[row * Config.COLUMN_COUNT + column]
                self.all_imgs_button.append(obj)
        print(self.grid)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[['猫_4.png' '猫_4.png' '猫_7.png' '猫_6.png' '猫_1.png' '猫_1.png' '猫_4.png'
  '猫_6.png']
 ['猫_5.png' '猫_1.png' '猫_5.png' '猫_7.png' '猫_2.png' '猫_3.png' '猫_5.png'
  '猫_6.png']
 ['猫_7.png' '猫_6.png' '猫_3.png' '猫_4.png' '猫_2.png' '猫_1.png' '猫_5.png'
  '猫_8.png']
 ['猫_2.png' '猫_8.png' '猫_2.png' '猫_3.png' '猫_3.png' '猫_8.png' '猫_7.png'
  '猫_8.png']]

接着将原来的算法作为一个模块link.py;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# link.py
......
def can_remove(array,p1, p2):
    if p1[0] == p2[0] and p1[1] == p2[1]:
        print('同一个点')
        return False

    elif array[p1[0], p1[1]] == array[p2[0], p2[1]]:
        # 边界
        if edge(array,p1,p2):
            return True
        elif h(array,p1, p2):
            print('水平')
            return True
        elif v(array,p1, p2):
            print('竖直')
            return True
        elif turn_one(array,p1, p2):
            print('一个拐')
            return True
        elif turn_two(array,p1, p2):
            print('两个拐')
            return True
    else:
        print('无法匹配')
        return False

并从里面导入can_remove方法,用于判断两个点是否可以相连。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from link import can_remove

最后更改判断代码:

原来的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#判断是否相同
if self.match_img[1]["pbtn_img"] == self.match_img[2]["pbtn_img"] and self.match_img[1]['point'] != self.match_img[2]['point']:
    print('匹配成功')
            ...

更改后,增加can_remove判断,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#判断是否相同
if self.match_img[1]["pbtn_img"] == self.match_img[2]["pbtn_img"] and can_remove(self.grid,self.match_img[1]['point'],self.match_img[2]['point'])
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(全文完)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python连连看与记忆翻牌游戏(2)
上篇python连连看与记忆翻牌游戏(1)讲了连连看的核心判断实现。(最后的remove边界判断有点问题,没有先判断两者是否相等。感谢@井老师提醒)
叶子陪你玩
2022/05/22
1.5K0
python连连看与记忆翻牌游戏(2)
【Python】使用Pygame做一个Flappy bird小游戏(五)
现在整个Flappy bird小游戏基本成型,但是缺少计分系统。这节为整个游戏添加计分系统。
树枝990
2020/08/19
1.1K0
【Python】使用Pygame做一个Flappy bird小游戏(五)
JavaScript实现图片懒加载(lazyload)
图片懒加载可以减少不必要的图片资源请求,提高页面的加载速度,提升用户体验。我们实现页面懒加载的方案一般有三种方式:
伯爵
2019/10/24
1K0
2019年最新最全的 Anaconda 安装指南WindowsmacOSLinux
从 Anaconda 官文网站 https://www.anaconda.com/download 下载操作系统对就的安装文件,选择 Python 3.7 版本。
iOSDevLog
2019/01/03
1.7K0
【ECCV 2018 .Jian Sun】DetNet: A Backbone network for Object Detection
【Background】:ECCV is one of the top conferences in computer vision,In this blog,I will introduce an paper from Sun Jian team, which is about a backbone network for object detection.What is worth mentioning is that this paper does not have any formula.
张俊怡
2018/08/13
5790
【ECCV 2018 .Jian Sun】DetNet: A Backbone network for Object Detection
python连连看与记忆翻牌游戏(1)
游戏综合性相对比较高的,会涉及比较多的逻辑,数据处理以及对应的问题算法,很多前沿的技术都会应用在游戏中。
叶子陪你玩
2022/05/22
8480
python连连看与记忆翻牌游戏(1)
Redis类型之lists类型
9、rpoplpush 从第一个list的尾部移除元素并添加到第二个list的头部,最后返回被移除的元素值,整个操作是原子的,如果第一个list是空或者不存在返回nil
人生不设限为梦想时刻准备着
2018/05/30
5760
HTML第一课——基础知识普及【2】
img标签 我们先看一下文档结构: 这里我们文件当前位置就是lesson.html,所以现在我们img属性src给的值要进入imgs文件夹,所以我们可以用相对路径来表示,看代码: <!DOCTYPE
孟船长
2018/05/21
5830
Windows7下Python3.4使用MySQL数据库(安装教程)
原作者及原文链接: Jack-Cui,http://blog.csdn.net/c406495762/article/details/56279888
圆方圆PYTHON学院
2019/01/15
9820
python+flask编写一个简单的登录接口例子
在学习接口测试的时候往往会因为没有实际操作的接口进行测试而烦恼,这里教大家自己编写两个接口用于学习接口测试
用户7880705
2020/11/13
8020
NLP自然语言处理中英文分词工具集锦与基本使用介绍
1.from stanfordcorenlp import StanfordCoreNLP
IT小白龙
2019/05/31
4K0
NLP自然语言处理中英文分词工具集锦与基本使用介绍
「云+精选」视频动画活动中奖名单公示
在过去的一周中,社区分别在视频号(“云加社区”)和社区视频页面上线了「云+精选」视频动画,动画发布当日就收获了无数观众的点赞和走心的留言。看着大家一条条走心的留言,字里行间无不透露出对社区的满意和对产品的认可,这些留言让我们十分感动和欣慰,因为一切都是值得的,被认可的感觉真好!
腾讯云开发者社区
2021/01/26
2.7K1
iOS 11种键盘布局总结
根据需求更换以下类型,例如: self.textField.keyboardType = UIKeyboardTypeDefault; 1.UIKeyboardTypeDefault 1.png 常用
网罗开发
2021/01/29
1.6K0
iOS 11种键盘布局总结
基于zepto的微信手机端微场景HTML5页面特效
page处是管理图片的,在改div中添加删除图片及图片中的相关组件,如在div标签为page page-9中添加的Button组件。
WindCoder
2018/09/20
8860
基于zepto的微信手机端微场景HTML5页面特效
Scala一个综合的案例《learn scala in half an hour》 by jeff.kit
2011年1月23号Jeff参加了珠三角技术沙龙2011年1月广州小沙龙,并在会上给大家做了一个关于Scala的分享,形式是通过一个设计好的剧本(以沙龙聚会为背景),现场编码至完成该剧本为止,在编码的过程中逐步引入Scala的各种特性。这里先送上讲稿及现场录音还有演示代码,稍晚整理一份文字版的《learn scala in half an hour》。 现场录音在这里。 示例代码在这里。 如果有兴趣与我探讨Scala http://www.jeffkit.info/2011/01/898/ PPT需要
Albert陈凯
2018/04/04
6330
Scala一个综合的案例《learn scala in half an hour》 by jeff.kit
CentOS Linux 7 VMware的IP与网络设置
①打开控制面板-网络和Internet-网络连接 ②找到VMnet8,右键属性,找到IPv4,点击属性,进行如下图设置
zoro
2019/04/11
1.4K0
CentOS Linux 7 VMware的IP与网络设置
zabbix3
custom graph:创建一个融合了多个simple graph的单个graph;
py3study
2020/01/13
3330
斯坦福大学密码学-分组密码 03
典型的分组密码以迭代的形式构建。输入密钥k,然后将密钥扩张成一系列的回合密钥 到 。使用这些回合密钥一次又一次的迭代使用回合函数加密明文信息。
Daffy
2020/11/03
2K0
应急响应案例:kdevtmpfsi挖矿木马
Virustotal 中核实文件是否异常。https://www.virustotal.com/gui/
何刚
2020/11/07
4.9K2
应急响应案例:kdevtmpfsi挖矿木马
Docker Hub:保存并分享你的Docker镜像
摘要总结:Docker Hub是Docker的官方注册服务,提供了镜像存储、镜像版本控制、团队协作等功能。使用Docker Hub可以让用户分享和复用已有的镜像,也能创建新的镜像。同时,Docker Hub还提供了自动构建、持续集成/持续部署、Webhooks等高级功能,使用户能够更轻松地构建、测试和部署容器化应用程序。
贼贼大哥
2018/01/04
13.5K0
Docker Hub:保存并分享你的Docker镜像
相关推荐
python连连看与记忆翻牌游戏(2)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验