用户:WVV查看:0 回复:0 评论:0 创建时间:2021-12-31T22:08:39
【作品展示】

【作品介绍】
没用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