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模块实现猜成语游戏(附源码)相关推荐

  1. python 经验模态分解_经验模态分解下的日内趋势交易策略 附源码

    策略分析过程参考  广发证券的研究报告. 其中EMD库的安装参考 1.指标 在每天分钟数据积累mlen个bar的位置,将今日的数据通过EMD分解为噪声部分和趋势部分. 定义信噪比 SNR = std( ...

  2. 用Python几行代码实现简单的人脸识别,10分钟完成(附源码)

    前言 今天,我们用Python实现简单的人脸识别技术! Python里,简单的人脸识别有很多种方法可以实现,依赖于python胶水语言的特性,我们通过调用包可以快速准确的达成这一目的.这里介绍的是准确 ...

  3. 【Python】基金/股票 最大回撤率计算与绘图详解(附源码和数据)

    如果你想找的是求最大回撤的算法,请跳转:[Python] 使用动态规划求解最大回撤详解 [Python]基金/股票 最大回撤率计算与绘图详解(附源码和数据) 0. 起因 1. 大成沪深300指数A 5 ...

  4. Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码)

    Adroid游戏开发实例讲解(五)-哄娃神器之随机五彩泡(附源码) 程序之美 泡泡 一直被孩子认为是神奇的东西.记得儿时,经常 趁大人不注意,偷偷抓一把洗衣粉撞到口袋里,然后自己悄悄的找来一个小瓶子, ...

  5. Spark 3.0 发布了,代码拉过来,打个包,跑起来!| 附源码编译

    作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...

  6. Spark3.0发布了,代码拉过来,打个包,跑起来!| 附源码编译

    作者 | 敏叔V587 责编 | 徐威龙 封图| CSDN 下载于视觉中国 Spark3.0已经发布有一阵子了,官方发布了预览版,带来了一大波更新,对于我们程序员来说,首先当然是代码拉过来,打个包,跑 ...

  7. python外星人入侵游戏代码_黄哥Python:猜数字游戏代码

    """猜数字游戏 黄哥所写黄哥Python培训 2020 全新升级课程"""import randomcomputer_num = rand ...

  8. python推箱子游戏代码_用python入门知识做推箱子游戏,若能打过第三关,则可以学会编程...

    不得不说,Python小游戏是最适合入门编程的项目,因为太简单! 无论懂或完全不懂python,这样的小游戏,你都可以直接开发出来,原因很简单: 在详细教程里,会有从零基础开始,一步一步的教你完成这个 ...

  9. python接水果游戏代码_使用Python开发一个超级简单的接水果小游戏,零基础也可以学会...

    Pylash项目地址 创建项目 这样的话我们的项目就创建好了,然后只用往Main.py里填写代码运行即可. 编写Hello World小程序 编写游戏 有以上对pylash的小小了解,我们接下来可以开 ...

最新文章

  1. 判断小数是否相等_四年级上册数学填空+计算+判断易错题整理练习,收藏练一练!...
  2. 【经典面试题一】最长公共子序列(经典动态规划题)
  3. java 8 stream()
  4. springboot 热部署的两种方式
  5. 数据结构——队列(queue)
  6. oracle中序列号的使用
  7. LeetCode 46. 全排列(回溯)
  8. php中 怎么去除,php如何去掉链接
  9. 太空大战背景移动的几种方式
  10. python中split的用法-python中的split()函数的用法
  11. 搜索引擎网站登陆入口,提交入口
  12. java安装后打开jar文件_java环境变量配置好后双击jar文件无法运行的解决办法
  13. 配置hive元数据到mysql后启动不了 java.sql.SQLException: Access denied for user ‘root‘@‘hd101‘ (using password:
  14. 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
  15. (转)用4年多时间, 带领微软重登全球市值第一宝座, 纳德拉是如何做到的?
  16. 安卓 linux服务器文件夹,Android系统下根目录下文件
  17. LGE-MRI是什么呢?
  18. oracle 19c_windos_64位 百度云下载。WINDOWS.X64_193000_db_home.zip。不需要积分
  19. BRDF公式的详细解析
  20. JavaScript基本数据类型以及内存分配

热门文章

  1. 元月元日是哪一天_下元节是哪一天,几月几日
  2. cfA. Vova and Train
  3. 木马另类删除文件的方法
  4. QT界面:控件随界面大小自适应变化
  5. 《前端》解决背景适配不同屏幕大小,如何解决因屏幕大小的不同而导致背景的放大或缩小。
  6. 新买了块翼联的AX200的网卡,结果开移动热点的时候遇到了点问题
  7. 智能家居“灵魂”是什么?
  8. JAVA json 三种格式
  9. 为何电动车电池充不了电或充不满电?与充电桩有关系吗?
  10. QT QWebView