猫史档案馆


【Python作品分享】记忆配对

用户:务实的熔岩龙341务实的熔岩龙341查看:0 回复:1 评论:0 创建时间:2021-08-30T18:41:18


【作品展示】

center_image

 

【作品介绍】

编程课上做的记忆配对游戏,我自己修改了一下,大家有宝贵的移间请及时提出!

 

【作品源代码】

try:
    import sys

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

    class Ui_cards(object):
        def setupUi(self, cards):
            if cards.objectName():
                cards.setObjectName(u"cards")
            cards.resize(663, 600)
            self.centralwidget = QWidget(cards)
            self.centralwidget.setObjectName(u"centralwidget")
            self.gridLayoutWidget = QWidget(self.centralwidget)
            self.gridLayoutWidget.setObjectName(u"gridLayoutWidget")
            self.gridLayoutWidget.setGeometry(QRect(10, 110, 喵1, 471))
            self.gridLayout = QGridLayout(self.gridLayoutWidget)
            self.gridLayout.setObjectName(u"gridLayout")
            self.gridLayout.setContentsMargins(0, 0, 0, 0)
            self.pbtn11 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img = QButtonGroup(cards)
            self.pbtn_img.setObjectName(u"pbtn_img")
            self.pbtn_img.addButton(self.pbtn11)
            self.pbtn11.setObjectName(u"pbtn11")

            self.gridLayout.addWidget(self.pbtn11, 2, 2, 1, 1)

            self.pbtn02 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn02)
            self.pbtn02.setObjectName(u"pbtn02")

            self.gridLayout.addWidget(self.pbtn02, 0, 1, 1, 1)

            self.pbtn07 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn07)
            self.pbtn07.setObjectName(u"pbtn07")

            self.gridLayout.addWidget(self.pbtn07, 1, 2, 1, 1)

            self.pbtn01 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn01)
            self.pbtn01.setObjectName(u"pbtn01")

            self.gridLayout.addWidget(self.pbtn01, 0, 0, 1, 1)

            self.pbtn06 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn06)
            self.pbtn06.setObjectName(u"pbtn06")

            self.gridLayout.addWidget(self.pbtn06, 1, 1, 1, 1)

            self.pbtn10 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn10)
            self.pbtn10.setObjectName(u"pbtn10")

            self.gridLayout.addWidget(self.pbtn10, 2, 1, 1, 1)

            self.pbtn08 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn08)
            self.pbtn08.setObjectName(u"pbtn08")

            self.gridLayout.addWidget(self.pbtn08, 1, 3, 1, 1)

            self.pbtn05 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn05)
            self.pbtn05.setObjectName(u"pbtn05")

            self.gridLayout.addWidget(self.pbtn05, 1, 0, 1, 1)

            self.pbtn04 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn04)
            self.pbtn04.setObjectName(u"pbtn04")

            self.gridLayout.addWidget(self.pbtn04, 0, 3, 1, 1)

            self.pbtn12 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn12)
            self.pbtn12.setObjectName(u"pbtn12")

            self.gridLayout.addWidget(self.pbtn12, 2, 3, 1, 1)

            self.pbtn03 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn03)
            self.pbtn03.setObjectName(u"pbtn03")

            self.gridLayout.addWidget(self.pbtn03, 0, 2, 1, 1)

            self.pbtn09 = QPushButton(self.gridLayoutWidget)
            self.pbtn_img.addButton(self.pbtn09)
            self.pbtn09.setObjectName(u"pbtn09")

            self.gridLayout.addWidget(self.pbtn09, 2, 0, 1, 1)

            self.lcd_time = QLCDNumber(self.centralwidget)
            self.lcd_time.setObjectName(u"lcd_time")
            self.lcd_time.setGeometry(QRect(270, 10, 201, 81))
            self.label = QLabel(self.centralwidget)
            self.label.setObjectName(u"label")
            self.label.setGeometry(QRect(150, 30, 101, 41))
            font = QFont()
            font.setPointSize(30)
            self.label.setFont(font)
            self.label.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter)
            self.label_2 = QLabel(self.centralwidget)
            self.label_2.setObjectName(u"label_2")
            self.label_2.setGeometry(QRect(490, 50, 81, 41))
            font1 = QFont()
            font1.setPointSize(25)
            font1.setBold(True)
            font1.setItalic(False)
            font1.setWeight(75);
            self.label_2.setFont(font1)
            cards.setCentralWidget(self.centralwidget)

            self.retranslateUi(cards)

            QMetaObject.connectSlotsByName(cards)
        # setupUi

        def retranslateUi(self, cards):
            cards.setWindowTitle(QCoreApplication.translate("cards", u"记忆配对", None))
            icon = QIcon('.\images\袋鼠.png')
            self.setWindowIcon(icon)
            self.pbtn11.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn02.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn07.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn01.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn06.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn10.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn08.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn05.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn04.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn12.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn03.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.pbtn09.setText(QCoreApplication.translate("cards", u"PushButton", None))
            self.label.setText(QCoreApplication.translate("cards", u"Time", None))
            self.label_2.setText(QCoreApplication.translate("cards", u"s", None))
        # retranslateUi




    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)
            self.resizeable = QTimer()
            self.resizeable.start(0)
            self.resizeable.timeout.connect(self.resize_)


        def resize_(self):
            self.resize(663, 600)


        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

            type_ = random.choice(['动物', '喵'])
            images_type = ['.png', '.jpg', '.bmp', '.jpeg']
            all_imgs = []
            files = os.listdir('.\\images\\' + type_ + '\\')
            for file in files:
                ext = os.path.splitext(file)[-1]
                if ext in images_type:
                    all_imgs.append('.\\images\\' + type_ + '\\' + file)
            ramdom_imgs = random.sample(all_imgs, 6)
            grid_imgs = ramdom_imgs + ramdom_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(100)
            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():
                    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]
                    timer = QTimer()
                    timer.singleShot(200, self.judge)


        def judge(self):
            if self.clicked_num == 2:
                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 += 0.1
            self.lcd_time.display(self.time)


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

except Exception as e:
    from PySide2.QtWidgets import *
    import traceback
    import logging

    logging.basicConfig(filename='debug.log',
                        level=logging.DEBUG,
                        filemode='w',
                        format='[%(asctime)s] >>>  \n\n%(message)s',
                        datefmt='%Y-%m-%d %H:%M:%S'
                        )
    logging.error(traceback.format_exc())
    QMessageBox.critical(None, '错误', '程序发生错误,请在程序所在文件夹内查看错误日志 debug.log。')

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
精神科4096号患者精神科4096号患者

进我们工作室吗

点赞0


评论