当前位置:   article > 正文

python猜数字游戏(.exe打包+交互界面)_猜数字游戏下载pythonui

猜数字游戏下载pythonui

链接: link
本程序在链接程序中基础上,添加了人机交互界面,使得游戏更加友好,可玩性更高,并打包成.exe文件。如有需求也可以连接数据库进行数据库储存。

代码全貌

from random import *
#from pymongo import MongoClient
from tkinter import *
from tkinter import messagebox


"""存放玩家数据的字典"""
Users = {}

class GFGame():
	"""GFGame的类"""

	def __init__(self,user,difficulty_state=7):
		"""initial for GFGame"""
		self.user = user
		self.difficulty_state = difficulty_state 
		#根据困难状态标志位在困难字典中寻找,并确定猜测次数和所在范围的答案。若不存在,默认简单模式。
		self.times = self.difficulty_state
		self.answer = randint(0,2 ** difficulty_state)
		self.range_L = 0
		self.range_U = 2 ** difficulty_state
		self.flag = 0
		#读取玩家历史数据。若无该玩家数据,新建玩家数据。
		if Users.get(user,0) == 0:
			self.score = 0
			info = {self.user:{'score':self.score,
								'answer':[self.answer],
								'guess':[],},}
			Users.update(info) 
		else:
			Users[self.user]['answer'].append(self.answer)
		pass
	pass

	def Guess(self,user_guess):
		"""Guess for the answer of GFGame"""
		self.user_answer = user_guess
		#记录玩家猜测的数据
		Users[self.user]['guess'].append(self.user_answer) 
	pass

	def Prompt(self):
		"""Prompt about answer for user"""
		if self.user_answer == self.answer:
			self.flag = 1
			self.times -= 0
		elif self.user_answer > self.answer:
			self.range_U=self.user_answer
			self.times -= 1
		else:
			self.range_L=self.user_answer
			self.times -= 1
		pass
	pass

	def Judge(self,window):
		"""Judge about user'answer """
		if self.times > 0 and self.flag == 1:
			#答对:根据剩余猜测次数加法
			messagebox.showinfo('Win',f'挑战成功!\n+{self.times}分')
			Users[self.user]['score'] += self.times
			#每一次游戏历史猜测的分隔符
			Users[self.user]['guess'].append('|') 
			window.destroy()
		elif self.times ==0 and self.flag == 0:
			#答错:给出答案数字
			messagebox.showinfo('T_T',f'挑战失败\n正确答案为:{self.answer}')
			#每一次游戏历史猜测的分隔符
			Users[self.user]['guess'].append('|') 
			window.destroy()
		else:
			None
		pass
	pass

class WindowforGame(Frame):
	"""docstring for WindowforGame"""
	def __init__(self, master=None):
		super(WindowforGame, self).__init__()
		self.master = master
		self.pack()
		self.createWidgets()
		pass

	def createWidgets(self):
		#root界面控件布置
		self.lab01=Label(self,text='玩家:')
		self.lab01.grid(row=0,column=0,padx=10,pady=10)
		self.entry01=Entry(self)
		self.entry01.grid(row=0,column=1,padx=10,pady=10)
		self.difficulty_state=IntVar()
		self.rabtn01=Radiobutton(self,text='新手',variable=self.difficulty_state,value=7)
		self.rabtn01.grid(row=1,column=0,columnspan=2,padx=10,pady=10)
		self.rabtn02=Radiobutton(self,text='基础',variable=self.difficulty_state,value=8)
		self.rabtn02.grid(row=2,column=0,columnspan=2,padx=10,pady=10)
		self.rabtn03=Radiobutton(self,text='中等',variable=self.difficulty_state,value=9)
		self.rabtn03.grid(row=3,column=0,columnspan=2,padx=10,pady=10)
		self.rabtn04=Radiobutton(self,text='困难',variable=self.difficulty_state,value=10)
		self.rabtn04.grid(row=4,column=0,columnspan=2,padx=10,pady=10)
		self.btn01=Button(self,text='开始',heigh=2,width=8,command=self.begin)
		self.btn01.grid(row=5,column=0,padx=5,pady=10)
		self.btn02=Button(self,text='历史记录',heigh=2,width=8,command=self.history)
		self.btn02.grid(row=5,column=1,padx=5,pady=10)
		self.btn03=Button(self,text='结束',heigh=2,width=8,command=self.over)
		self.btn03.grid(row=5,column=2,padx=5,pady=10)
		pass

	def begin(self):
		'''游戏开始'''
		#获取输入框中信息
		user=self.entry01.get()
		difficulty_state=self.difficulty_state.get()
		user_1 = GFGame(user,difficulty_state)
		
		#确认按键对应事件
		def sure():
			guess=entry01.get()
			#保证输入为数值
			try:
				#将用户输入类型化为数值
				guess=int(guess)
				user_1.Guess(guess)
				user_1.Prompt()
				#更新界面信息
				lab02['text']=f'答案在:{user_1.range_L}~{user_1.range_U}'
				lab03['text']=f'还剩{user_1.times}次机会 '
				gamewindow.update()
				user_1.Judge(gamewindow)
				
			except:
				messagebox.showinfo('数值有误','请重新输入数值!')
			pass

		#创建一个猜数字的交互界面
		gamewindow=Tk()
		gamewindow.title('GuessFigure')
		gamewindow.geometry('200x300+550+250')
		#设置界面控件
		lab01=Label(gamewindow,text=f'玩家:{user}')
		lab01.grid(row=0,columnspan=3,padx=10,pady=10)
		lab02=Label(gamewindow,text=f'答案在:{user_1.range_L}~{user_1.range_U}')
		lab02.grid(row=1,columnspan=3,padx=10,pady=10)
		lab03=Label(gamewindow,text=f'还剩{user_1.times}次机会 ')
		lab03.grid(row=2,columnspan=3,padx=10,pady=10)

		entry01=Entry(gamewindow)
		entry01.grid(row=3,columnspan=3,padx=10,pady=10)

		btn01=Button(gamewindow,text='确认',heigh=2,width=8,command=sure)
		btn01.grid(row=4,column=0,padx=5,pady=10)
		btn02=Button(gamewindow,text='结束',heigh=2,width=8,command=gamewindow.quit)
		btn02.grid(row=4,column=1,padx=5,pady=10)
		gamewindow.mainloop()

	def history(self):
		#查看玩家数据并存档
		user=self.entry01.get()
		if Users.get(user,0) == 0:
			messagebox.showinfo(f'History of {user}',f'There is no information about {user}')
		else:
			hiswindow=Tk()
			hiswindow.title('History')
			hiswindow.geometry('250x300+500+250')
			lab01=Label(hiswindow,text=f'玩家:{user}')
			lab01.grid(row=0,column=0,padx=10,pady=10)		
			lab02=Label(hiswindow,text=f"得分:{Users[user]['score']}")
			lab02.grid(row=1,column=0,padx=10,pady=10)	
			lab03=Label(hiswindow,text=f"答案:{Users[user]['answer']}")
			lab03.grid(row=2,column=0,padx=10,pady=10)		
			lab03=Label(hiswindow,text=f"历史猜测:{Users[user]['guess']}")
			lab03.grid(row=3,column=0,padx=10,pady=10)	
			btn04=Button(hiswindow,text='返回',command=hiswindow.destroy)
			btn04.grid(row=4,column=0,padx=10,pady=10)	

			#存档到database['GuessFigure']
			#date={'玩家':user,'得分':Users[user]['score'],'答案':Users[user]['answer'],'历史猜测':Users[user]['guess']}
			#collection.insert_one(date)
		pass

	def over(self):
		#结束游戏
		self.quit()
		pass

	
if __name__ == '__main__':
	#数据库
	'''client = MongoClient()
	database = client['Game']
	collection = database['GuessFigure']'''

	#输入用户名
	root=Tk()
	root.title('猜数字游戏')
	root.geometry('500x400+400+200')
	frame=WindowforGame(root)
	root.mainloop()
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198

打包成.exe

1、win+r输入cmd打开命令运行框
2、输入 e:进入python游戏程序所在e盘
3、cd +python游戏程序所在文件夹路径
4、在该文件夹路径下安装Pyintaller,指令如下

pip installer Pyintaller
  • 1

5、输入指令Pyinstaller -F -w -i tubiao.ico GuessFigure.py
其中:tubiao.ico为.exe文件的图标(可在网上找通过格式工厂转换格式),GuessFigure.py为该程序名称,图标和程序应存放在同一文件夹下。

打包后如下图:
在这里插入图片描述
.exe文件在dist文件夹下
在这里插入图片描述

运行结果

1、游戏开始界面,可输入玩家名,选择游戏难易程度,并查看当前玩家历史游戏记录。因未连接数据库,每一次关闭游戏无法保存,只记录当前游戏多名玩家数据。
新手:0~128,有7次机会
基础:0~256,有8次机会
中等:0~512,有9次机会
困难:0~1024,有10次机会
在这里插入图片描述
2、猜数字界面:答案范围和剩余次数动态刷新。
在这里插入图片描述
在这里插入图片描述
3、答对加分提示,加分多少与剩余次数相等。
在这里插入图片描述
4、查询三下伍除二的历史游戏记录。'|'为一次游戏的分割符。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/233900
推荐阅读
相关标签
  

闽ICP备14008679号