24点GUI
20年3月25日 · 蒋安尧-10193903429 819 人阅读
在本次的大作业中,我设计了一个24点小游戏。在这个小游戏中,我设计了用于实现排行榜的游戏账户类,开始游戏后生成四个数字的随机生成器,一个用于倒计时的toplevel,一个验证算式的函数等功能。
图1 账户的窗口界面
玩家首先需要在账号输入框中输入账号,并在菜单中点击开户。
接下来,在玩家点击开始游戏后,我需要随机生成四个计算24点所需的数字,为了确保这四个数字可以算到24点,我调用验证函数进行验证。同时,我把“开始游戏”改为“再来一次”,更符合游戏的设计,并同时弹出倒计时窗口,塑造分秒必争的紧张感。最后,我将账户类的尝试次数加一,更新类的内容。
此处介绍我采用的弹出式倒计时窗口,由于网络上大部分的倒计时窗口都使用sleep()函数实现,这会使得主窗口无法运转,与我的思路不符。因此我使用了弹出式窗口结合tkinter的after()函数每隔1000毫秒刷新一次的方式实现了一个倒计时按钮,使玩家可以在输入正确答案后立即退出倒计时并完成验证。
在玩家完成答案的输入后,我们对其进行验证。首先,我们判断其输入格式是否正确,若没有输入或者直接打一个24在答案框中的情况都将算错。随后,我们对于其输入算式进行判断,确保其使用的数字是我们所给出的数字组合。这一步我采用了正则表达式较为快速的读取出玩家输入框中的数字集合,并将其与给出的数字集合进行比较,这个判断方法直接且快速。最后,验证其答案是否为24,并给出一个弹出窗口作为提示。本部分使用了try except语句以避免报错。
接下来,我设计了一个历史排行榜功能,便于新玩家了解过去玩家的成绩。
最后则是一个参考答案的函数,这个函数引用了网络上的一个算法,这个算法比我所设想的简短许多,只使用了三个中缀表达式以构成算式,即可以完成枚举。虽然未找到原作者这样做可以完全枚举的数学证明,但是对于本程序已经完全够用。
图2:参考答案示范窗口
图3:点击开始游戏后的界面,弹出倒计时,并提示您现在的战绩
图4:排行榜的设计与显示
在本次大作业中,我尽量展示了我所掌握的一些tkinter知识,但是不可否认,Tkinter并非一个实现GUI的优秀选择,其窗口使用代码构建的方式并不直观,如果使用pyqt5+qtdesigner设计,可能会取得更好的效果。
Python3Turtle