題目描述
使用 Python 標準庫 tkinter 撰寫 GUI 版本的猜數游戲, 每次猜數之前要啟動游戲并設定猜數范圍和最大猜測次數等引數, 退出游戲時顯示戰績(共玩幾次, 猜對幾次) 資訊
代碼實作:
import random
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
root = tkinter.Tk()
#視窗標題
root.title('猜數游戲')
canvas=tkinter.Canvas(root,width=400,height=400)#創建一個畫布,宣告寬和高
canvas.create_text(200,50,text="歡迎來到猜數游戲",fill="blue",font=('boldface', 14))#畫布名稱,顏色,字體大小
canvas.pack()
#視窗初始大小
root.geometry('400x250')
#不允許改變視窗大小
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=60, y=120, width=100, height=20)
#用戶猜數并輸入的文本框
entryNumber = tkinter.Entry(root, width=100, textvariable=varNumber)
entryNumber.place(x=160, y=120, width=100, 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']=='開始游戲':
#每次游戲時允許用戶自定義數值范圍
#玩家必須輸入正確的數
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'] = '開始游戲'
#禁用文本框
entryNumber['state'] = 'disabled'
#已猜次數加1
right.set(right.get() + 1)
else:
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'] = '開始游戲'
#禁用文本框
entryNumber['state'] = 'disabled'
else:
button['text'] = '剩余次數:' + str(total-already.get())
#在視窗上創建按鈕,并設定按鈕點擊事件處理函式
button = tkinter.Button(root, text='開始游戲', command=buttonClick)
button.place(x=140, y=180, width=80, height=20)
#啟動訊息主回圈
root.mainloop()
效果展示:
運行結果:(進入主界面當沒有點擊開始游戲按鈕時 文本框禁止輸入)

點擊開始游戲后:(進行猜數范圍的設定)


范圍設定后 進行猜數次數的限制

然后回到主界面開始猜數:
數猜小了:

數猜大了:

數猜對了:

次數用完了:(顯示游戲結束并顯示正確結果)

關閉主視窗后:(顯示玩游戲的次數,正確的次數等)

完結
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/227991.html
標籤:其他
