使用python的tkinter写的一个猜数字小游戏

事先声明:我写的只是给初学者看的,希望给初学者提供一点参考。请大佬莫要取笑。

在学习python的过程中,看到书上有一个猜数字的小游戏设计,在没有看书中源代码之前,想想自己能否依照之前看的tkinter的知识部分写一个出来。尝试了半天,还真的写出来了,小开心一下。附上我自己的代码以及原书中的代码。代码虽然不同,但结果基本一样。不过我还加了点料,如果10次失败或者猜中了,是可以重新开始下一轮猜游戏的,点击重新开始按钮就好。

我设计的界面如下:
游戏界面图

我写的代码略粗糙,后面有时间再打磨吧。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2020/3/19 14:16
# @Author  : Lihua
# @Version : 1.0
# @Contact : heei3k@hotmail.com
# @File    : guessdigit.py
# @Software: PyCharm


from tkinter import *
import random

root=Tk()

guess_num,max_n,min_n,a=0,1024,1,0


def init():
    global guess_num,max_n,min_n,a
    guess_num=0
    max_n = 1024
    min_n = 1
    a = random.randint(min_n, max_n)
    print("待猜测的数字为"+str(a))
    label_str.set("请输入你所猜的数字,数字为"+str(min_n)+"到"+str(max_n)+"之间的整数")

def guess():
    global guess_num,max_n,min_n,a
    try:
        val=int(entry.get())
        print(val)
    except Exception as e:
        label_str.set("您的输入有误,请输入一个" + str(min_n) + "到" + str(max_n) + "之间的整数")
        print(e)
        return
    guess_num += 1
    if val>1024 or val<1:
        label_str.set("您的输入有误,请输入一个"+str(min_n)+"到"+str(max_n)+"之间的整数")
    elif val==a:
        label_str.set("恭喜您已猜中,您用了"+str(guess_num)+"次机会")
        button1["state"] = "disabled"
        button3["state"] = "active"
    elif val>a and guess_num<10:
        max_n=val
        label_str.set("请输入一个大于等于"+str(min_n)+"小于"+str(val)+"的数")
    elif val<a and guess_num<10:
        min_n=val
        label_str.set("请输入一个大于"+str(val)+"小于等于"+str(max_n)+"的数")
    else:
        label_str.set("您已经猜10次未中,请重新开始游戏")
        button1["state"]="disabled"
        button3["state"] = "active"

def retry():
    init()
    button1["state"] = "active"
    button3["state"] = "disabled"


def close():
    root.destroy()

root.title("猜数字游戏")
root.geometry("400x100+150+150")
label_str = StringVar()
label_str.set("请输入你所猜的数字,数字为"+str(min_n)+"到"+str(max_n)+"之间的整数")
label=Label(root,textvariable=label_str)
entry=Entry(root,width=30,fg="red")
entry.place(relx=0.1,rely=0.5)
button1=Button(root,text="猜",command=guess)
button1.place(relx=0.65,rely=0.45)
button2=Button(root,text="关闭",command=close)
button2.place(relx=0.75,rely=0.45)
button3=Button(root,text="重新开始",command=retry)
button3.place(relx=0.85,rely=0.45)
button3["state"]="disabled"
label.pack()

init()

root.mainloop()

下面部分是原书的代码。书名是清华大学出版社出版的《Python项目案例开发从入门到实战》。

import tkinter as tk
import sys
import random
import re

number = random.randint(0,1024)
running = True
num = 0
nmaxn = 1024
nminn = 0

def eBtnClose(event):
    root.destroy()

def eBtnGuess(event):
    global nmaxn
    global nminn
    global num
    global running
    if running:
        val_a = int(entry_a.get())
        if val_a == number:
            labelqval("恭喜答对了!")
            num+=1
            running = False
            numGuess()
        elif val_a < number:
            if val_a > nminn:
                nminn = val_a
                num+=1
                label_tip_min.config(label_tip_min,text=nminn)
            labelqval("小了哦")
        else:
            if val_a < nmaxn:
                nmaxn = val_a
                num+=1
                label_tip_max.config(label_tip_max,text=nmaxn)
            labelqval("大了哦")
    else:
        labelqval('你已经答对啦...')

def numGuess():
    if num == 1:
        labelqval('我靠!一次答对!')   
    elif num < 10:
        labelqval('= =十次以内就答对了牛。。。尝试次数:'+str(num))
    elif num < 50:
        labelqval('还行哦尝试次数:'+str(num))
    else:
        labelqval('好吧。。。。。您都试了超过50次了。。。。尝试次数:'+str(num))

def labelqval(vText):
    label_val_q.config(label_val_q,text=vText)   

root = tk.Tk(className="猜数字游戏")
root.geometry("400x90+200+200")

line_a_tip = tk.Frame(root)
label_tip_max = tk.Label(line_a_tip,text=nmaxn)
label_tip_min = tk.Label(line_a_tip,text=nminn)
label_tip_max.pack(side = "top",fill = "x")
label_tip_min.pack(side = "bottom",fill = "x")
line_a_tip.pack(side = "left",fill = "y")

line_question = tk.Frame(root)
label_val_q = tk.Label(line_question,width="80")
label_val_q.pack(side = "left")
line_question.pack(side = "top",fill = "x")

line_input = tk.Frame(root)
entry_a = tk.Entry(line_input,width="40")
btnGuess = tk.Button(line_input,text="猜")
entry_a.pack(side = "left")
entry_a.bind('<Return>',eBtnGuess)
btnGuess.bind('<Button-1>',eBtnGuess)
btnGuess.pack(side = "left")
line_input.pack(side = "top",fill = "x")


line_btn = tk.Frame(root)
btnClose = tk.Button(line_btn,text="关闭")
btnClose.bind('<Button-1>',eBtnClose)
btnClose.pack(side="left")
line_btn.pack(side = "top")

labelqval("请输入0到1024之间任意整数:")
entry_a.focus_set()

print(number)
root.mainloop()
很好,以下是一个简单的Python Tkinter小游戏。 该游戏一个猜数字游戏,玩家需要猜测电脑生成的随机数字。如果猜测正确,游戏结束并显示获胜消息。如果猜错了,游戏将继续,直到猜对为止。 ```python import tkinter as tk import random class GuessingGame: def __init__(self, master): self.master = master self.master.title("猜数字游戏") # 计数器以追踪猜测次数 self.guess_count = 0 # 电脑生成的随机数字 self.random_num = random.randint(1, 50) # 创建窗口组件 self.frames = tk.Frame(master) self.frames.pack() self.prompt_label = tk.Label(self.frames, text="我正在想一个数字,你能猜对吗?", font=("Helvetica", 12)) self.prompt_label.pack() self.guess_label = tk.Label(self.frames, text="猜一个数字(1-50):", font=("Helvetica", 12)) self.guess_label.pack() self.guess_entry = tk.Entry(self.frames, width=5, font=("Helvetica", 12)) self.guess_entry.pack() self.submit_button = tk.Button(self.frames, text="提交", command=self.check_guess) self.submit_button.pack() self.result_label = tk.Label(self.frames, text="", font=("Helvetica", 12)) self.result_label.pack() self.quit_button = tk.Button(self.frames, text="退出", command=self.master.quit) self.quit_button.pack() def check_guess(self): guess = int(self.guess_entry.get()) self.guess_count += 1 if guess == self.random_num: message = f"你猜对了!一共猜了 {self.guess_count} 次。" self.result_label.configure(text=message) self.submit_button['state'] = 'disabled' elif guess < self.random_num: self.result_label.configure(text="稍微大一点.") elif guess > self.random_num: self.result_label.configure(text="稍微小一点.") root = tk.Tk() game = GuessingGame(root) root.mainloop() ``` 这是一个简单的Tkinter小游戏示例,希望能帮助您学习如何使用Tkinter创建交互式GUI应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值