基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
作者:白居不易1101 发布时间:2022-02-05 00:56:54
标签:python3,pyQt5,QtDesignner,游戏
描述:使用QtDesignner设计界面,pyQt5+python3实现主体方法制作的猜数字游戏。
游戏规则:先选择游戏等级:初级、中级、高级、魔鬼级,选择完游戏等级后点击“确定”,然后后台会自动生成一个与游戏等级匹配的“神秘数字”,游戏玩家在文本框内输入数字,再点击文本框旁边的“确定”,即可比较玩家所猜数字是否就是“神秘数字”。
游戏界面:
源代码:
代码1: guessNumberGame.py (界面代码)
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'guessNumberGame.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(555, 463)
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(40, 90, 181, 31))
self.label.setObjectName("label")
self.comboBox = QtWidgets.QComboBox(Form)
self.comboBox.setGeometry(QtCore.QRect(230, 30, 171, 31))
self.comboBox.setObjectName("comboBox")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.comboBox.addItem("")
self.pushButton_2 = QtWidgets.QPushButton(Form)
self.pushButton_2.setGeometry(QtCore.QRect(420, 30, 91, 31))
self.pushButton_2.setObjectName("pushButton_2")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(420, 90, 91, 31))
self.pushButton.setObjectName("pushButton")
self.textBrowser = QtWidgets.QTextBrowser(Form)
self.textBrowser.setGeometry(QtCore.QRect(40, 151, 471, 201))
self.textBrowser.setObjectName("textBrowser")
self.lineEdit = QtWidgets.QLineEdit(Form)
self.lineEdit.setGeometry(QtCore.QRect(230, 90, 171, 31))
self.lineEdit.setObjectName("lineEdit")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(40, 30, 181, 31))
self.label_3.setObjectName("label_3")
self.pushButton_3 = QtWidgets.QPushButton(Form)
self.pushButton_3.setGeometry(QtCore.QRect(220, 380, 111, 41))
font = QtGui.QFont()
font.setFamily("Agency FB")
font.setPointSize(12)
self.pushButton_3.setFont(font)
self.pushButton_3.setObjectName("pushButton_3")
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "猜数字游戏"))
self.label.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:14pt;\">请猜一个数字:</span></p></body></html>"))
self.comboBox.setItemText(0, _translate("Form", "初级:数字小于20"))
self.comboBox.setItemText(1, _translate("Form", "中级:数字小于30"))
self.comboBox.setItemText(2, _translate("Form", "高级:数字小于50"))
self.comboBox.setItemText(3, _translate("Form", "魔鬼级:数字小于100"))
self.pushButton_2.setText(_translate("Form", "确定"))
self.pushButton.setText(_translate("Form", "确定"))
self.label_3.setText(_translate("Form", "<html><head/><body><p><span style=\" font-size:14pt;\">请选择游戏难度:</span></p></body></html>"))
self.pushButton_3.setText(_translate("Form", "再来一局"))
界面代码
代码2: runG uess.py (方法主体代码)
# -*- coding: utf-8 -*-
import sys,random,time
from PyQt5.QtWidgets import QApplication, QWidget, QMainWindow
from guessNumberGame import Ui_Form
times=1 #声明一个模块内的全局变量;用于记录猜数字的次数
rand=20#声明一个模块内的全局变量;神秘数字的最大范围
allTimes=7#声明一个模块内的全局变量;游戏最大次数
class mwindow(QWidget, Ui_Form):
def __init__(self): #初始化
super(mwindow, self).__init__() #这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。
self.setupUi(self)
#定义一个方法:从下拉框选择游戏难度
def gameLevel(self):
times=1
global rand,allTimes
level=self.comboBox.currentIndex()
if level==0:
rand=20
allTimes=7
if level==1:
rand=30
allTimes=10
if level==2:
rand=50
allTimes = 15
if level==3:
rand=100
allTimes = 20
#定义一个方法:选择游戏难度后生成一个随机的神秘数字
def getRandNum(self):
global theNum,times
times=1 #每次选择游戏难度并点击“确定”后,已猜数字次数都重新归为1
w.pushButton.setEnabled(True) #设置pushButton可点击(即选择了游戏难度之后,pushButton才可点击)
theNum=random.randint(1,rand)
self.textBrowser.append('开始游戏吧,你有%d次机会,数字范围:1-%d' %(allTimes,rand))
# self.textBrowser.append(str(theNum)) #直接显示神秘数字,用于调试时使用
#定义一个方法:点击“确定”按钮的事件,用于比较所猜数字和神秘数字
def guess(self):
global allTimes,times #使用全局变量times
yourNum = int(self.lineEdit.text()) #从文本框获取到输入的数字,并转化为int型
if yourNum < theNum and times < allTimes:
text = "你猜的数字%d小了!你还有%d次机会,再猜!" %(yourNum,allTimes-times)
self.textBrowser.append(text) #把提示信息写入textBrowser
times += 1
elif yourNum > theNum and times <allTimes:
text = "你猜的数字%d大了!你还有%d次机会,再猜!" %(yourNum,allTimes-times)
self.textBrowser.append(text)
times += 1
elif yourNum == theNum and times <allTimes:
text = '你猜对了,就是%d,你一共猜了%s次!' % (theNum,times)
self.textBrowser.append(text)
else:
text = '%d次机会用完了你也没猜对!神秘数字其实是:%d' %(allTimes,theNum)
self.textBrowser.append(text)
#定义一个方法:点击“再来一局”时触发的事件
def reStart(self):
self.textBrowser.clear() #清除textBrowser内的内容
self.lineEdit.clear() #清除lineEdit内的内容
w.pushButton.setEnabled(False) #设置pushButton不可点击(即在选择游戏难度之前,pushButton不可点击)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = mwindow()
w.pushButton.setEnabled(False) #设置pushButton不可点击(即在选择游戏难度之前,pushButton不可点击)
w.pushButton.clicked.connect(w.guess) #绑定guess方法
w.pushButton_2.clicked.connect(w.getRandNum)
w.comboBox.currentIndexChanged.connect(w.gameLevel)
w.pushButton_3.clicked.connect(w.reStart)
w.show()
sys.exit(app.exec_()) #使程序一直循环运行直到主窗口被关闭终止进程(如果没有这句话,程序运行时会一闪而
总结
以上所述是小编给大家介绍的基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能 ,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/heyangblog/p/11185010.html


猜你喜欢
- 拉取网易蜂巢的mysql-server:5.6docker pull hub.c.163.com/nce2/mysql:5.6创建mysql
- 直接贴代码啦:#coding=utf-8import pandas as pddef arff_to_csv(fpath): #
- Vuex 作为一个老牌 Vue 状态管理库,大家都很熟悉了Pinia 是 Vue.js 团队成员专门为 Vue 开发的一个全新的状态管理库,
- 安全公司 Imperva Cloud WAF 保护了全球超过10万个网站,并且每天观察到大约10亿次攻击。他们每天都会检测到成千上万种黑客工
- 不知不觉已经在家两个月了,眼看马上春节就要来临了。满怀期待的写了一个新年倒计时的小工具!设置新年时间后都能够使用,打开软件后可以自动计算到新
- 一.引言先看获取到的效果拍摄时间:2021:12:18 16:22:13照片拍摄地址:('内蒙古自治区包头市昆都仑区', &
- 通过对Node的学习及应用,我们知道NodeJS其采用单线程、事件驱动、非阻塞I/O等架构设计,非常适用于高并发、I/O密集型应用。1. 什
- opencv > pilimport cv2 from PIL import Imageimg = cv2.imread("
- 前言:接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱。接口自动化包含2个部分,功能性的接口自
- 1 如何在网页中获取 JSON 数据?打开一个具有动态渲染的网页,按 F12 打开浏览器开发工具,点击“网络&r
- Mako是一个高性能的Python模板库,它的语法和API借鉴了很多其他的模板库,如Django、Jinja2等等。基本用法创建模板并渲染它
- 环境准备数据库版本:MySQL 5.7.20-log建表 SQLDROP TABLE IF EXISTS `t_ware_sale_stat
- 问题怎样实现一个按优先级排序的队列? 并且在这个队列上面每次 pop 操作总是返回优先级最高的那个元素解决方案下面的类利用 heapq 模块
- 一、前言该测试功能是Linux产测软件的一个子功能,主要涉及:140行代码PySide2的Event、信号和槽、QLabel,QWidget
- 突然发现, pycharm 2020.2都出来了哈, 现在jetbrain团队对中文用户也比较友好, 比以前更加适合小白了再就是很多类似的教
- 前言在上一节我们通过使用NumPy的数组分割成功的在我们的图像上画了一个绿色的方块,但是如果我们想画一个单一的线条或者圆圈该怎么办呢?Num
- 如下所示:#抽象 (函数)# 1、callable 判断一个对象是否可以被调用x = 1def y(): &nbs
- 最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学
- 以下是Django框架获取各种form表单数据的方法Django中获取text,password名字:<input type
- 如下所示:# coding: utf-8import osimport psutilimport timedef write_pid():