python成语游戏代码_用python的TK模块实现猜成语游戏(附源码)
1 classGameWindow(object):2 """创建游戏运行窗口并加载相关的控件"""
3
4 def __init__(self):5 """初始化窗口"""
6 #创建一个根窗口
7 self.win =tk.Tk()8 self.win.title("史上最污猜成语") #标题
9 self.win.geometry("500x500+500+100") #设置尺寸
10 self.win.resizable(width=False, height=False) #宽高不可变
11 self.v1 = tk.StringVar(self.win) #显示答案的标签
12 self.v2 = tk.StringVar(self.win) #答案是否正确的标签
13 self.v_screen = tk.StringVar(self.win) #显示下一关的标签
14 self.v_problems = tk.StringVar(self.win) #一个显示问题的可变标签
15 self.results = [] #创建一个记录答案长度的变量
16 self.eles = [] #创建一个记录界面元素的列表
17 self.list_button = [] #存放键盘可变文字对象
18 self.screen_num = [1] #记录当前是第几关,使用可变类型将地址引用
19 self.sum_screen = len(dict_problems) #获取当前的总关卡数
20 self.player_answers = self.player_answer() #记录目前已回答的关数的情况
21
22 defcreate_label(self):23 """创建窗口所有的标签"""
24 #标签显示第几关
25 dir1 = tk.Label(self.win, bg="yellow", textvariable=self.v_screen,26 fg="blue", font=("宋体", 20, "bold"))27 dir1.pack(side=tk.TOP, fill=tk.X)28 self.eles.append(dir1)29 #创建一个标签"答案"
30 dir2 = tk.Label(self.win, bg="red", text="答案:",31 font=("宋体", 20, "bold"))32 dir2.place(x=0, y=200) #位置坐标控制
33 self.eles.append(dir2)34 #创建一个换行标签
35 dir3 = tk.Label(self.win, bg="#00F000", textvariable=self.v_problems,36 wraplength=400, justify="left",37 fg="blue", font=("宋体", 20, "bold"), height=4)38 dir3.pack(fill=tk.X)39 self.eles.append(dir3)40 #一个空白的标签等待用户输入答案
41 dir4 = tk.Label(self.win, bg="green", textvariable=self.v1,42 font=("宋体", 20, "bold"))43 dir4.place(x=100, y=200)44 self.eles.append(dir4)45 #一个空白标签显示答案错误时
46 dir5 = tk.Label(self.win, textvariable=self.v2, fg="red",47 font=("宋体", 12, "bold"))48 dir5.place(x=100, y=240)49 self.eles.append(dir5)50
51 defcreate_button(self):52 """创建游戏窗口所有的按钮"""
53 #采用嵌套循环创建4*8个按钮
54 for j in range(4):55 for g in range(8):56 button1 = ButtonNew(self.win, v1=self.v1,57 v2=self.v2, result=self.results,58 screen_num=self.screen_num)59 #设置按钮的位置
60 key_b = button1.create_button(place_b=(30 + g * 54, 280 + j * 45))61 self.list_button.append(button1.v_name) #将每一个标签加入列表
62 self.eles.append(key_b) #所有的按钮加入列表
63 self._set_key(self.screen_num[0]) #设置相应关数的值
64
65 #创建一个用来清除答案的按钮
66 cls = tk.Button(self.win, text="清除", command=self._cls_function,67 bg="black", fg="white", font=("宋体", 16, "bold"))68 cls.place(x=250, y=200)69 self.eles.append(cls)70 #创建一个用来提示答案的按钮
71 pmt = tk.Button(self.win, text="提示",72 command=lambda: self._prompt_button(self.screen_num[0]),73 bg="red", fg="white", font=("宋体", 16, "bold"))74 pmt.place(x=320, y=200)75 self.eles.append(pmt)76 #创建一个用来确定答案的按钮
77 istrue = tk.Button(self.win, text="确定", command=self._ensure_button,78 bg="red", fg="white", font=("宋体", 16, "bold"))79 istrue.place(x=390, y=200)80 self.eles.append(istrue)81 #创建一个返回上一关的按钮
82 last_sc = tk.Button(self.win, text="上一关", command=self._last_sc_button,83 bg="red", fg="white", font=("宋体", 16, "bold"))84 last_sc.place(x=250, y=155)85 self.eles.append(last_sc)86 #创建一个返回选关窗口的按钮
87 return_button = tk.Button(self.win, text="返回选关", command=self._return_lock,88 bg="red", fg="white", font=("宋体", 16, "bold"))89 return_button.place(x=10, y=155)90 self.eles.append(return_button)91
92 defbefore_screen(self):93 """创建一个进入游戏的窗口所有元素"""
94 #空白标签
95 label1 =self.the_label()96 #标签显示"史上最污猜成语"
97 label2 = self.the_label("史上最污猜成语")98 #空白标签
99 label3 =self.the_label()100 #显示淡绿色背景
101 label4 = self.the_label(font=("宋体", 250, "bold"), bg="#00ee00")102 #显示作者“天宇之游”
103 dirx = tk.Label(self.win, bg="#00ee00", text="----天宇之游",104 fg="blue", font=("宋体", 20, "bold"))105 dirx.place(x=250, y=200)106 list_labels =[label1, label2, label3, label4, dirx]107 #创建一个进入游戏的按钮
108 go_game = tk.Button(self.win, text="开启污旅程",109 command=lambda: self._start_game(go_game, *list_labels),110 bg="red", fg="white", activebackground="yellow",111 activeforeground="red", font=("宋体", 30, "bold"))112 go_game.place(x=130, y=300)113
114 deflock_screen(self):115 """创建一个展示所有的关卡及关卡解锁的窗口"""
116 #空白区域
117 dir_k = tk.Label(self.win, bg="#3b9dff", font=("宋体", 20, "bold"))118 dir_k.pack(fill=tk.X)119 self.eles.append(dir_k)120 #显示相关信息
121 dir1 = tk.Message(self.win, bg="blue", text="选择关卡",122 fg="red", font=("宋体", 20, "bold"),123 width=200)124 dir1.pack(fill=tk.X)125 self.eles.append(dir1)126 #创建一块画布,所有的元素都放置在画布上
127 cans = tk.Canvas(self.win, #根窗口
128 bg="#92dba0", #设置画布的颜色
129 height=500,130 borderwidth=0)131 cans.pack(fill=tk.X)132 self.eles.append(cans) #添加到列表便于删除
133
134 for i in range(self.sum_screen): #按照已有的关卡数生成相应的按钮数量
135 j = i % 10 / 10.0
136 k = i // 10 / 10
137 #传入当前的关数和加载游戏窗口的函数
138 bn_st =ButtonSelect(cans, self.screen_num,139 self._game_go, self.eles,140 self.player_answers[i])141 bn_st.create_button(place=(j, k))142 bn_st.set_name(str(i + 1))143
144 defafter_screen(self):145 """一个游戏结束的画面窗口"""
146 self.the_label() #空白标签
147 text1 = "恭喜你!"
148 text2 = "成功晋升为老司机!"
149 #标签显示结束语
150 self.the_label(text1)151 self.the_label(text2)152 self.the_label() #空白标签
153 #创建一个结束的按钮
154 go_game = tk.Button(self.win, text="再见!",155 command=lambda: exit(),156 bg="red", fg="white",157 activebackground="yellow",158 activeforeground="red",159 font=("宋体", 30, "bold"))160 go_game.place(x=170, y=300)161
162 def the_label(self, text=None, side=tk.TOP,163 font=("宋体", 40, "bold"), bg="green"):164 """创建显示标签"""
165 dir1 = tk.Label(self.win, bg=bg, text=text,166 fg="black", font=font)167 dir1.pack(side=side, fill=tk.X)168 returndir1169
170 def_return_lock(self):171 """返回选择关卡的界面"""
172 #清空标签
173 self.list_button.clear()174 #清除界面的所有元素
175 self.clear_screen()176 #清空元素记录列表
177 self.eles.clear()178 #将关数记录还原到1
179 self.screen_num[0] = 1
180 #调用界面创建函数
181 self.screen_control(1)182
183 defclear_screen(self):184 """清除界面所有元素的函数"""
185 try:186 for ele inself.eles:187 ele.destroy() #删除所有的元素
188 exceptException as re:189 print(re)190
191 def_set_key(self, num):192 """设置所有的按键变量的值"""
193 listx = rm.sample(dict_key[str(num)], len(dict_key[str(num)])) #打乱顺序
194 #设置所有的键盘上的文字
195 for j, k inenumerate(self.list_button):196 k.set(listx[j]) #获取文字设置按键值
197
198 def_next_screen(self):199 """当答案正确时生成下一关的按钮"""
200 #创建一个用来确定答案的按钮
201 next_b = tk.Button(self.win, text="下一关", command=lambda: self._next_button(next_b),202 bg="red", fg="white",203 font=("宋体", 16, "bold"))204 next_b.place(x=390, y=155)205 returnnext_b206
207 def_next_button(self, next_b):208 """当点击下一关按钮时响应函数"""
209 try:210 #判断是否已经是最后一关
211 if self.screen_num[0] >=len(dict_problems):212 #print("这已经是最后一关")
213 #清除界面所有的元素
214 self.clear_screen()215 #加载游戏结束的界面
216 self.screen_control(3)217 else:218 if abt.the_answer isTrue:219 self.__update_screen() #更新窗口
220 else:221 self.v2.set("答案错误!")222
223 #将上一关的选关按钮变为绿色
224 self.player_answers[self.screen_num[0] - 2] = "1"
225 #同时将当前的数据同步到文件
226 file = open("./player_answers.txt", "w")227 file.write("".join(self.player_answers)) #转化成字符串
228 exceptException as re:229 print(re)230 else:231 #删除按钮本身
232 next_b.destroy()233 finally:234 file.close()235
236 def_last_sc_button(self):237 """上一关按钮的响应函数"""
238 #判断目前是不是第一关
239 if self.screen_num[0] == 1:240 self.v2.set("这是第一关!")241 else:242 self.screen_num[0] -= 2 #减少一关
243 self.__update_screen()244
245 def __update_screen(self):246 """更新窗口的的函数"""
247 #显示问题
248 self.v_problems.set(dict_problems[str(self.screen_num[0] + 1)])249 self.screen_num[0] += 1 #指针指向下一关
250 #改变关数的标签
251 self.v_screen.set("第" + str(self.screen_num[0]) + "关")252 #更新所有的按键值
253 self._set_key(self.screen_num[0])254 #清除v1和v2标签的内容
255 self._cls_function()256 self.v2.set("")257 #print("成功执行!")
258
259 def _start_game(self, *args):260 """进入游戏的响应函数"""
261 try:262 for ele inargs:263 ele.destroy() #删除所有的元素
264 exceptException as re:265 print(re)266 self.screen_control(num=1) #进入选关界面
267
268 def_game_go(self):269 str_num =str(self.screen_num[0])270 self.v_screen.set("第" + str_num + "关") #设置第几关标签
271 self.v_problems.set(dict_problems[str_num]) #设置问题
272 self.screen_control(2) #进入游戏界面
273
274 def_cls_function(self):275 """清除按钮响应事件函数"""
276 self.results.clear()277 self.v1.set("") #清空标签
278
279 def_ensure_button(self):280 """确定开关的事件函数"""
281 if abt.the_answer isTrue:282 self.v2.set("答案正确!")283 self._next_screen() #在窗口创建一个按钮
284 else:285 self.v2.set("答案错误!")286
287 def_prompt_button(self, key):288 """提示开关的事件函数"""
289 if abt.the_answer is True: #将可能打开的开关关闭
290 abt.the_answer =False291 self.results.clear() #先清空原来的答案
292 self.results.append(list_answer[int(key)]) #加入提示
293 self.v1.set(list_answer[int(key)]) #设置提示答案
294
295 def screen_control(self, num=0):296 """创建一个窗口控件显示的控制函数"""
297 if num ==0:298 self.before_screen() #开始显示游戏进入界面
299 elif num == 1:300 self.lock_screen() #进入选关界面
301 elif num == 2:302 self.create_label() #传入所有可变的参数创建所有的标签
303 self.create_button() #传入空白标签对象创建所有的按钮
304 elif num == 3:305 self.after_screen() #进入游戏结束界面
306
307 defrun(self):308 self.win.mainloop() #窗口运行
309
310 defplayer_answer(self):311 """更新记录的玩家回答的状态"""
312 #获取目前的总关数
313 number1 =self.sum_screen314 try:315 #读取文件中的关数信息,如果数目不变则不更新文件,改变则初始化文件
316 f = open("./player_answers.txt", "r")317 str3 =f.read()318 #print(str3)
319 exceptException as re:320 print(re)321 finally:322 f.close()323
324 if number1 ==len(str3):325 returnlist(iter(str3))326 else: #初始化
327 str2 = "0" *number1328 try:329 f1 = open("./player_answers.txt", "w")330 f1.write(str2) #更新信息
331 exceptException as re:332 print(re)333 finally:334 f1.close()335 returnlist(iter(str2))336
337
338 win =GameWindow()339 sc =win.screen_control340 bs =win.before_screen341 as_ =win.after_screen342 ls =win.lock_screen343 run =win.run344
345
346 defmain():347 sc()348 run() #游戏运行
349
350
351 if __name__ == "__main__":352 main()353 #初始化记录文件
354 #str2 = "0"*len(dict_key)
355 #f1 = open("./player_answers.txt", "w")
356 #f1.write(str2) # 更新信息
357 #f1.close()
python成语游戏代码_用python的TK模块实现猜成语游戏(附源码)相关推荐
- python 经验模态分解_经验模态分解下的日内趋势交易策略 附源码
策略分析过程参考 广发证券的研究报告. 其中EMD库的安装参考 1.指标 在每天分钟数据积累mlen个bar的位置,将今日的数据通过EMD分解为噪声部分和趋势部分. 定义信噪比 SNR = std( ...
- 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)
前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...
- 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)
如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...
- Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码)
Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码) 程序之美 泡泡 一直被孩子认为是神奇的东西.记得儿时,经常 趁大人不注意,偷偷抓一把洗衣粉撞到口袋里,然后自己悄悄的找来一个小瓶子, ...
- Spark 3.0 发布了,代码拉过来,打个包,跑起来!| 附源码编译
作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...
- Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译
作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...
- python外星人入侵游戏代码_黄哥Python:猜数字游戏代码
"""猜数字游戏 黄哥所写黄哥Python培训 2020 全新升级课程"""import randomcomputer_num = rand ...
- python推箱子游戏代码_用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程...
不得不说,Python小游戏是最适合入门编程的项目,因为太简单! 无论懂或完全不懂python,这样的小游戏,你都可以直接开发出来,原因很简单: 在详细教程里,会有从零基础开始,一步一步的教你完成这个 ...
- python接水果游戏代码_使用Python开发一个超级简单的接水果小游戏,零基础也可以学会...
Pylash项目地址 创建项目 这样的话我们的项目就创建好了,然后只用往Main.py里填写代码运行即可. 编写Hello World小程序 编写游戏 有以上对pylash的小小了解,我们接下来可以开 ...
最新文章
- 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...
- 【经典面试题一】最长公共子序列(经典动态规划题)
- java 8 stream()
- springboot 热部署的两种方式
- 数据结构——队列(queue)
- oracle中序列号的使用
- LeetCode 46. 全排列(回溯)
- php中 怎么去除,php如何去掉链接
- 太空大战背景移动的几种方式
- python中split的用法-python中的split()函数的用法
- 搜索引擎网站登陆入口,提交入口
- java安装后打开jar文件_java环境变量配置好后双击jar文件无法运行的解决办法
- 配置hive元数据到mysql后启动不了 java.sql.SQLException: Access denied for user ‘root‘@‘hd101‘ (using password:
- 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
- (转)用4年多时间, 带领微软重登全球市值第一宝座, 纳德拉是如何做到的?
- 安卓 linux服务器文件夹,Android系统下根目录下文件
- LGE-MRI是什么呢?
- oracle 19c_windos_64位 百度云下载。WINDOWS.X64_193000_db_home.zip。不需要积分
- BRDF公式的详细解析
- JavaScript基本数据类型以及内存分配