猫史档案馆


【Python作品分享】翻牌游戏【作品秀】

用户:世界上编程最厉害的仔世界上编程最厉害的仔查看:0 回复:0 评论:0 创建时间:2020-05-24T08:48:11


【作品展示】

center_image

 

【作品介绍】

可以玩

 

【作品源代码】

import sys

from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2.QtWidgets import *
from ui_cards import Ui_Cards


class MyCards(QMainWindow, Ui_Cards):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.init_button()
        self.init_img()
        self.show()
        # 记录按钮点击次数
        self.clicked_num = 0
        # 存储两个按钮和对应的图片
        self.match_img = {
            1: {
                "pbtn": None,
                "pbtn_img": None
            },
            2: {
                "pbtn": None,
                "pbtn_img": None
            },
        }
        #游戏状态
        self.first_clicked=True
        #时间
        self.time=0
        #配对个数
        self.right_count=0

        # 绑定信号与槽函数
        self.pbtn_img.buttonClicked.connect(self.pbtn_func)

    def init_button(self):
        pbtn_list = self.pbtn_img.buttons()
        for btn in pbtn_list:
            btn.setText("")
            btn.setIcon(QIcon("bg.png"))
            btn.setIconSize(QSize(150, 150))
            # 设置按钮有选中和未选中状态
            btn.setCheckable(True)

    def init_img(self):
        import os
        import random

        # 常见的图片类型
        images_type = [".png", ".jpg", ".bmp", ".jpeg"]
        files = os.listdir("images")
        all_imgs = []
        for file in files:
            ext = os.path.splitext(file)[-1]
            if ext in images_type:
                all_imgs.append("images"+os.sep+file)

        # 生成乱序的6张图片
        random_imgs = random.sample(all_imgs, 6)
        grid_imgs = random_imgs+random_imgs
        random.shuffle(grid_imgs)
        # 图片与网格对应
        pbtn_list = self.pbtn_img.buttons()
        self.grids = dict(zip(pbtn_list, grid_imgs))

    def pbtn_func(self):
        #当第一次点击按钮后开始计时
        if self.first_clicked:
            self.first_clicked=False
            #计时
            self.timer=QTimer()
            self.timer.timeout.connect(self.update_time)
            self.timer.start(1000)

        if self.clicked_num<2:
            QApplication.processEvents()
            pbtn = self.pbtn_img.checkedButton()
            if pbtn!=self.match_img[1]["pbtn"]and pbtn in self.pbtn_img.buttons():
                # 按钮点击次数自增1
                self.clicked_num += 1
                # 显示按钮对应的图片
                pbtn.setIcon(QIcon(self.grids[pbtn]))
                # 存储按钮对应的图片
                self.match_img[self.clicked_num]["pbtn"] = pbtn
                self.match_img[self.clicked_num]["pbtn_img"] = self.grids[pbtn]
                #延时500ms
                timer=QTimer()
                timer.singleShot(1000,self.judge)


    def judge(self):
        # 判断图片是否配对
        if self.clicked_num == 2:
            # 重置按钮点击次数为0
            self.clicked_num = 0
            # 判断是否相同
            if self.match_img[1]["pbtn_img"] != self.match_img[2]["pbtn_img"]:
                # 恢复显示默认的背景图片
                self.match_img[1]["pbtn"].setIcon(QIcon("bg.png"))
                self.match_img[2]["pbtn"].setIcon(QIcon("bg.png"))
            else:
                #将配对的按钮移出按钮组
                self.pbtn_img.removeButton(self.match_img[1]["pbtn"])
                self.pbtn_img.removeButton(self.match_img[2]["pbtn"])
                #配对次数
                self.right_count+=1
                #判断游戏是否结束
                if self.right_count==6:
                    self.timer.stop()
            #清空已保存的按钮
            self.match_img[1]["pbtn"]=self.match_img[2]["pbtn"]=None

    def update_time(self):
        self.time+=1
        self.lcd_time.display(self.time)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MyCards()
    sys.exit(app.exec_())

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页