猫史档案馆


【Python作品分享】扫雷

用户:WVVWVV查看:0 回复:0 评论:0 创建时间:2021-12-31T22:08:39


【作品展示】

center_image

 

【作品介绍】

没用qt creator,纯输代码的扫雷

 

【作品源代码】

import sys
import random
from PySide2.QtWidgets import *
from PySide2.QtCore import *
from PySide2.QtGui import *
from PySide2 import QtCore, QtGui, QtWidgets

class Ui_lei(object):
    def setupUi(self, lei):
        lei.setObjectName("lei")
        lei.resize(917, 574)
        self.centralwidget = QtWidgets.QWidget(lei)
        self.centralwidget.setObjectName("centralwidget")
        self.line = QtWidgets.QFrame(self.centralwidget)
        self.line.setGeometry(QtCore.QRect(0, 80, 911, 16))
        self.line.setFrameShape(QtWidgets.QFrame.HLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.buttonGroup = QtWidgets.QButtonGroup(lei)
        self.buttonGroup.setObjectName("buttonGroup")
        pbtn_y = [i+90 for i in range(451) if i % 30 == 0] * 30
        pbtn_y.sort()
        pbtn_x = [i+10 for i in range(871) if i % 30 == 0] * 16
        a = list(zip(pbtn_x, pbtn_y))
        a = list(zip(list(range(1,481)),pbtn_x,pbtn_y))
        for i,y,z in a:
            exec('self.pushButton_%s=QtWidgets.QPushButton(self.centralwidget)' % i)
            exec('self.pushButton_%s.setGeometry(QtCore.QRect(%s, %s, 30, 30))' %(i,y,z))
            exec('self.pushButton_%s.setObjectName("pushButton_%s")' % (i,i))
            exec('self.buttonGroup.addButton(self.pushButton_%s)'% i)

        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(770, 10, 121, 31))
        font = QtGui.QFont()
        font.setPointSize(16)
        self.checkBox.setFont(font)
        self.checkBox.setObjectName("checkBox")
        lei.setCentralWidget(self.centralwidget)

        self.retranslateUi(lei)
        QtCore.QMetaObject.connectSlotsByName(lei)

    def retranslateUi(self, lei):
        lei.setWindowTitle(QtWidgets.QApplication.translate("lei", "扫雷", None, -1))
        self.checkBox.setText(QtWidgets.QApplication.translate("lei", "插旗模式", None, -1))





class SaoLei(QMainWindow, QListWidget, Ui_lei):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.gh = {}
        self.pbtn_dict = self.gh.copy()
        self.lei_num = 99
        self.a = 0
        self.cha = False
        self.set_pbtn_dict()
        self.check_pbtn_dict()
        self.setup()
        self.show()


    #列表与列表值对调
    def list_duidiao(self, liebiao1, liebiao2, yi_suoyin1, er_suoyin2):
        a = list(liebiao1)
        b = list(liebiao2)
        f = a.pop(yi_suoyin1)
        d = b.pop(er_suoyin2)
        a.insert(yi_suoyin1, d)
        b.insert(er_suoyin2, f)
        return a, b

    
    def ds(self,liebiao, suoyin, jia):
        a = liebiao[suoyin] + jia
        liebiao.pop(suoyin)
        liebiao.insert(suoyin, a)
        return liebiao

    def run(self):
        self.set_pbtn_dict()
        self.check_pbtn_dict()
        self.setup()
        self.show()



    #生成按钮字典
    def set_pbtn_dict(self):
        #获取按钮对象名集
        self.pbtn_list = self.buttonGroup.buttons()
        #生成按钮坐标
        c = []
        for i in range(16):
            for y in range(30):
                fg = [y,i]
                c.append(fg)
        d = list(zip(c,self.pbtn_list))
        for x,g in d:
            self.pbtn_dict[g] = [x]
        #print(self.pbtn_dict)
        #设置按钮是不是雷
        op = []
        for i in range(self.lei_num):
            op.append('lei')
        for k in range(480-self.lei_num):
            op.append('safe')
        random.shuffle(op)
        t = list(zip(op, self.pbtn_list))
        for po,io in t:
            self.pbtn_dict[io].append(po)
        #print(self.pbtn_dict)


    #检查按钮字典一个按钮的周围有多少地雷
    def check_pbtn_dict(self):
        tg = []
        for i,y in self.pbtn_dict.items():
            re = []
            qw = 0
            a = self.ds(y[0].copy(), 0, -1)
            b = self.ds(y[0].copy(), 0, 1)
            c = self.ds(y[0].copy(), 1, 1)
            d = self.ds(y[0].copy(), 1, -1)
            e = self.ds(a.copy(), 1, -1)
            f = self.ds(a.copy(), 1, 1)
            g = self.ds(b.copy(), 1, -1)
            h = self.ds(b.copy(), 1, 1)
            re.append(a)
            re.append(b)
            re.append(c)
            re.append(d)
            re.append(e)
            re.append(f)
            re.append(g)
            re.append(h)
            for x in re:
                for yu in self.pbtn_dict.values():
                    if x in yu and 'lei' in yu:
                        qw += 1
            tg.append(qw)
        o = list(zip(tg,self.pbtn_list))
        for r,u in o:
            self.pbtn_dict[u].append(r)
        
                    
        #for l, k in self.pbtn_dict.items():
            #print(l,k)

        #游戏数据初始化
    def setup(self):
        self.dilei = QPixmap('dilei.png')
        self.biaoji = QPixmap('biaoji.png')    
        #self.wenhao = QPixmap('wenhao.png')
        self.checkBox.clicked.connect(self.change_chaqi)
        for i,y in self.pbtn_dict.items():
            y.append(0)
        for i,y in self.pbtn_dict.items():
            y.append(True)
        #可视化雷与数字
        def see():
            for i,y in self.pbtn_dict.items():
                if 'lei' in y:
                    i.setIcon(self.dilei)
                if 'lei' not in y:
                    a = y[2]
                    i.setText(str(a))
        #开启
        #see()
        self.buttonGroup.buttonClicked.connect(self.pbtn_func)
        #print(self.pbtn_dict)

    def change_chaqi(self):
        self.cha = self.checkBox.isChecked()


    def pbtn_func(self,key):
        for pbt in self.pbtn_list:
            pbt.setCheckable(True)
        pbtn = self.buttonGroup.checkedButton()
        if self.cha == False:
            if self.pbtn_dict[key][4]:
                if 'lei' in self.pbtn_dict[key]:
                    key.setIcon(self.dilei)
                    MessageBox = QMessageBox()
                    Ret = QMessageBox.question(self, "提示", "你失败了,再来一次选择Yes,退出选择No")     
                    if Ret == QMessageBox.StandardButton.Yes:
                        self.a = 99
                        self.lei_num = 99
                        self.pbtn_dict = {}
                        self.set_pbtn_dict()
                        self.check_pbtn_dict()
                        self.setup()
                        for g in self.pbtn_list:
                            g.setText('')
                            g.setIcon(QPixmap())
                    
                    else:
                        sys.exit()
                else:
                    key.setIcon(QPixmap())
                    a = self.pbtn_dict[key][2]
                    key.setText(str(a))
                    self.pbtn_dict[key][4] = False
                    
        else:
            if 'lei' in self.pbtn_dict[key]:
                self.pbtn_dict[key][3] += 1
                if self.pbtn_dict[key][3]%2 ==1:
                    key.setIcon(self.biaoji)
                    self.a -= 1
                    if self.a == 0:
                        MessageBox = QMessageBox()
                        Ret = QMessageBox.question(self, "提示", "你成功了,再来一次选择Yes,退出选择No")     
                        if Ret == QMessageBox.StandardButton.Yes:
                            self.a = 99
                            self.lei_num = 99
                            self.pbtn_dict = {}
                            self.set_pbtn_dict()
                            self.check_pbtn_dict()
                            self.setup()
                            for g in self.pbtn_list:
                                g.setText('')
                                g.setIcon(QPixmap())
                        
                        else:
                            sys.exit()
                    
                elif self.pbtn_dict[key][3]%2 == 0:
                    self.a += 1
                    key.setIcon(QPixmap())
                #print(1)
            else:
                if self.pbtn_dict[key][4]:
                    self.pbtn_dict[key][3] += 1
                    if self.pbtn_dict[key][3] % 2 == 1:
                        key.setIcon(self.biaoji)
                    elif self.pbtn_dict[key][3] % 2 == 0:
                        key.setIcon(QPixmap())
                #print(2)
    
    def shuaxin(self):
        for i,y in self.pbtn_dict.items():
            i.setText('')
            i.setIcon(QPixmap())
        #self.run()





if __name__ == '__main__':
    app = QApplication(sys.argv)
    喵 = SaoLei()
    sys.exit(app.exec_())

 

【提示】

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

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页