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

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

作者头像
叶子陪你玩
发布2022-05-22 15:04:50
8140
发布2022-05-22 15:04:50
举报
文章被收录于专栏:叶子陪你玩编程

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

最终效果:

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

数据结构:二维矩阵

代码语言:javascript
复制
[[1 0 1 0]
 [1 0 0 0]
 [0 1 1 0]
 [1 0 0 0]]

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

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

代码语言:javascript
复制
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
复制
[['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']
 ['' '' '' '' '' '' '' '']]

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

代码语言:javascript
复制
    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
复制
[['猫_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
复制
# 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
复制
from link import can_remove

最后更改判断代码:

原来的:

代码语言:javascript
复制
#判断是否相同
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
复制
#判断是否相同
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
复制
(全文完)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档