Python tkinter版猜数游戏

程序启动后,首先需要启动一次游戏并设置数值范围和猜测次数,然后可以猜数并输入,程序会根据实际情况进行大小提示,退出程序时提示战绩,例如共玩几次和成功几次。

import random

import tkinter

import tkinter.messagebox

import tkinter.simpledialog

root = tkinter.Tk()

#窗口标题

root.title('猜数游戏--by董付国')

#窗口初始大小和位置

root.geometry('280x80+400+300')

#不允许改变窗口大小

root.resizable(False, False)

#用户猜的数

varNumber = tkinter.StringVar(root, value='0')

#允许猜的总次数

totalTimes = tkinter.IntVar(root, value=0)

#已猜次数

already = tkinter.IntVar(root, value=0)

#当前生成的随机数

currentNumber = tkinter.IntVar(root, value=0)

#玩家玩游戏的总次数

times = tkinter.IntVar(root, value=0)

#玩家猜对的总次数

right = tkinter.IntVar(root, value=0)

lb = tkinter.Label(root, text='请输入一个整数:')

lb.place(x=10, y=10, width=100, height=20)

#用户猜数并输入的文本框

entryNumber = tkinter.Entry(root, width=140, textvariable=varNumber)

entryNumber.place(x=110, y=10, width=140, height=20)

#只有开始游戏以后才允许输入

entryNumber['state'] = 'disabled'

#关闭程序时提示战绩

def closeWindow():

message = '本次共玩游戏 {0} 次,猜对 {1} 次!\n欢迎下次再玩!'.format(times.get(), right.get())

tkinter.messagebox.showinfo('战绩', message)

root.destroy()

root.protocol('WM_DELETE_WINDOW', closeWindow)

#按钮单击事件处理函数

def buttonClick():

if button['text']=='Start Game':

#每次游戏时允许用户自定义数值范围

#玩家必须输入正确的数

while True:

try:

start = tkinter.simpledialog.askinteger('允许的最小整数', '最小数', initialvalue=1)

break

except:

pass

while True:

try:

end = tkinter.simpledialog.askinteger('允许的最大整数', '最大数', initialvalue=10)

break

except:

pass

#在用户自定义的数值范围内生成随机数

currentNumber.set(random.randint(start, end))

#用户自定义一共允许猜几次

#玩家必须输入正确的整数

while True:

try:

t = tkinter.simpledialog.askinteger('最多允许猜几次?', '总次数', initialvalue=3)

totalTimes.set(t)

break

except:

pass

#已猜次数初始化为0

already.set(0)

button['text'] = '剩余次数:' + str(t)

#把文本框初始化为0

varNumber.set('0')

#允许用户开始输入整数

entryNumber['state'] = 'normal'

#玩游戏的次数加1

times.set(times.get() + 1)

else:

#一共允许猜几次

total = totalTimes.get()

#本次游戏的正确答案

current = currentNumber.get()

#玩家本次猜的数

try:

x = int(varNumber.get())

except:

tkinter.messagebox.showerror('抱歉', '必须输入整数')

return

if x == current:

tkinter.messagebox.showinfo('恭喜', '猜对啦')

button['text'] = 'Start Game'

#禁用文本框

entryNumber['state'] = 'disabled'

right.set(right.get() + 1)

else:

#已猜次数加1

already.set(already.get()+1)

if x > current:

tkinter.messagebox.showerror('抱歉', '猜的数太大了')

else:

tkinter.messagebox.showerror('抱歉', '猜的数太小了')

#可猜次数用完了

if already.get()==total:

tkinter.messagebox.showerror('抱歉', '游戏结束了,正确的数是:'+str(currentNumber.get()))

button['text'] = 'Start Game'

#禁用文本框

entryNumber['state'] = 'disabled'

else:

button['text'] = '剩余次数:' + str(total-already.get())

#在窗口上创建按钮,并设置事件处理函数

button = tkinter.Button(root, text='Start Game', command=buttonClick)

button.place(x=10, y=40, width=250, height=20)

#启动消息主循环

root.mainloop()

启动程序:

设置数值范围:

设置数值范围:

设置允许猜几次:

猜错了:

猜对了:

猜错的情况:

退出程序时显示战绩:

原文发布于微信公众号 - Python小屋(Python_xiaowu)

原文发表时间:2016-10-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

如何破解安卓手机上的图形锁(九宫格锁)

安卓手机的图形锁(九宫格)是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能。最少需要连接4个点,最多能连接9个点。网上也有暴力删除手机图形锁的方法,即直...

2627
来自专栏生信宝典

Python解析psiBlast输出的JSON文件结果

什么是JSON文件 JSON文件是一种轻量级的数据存储和交换格式,其实质是字典和列表的组合。这在定义生信分析流程的参数文件中具有很好的应用。 { "公众...

2145
来自专栏web前端教室

【蒙圈】自己写的Js,自己不认识了?

但是,下课之前我说,今天的作业,如何如何要求,格式什么样,标明用了多长时间,然后就有同学在学习群里问我,。。原话记不太清了,大概意思就是,自己写的看不明白了,还...

1454
来自专栏小樱的经验随笔

BugkuCTF 计算器

前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文...

27310
来自专栏章鱼的慢慢技术路

程序员算法时间空间复杂度速查表

1545
来自专栏何俊林

Android Multimedia框架总结(八)Stagefright框架之AwesomePlayer及数据解析器

前言:前面一篇分析了mediaplayerservice及MediaPlayer中的CS模型,但是对于如何能把数据解析出来,渲染到最终的SurfaceView上...

2559
来自专栏小樱的经验随笔

CTF---Web入门第四题 Forms

Forms分值:10 来源: Ph0enix 难度:易 参与人数:4945人 Get Flag:2776人 答题人数:2824人 解题通过率:98% 似乎有...

32811
来自专栏落影的专栏

Audio Unit播放PCM文件

前言 相关文章: 使用VideoToolbox硬编码H.264 使用VideoToolbox硬解码H.264 使用AudioToolbox编码AAC 使...

5186
来自专栏码生

Swift2转Swift3

接触swift 已经有一年多的时间了,由最初的OC代码转为 swift 代码,然后从 swift 2.3 转为 swift 3。每次的转换都感觉是将项目整个的翻...

1605
来自专栏小詹同学

爬点重口味的 。

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,对面的女孩看过来(邪恶的一笑),让人想入非非啊,一看卧槽,左边这妹子彻底赢了,这(**)这么大,还这么漂亮,...

1352

扫码关注云+社区

领取腾讯云代金券