【tkinter 专栏】掷骰子游戏

这篇具有很好参考价值的文章主要介绍了【tkinter 专栏】掷骰子游戏。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本专栏将参考《Python GUI 设计 tkinter 从入门到实践》书籍(吉林大学出版社 ISBN: 9787569275001)所整理的 Python GUI 设计内容,结合笔者自身在项目实践过程中对于 GUI 开发的理解,主要围绕 tkinter 库进行 GUI 设计的详细介绍。

《Python GUI 设计tkinter从入门到实践(全彩版)》内容简介

《Python GUI设计tkinter从入门到实践》这本书以开发Python窗口程序常用的tkinter模块为主线,全面介绍了使用 tkinter 设计 Python GUI 程序的各方面技术。全书共分为18章,包括搭建开发环境、tkinter与GUI、tkinter窗口设计、tkinter布局管理、文本类组件、按钮类组件、选择列表与滚动条、容器组件、消息组件与对话框、菜单组件、进度条组件、Canvas绘图、鼠标键盘事件处理、数据库操作、文件操作、程序的打包发布、掷骰子游戏、学生成绩管理系统等内容。从用户学习与应用的角度出发,通过将知识点与实例结合的方式让读者学用结合,轻松理解;通过大量示意图和有趣应用,打造零压力学习的阅读氛围;利用两个实战项目将tkinter开发知识应用于实际项目中,以使读者亲身体验项目开发的全过程,力求为读者打造一本结合了“基础入门+应用开发+实战项目”一体化的Python tkinter开发图书。

感兴趣的读者可找来该书详细阅读。

本章内容导图

我们民间掷骰子是一个博弈点数猜大小的游戏,每次下注前,庄家先把三颗骰子放在有盖的器皿内部摇晃,参与者下注猜骰子点数大小,下注结束庄家打开器皿,计算骰子总点数的和,小于等于 10 为小,大于 10 为大,猜中者获胜。

1. 需求分析

掷骰子游戏来自于民间游戏,游戏以猜点数大小为主,该游戏简单易上手。本项目就是在 tkinter 窗口中模拟掷骰子游戏,对局角色有用户和电脑,用户可以自由选择点数为大或者小,而电脑选择的点数取决于之前骰子次数较多的点数。

2. 系统功能结构

本项目主要实现掷骰子游戏,主窗口中包括:单选按钮、随机点数的骰子、用户和玩家选择的点数以及开始按钮。整个游戏的主要功能包括:获取用户选择的点数、帮助电脑选择点数、将用户和电脑的选择结果显示在窗口中、判断用户和电脑的胜负结果。

掷骰子游戏系统功能结构:

3. 设计流程

【tkinter 专栏】掷骰子游戏,Python GUI 编程 —— tkinter,tkinter,GUI,python

4. 系统开发环境

  • 操作系统:
  • Python 版本:
  • Python 内置模块:tkinter、tkinter.ttk、tkinter.messagebox、time、random
  • 开发工具:

5. 系统预览

【tkinter 专栏】掷骰子游戏,Python GUI 编程 —— tkinter,tkinter,GUI,python

【tkinter 专栏】掷骰子游戏,Python GUI 编程 —— tkinter,tkinter,GUI,python

6. 窗口布局

窗口中的主要内容包括:单选框、三个骰子、用户、电脑的选择以及开始按钮。单选框用于帮助用户选择点数为大或者为小;三个骰子用于让用户看到投掷骰子的动画过程;下方通过两个 Label 组件显示用户和电脑的选择结果;选择结果的下方为游戏的结果,只有在一局游戏结束后才能显示结果;开始按钮则用于启动游戏。

引入模块并设置变量:

import tkinter
import tkinter.ttk
import tkinter.messagebox
import random
import time

big = 0     # big和little用于帮助电脑选择点数大小
little = 0
count = 0   # 单次游戏中骰子变化的次数

创建窗口,然后在窗口中添加单选按钮、标签组件以及骰子图片扽内容,使用 grid 方法进行布局:

root = tkinter.Tk()
root.title('掷骰子游戏')
root.wm_attributes('-topmost', 1)
root.geometry('320x250')

title = tkinter.Label(root, text="选择骰子点数大小:").grid(column=0, row=0)

cvar = tkinter.IntVar()
cvar.set('1')     # 单选按钮的默认值
tkinter.Radiobutton(root, text="大", variable=cvar, value=1, command=option_value).grid(column=0, row=1, columnspan=3)
tkinter.Radiobutton(root, text="小", variable=cvar, value=0, command=option_value).grid(column=3, row=1, columnspan=3)

image1 = tkinter.PhotoImage(file='2t.png')
label = tkinter.Label(root, image=image1)        # 第一个骰子图片
label.grid(column=0, row=2, columnspan=2)
image2 = tkinter.PhotoImage(file='4t.png')
labe2 = tkinter.Label(root, image=image2)        # 第二个骰子图片
labe2.grid(column=2, row=2, columnspan=2)
image3 = tkinter.PhotoImage(file='6t.png')
labe3 = tkinter.Label(root, image=image3)         # 第三个骰子图片
labe3.grid(column=4, row=2, columnspan=2)

labe4 = tkinter.Label(root, text="你选的是:大")  # 显示用户选择结果
labe4.grid(column=0, row=3, columnspan=3)
labe5 = tkinter.Label(root, text="电脑选的是:大")  # 显示电脑选择结果
labe5.grid(column=3, row=3, columnspan=3)

tkinter.Button(root, text="开始", command=start).grid(column=0, row=6, columnspan=6)  # 开始按钮

root.mainloop()

7. 功能实现

用户和电脑选择骰子的点数大小

通过 option_value 和 sys_value 方法分别获取用户和电脑所选择的骰子大小。

# 获取用户的选择结果
def option_value():
    global value
    global big
    global little
    global s_sel
    global labe4

    if cvar.get() == 1: # 获取单选按钮的值
        value = "大"
    else:
        value = "小"
    labe4.config(text="你选的是:" + value)
    s_sel = sys_value(big, little) # 调用 sys_value 方法,获取电脑选择点数
    return value
# 电脑选择的结果
def sys_value(value1, value2):  # 电脑选择结果,接收两个参数,分别是 big 和 little,当 big <= little 时,电脑选择大,反正选择小。
    if value1 <= value2:
        labe5.config(text="电脑选的是:大")
        return "大"
    else:
        labe5.config(text="电脑选的是:小")
        return "小"

摇骰子过程实现

call 方法用于实现摇骰子的动画过程,该方法中,一次生成了三个随机数,然后在窗口中显示对应的骰子的点数,将 count 加 1,count 就是单次游戏中摇骰子的次数,判断 count 是否大于或等于 20,如果大于或等于 20,则进行下一步,反之,则 100 毫秒之后再执行该方法。

def call():
    global image1     # 第一个骰子图片变量
    global image2     # 第二个骰子图片变量
    global image3     # 第三个骰子的图片变量
    global count      # 摇骰子次数
    global add        # 三个骰子的总点数
    global flag       # 第三个骰子的图片变量
    
    num = random.choice(range(1, 7))  # 随机生成第一个骰子的点数
    img = str(num) + "t.png"
    image1 = tkinter.PhotoImage(file=img)
    label.config(image=image1)  # 切换对应点数的骰子图片
    add = num
    
    num = random.choice(range(1, 7))  # 随机生成第二个骰子的点数
    img = str(num) + "t.png"
    image2 = tkinter.PhotoImage(file=img)
    labe2.config(image=image2)  # 切换对应点数的骰子图片
    add += num  # 求和
    
    num = random.choice(range(1, 7))  # 随机生成第三个骰子的点数
    img = str(num) + "t.png"
    image3 = tkinter.PhotoImage(file=img)
    labe3.config(image=image3)  # 切换对应点数的骰子图片
    add += num

    count += 1
    if count < 20:
        root.after(100, call) # after 方法的作用是,多少毫秒后再次调用函数,时间单位为毫秒
    else:
        judge()  # 判断大小

判断游戏结果

判断游戏结果的逻辑为:依次判断骰子的点数大小、玩家选择的点数大小以及电脑选择的点数大小,如果骰子点数为大,用户和电脑选择的点数也为大,则用户和电脑为平手;若用户选择的点数为大,而系统选择的点数为小,则玩家赢了电脑;同理,若玩家和电脑都选择了小,则玩家和电脑都输了;若玩家选择了小,而电脑选择了大,则玩家输给了电脑,依次类推。

# 判断胜负
def judge():
    global big
    global little
    global s_sel
    global y_sel
    global add
    if add >= 10:
        big += 1  # 总点数大于10,则big+1,反之little+1
        if y_sel == "大":  # 如果用户选择点数为大
            if s_sel == "小":
                tkinter.messagebox.showinfo("掷骰子结果","恭喜,你赢了电脑")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "^_^你和电脑打平了!")
        else:
            if s_sel == "大":
                tkinter.messagebox.showinfo("掷骰子结果", "哦耶,电脑赢了!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "-_-|||你和电脑都输了!")

    else:  # 如果用户选择点数为小
        little += 1
        if y_sel == "大":
            if s_sel == "小":
                tkinter.messagebox.showinfo("掷骰子结果","哦耶,电脑赢了!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果","-_-|||你和电脑都输了!")
        else:
            if s_sel == "大":
                tkinter.messagebox.showinfo("掷骰子结果", "恭喜,你赢了电脑!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "^_^你和电脑打平了!")

单击开始按钮进行游戏

为开始按钮绑定 start 方法,然后在该方法中初始化 count 参数,并且调用 call 方法启动投掷骰子动画:文章来源地址https://www.toymoban.com/news/detail-669606.html

# 开始游戏
def start():
    global y_sel
    global count
    count = 0
    y_sel = option_value()
    call()

源代码汇总

import tkinter
import tkinter.ttk
import tkinter.messagebox
import random
import time

big = 0      # big和little用于帮助电脑选择点数大小
little = 0
count = 0      # 单次游戏中骰子变化的次数

def call():
    global image1     # 第一个骰子图片变量
    global image2     # 第二个骰子图片变量
    global image3     # 第三个骰子的图片变量
    global count      # 摇骰子次数
    global add        # 三个骰子的总点数
    global flag       # 第三个骰子的图片变量
    num = random.choice(range(1, 7))  # 随机生成第一个骰子的点数
    img = str(num) + "t.png"
    image1 = tkinter.PhotoImage(file=img)
    label.config(image=image1)  # 切换对应点数的骰子图片
    add = num

    num = random.choice(range(1, 7))  # 随机生成第二个骰子的点数
    img = str(num) + "t.png"
    image2 = tkinter.PhotoImage(file=img)
    labe2.config(image=image2)  # 切换对应点数的骰子图片
    add += num  # 求和
    num = random.choice(range(1, 7))  # 随机生成第三个骰子的点数
    img = str(num) + "t.png"
    image3 = tkinter.PhotoImage(file=img)
    labe3.config(image=image3)  # 切换对应点数的骰子图片

    add += num
    count += 1
    if count < 20:
        root.after(100, call)
    else:
        judge()  # 判断大小


# 获取用户的选择结果
def option_value():
    global value
    global big
    global little
    global s_sel
    global labe4
    if cvar.get() == 1:
        value = "大"
    else:
        value = "小"
    labe4.config(text="你选的是:" + value)
    s_sel = sys_value(big, little)
    return value

# 电脑选择的结果
def sys_value(value1, value2):  # 电脑选择结果
    if value1 <= value2:
        labe5.config(text="电脑选的是:大")
        return "大"
    else:
        labe5.config(text="电脑选的是:小")
        return "小"

# 判断胜负
def judge():
    global big
    global little
    global s_sel
    global y_sel
    global add
    if add >= 10:
        big += 1  # 总点数大于10,则big+1,反之little+1
        if y_sel == "大":  # 如果用户选择点数为大
            if s_sel == "小":
                tkinter.messagebox.showinfo("掷骰子结果","恭喜,你赢了电脑")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "^_^你和电脑打平了!")
        else:
            if s_sel == "大":
                tkinter.messagebox.showinfo("掷骰子结果", "哦耶,电脑赢了!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "-_-|||你和电脑都输了!")

    else:  # 如果用户选择点数为小
        little += 1
        if y_sel == "大":
            if s_sel == "小":
                tkinter.messagebox.showinfo("掷骰子结果","哦耶,电脑赢了!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果","-_-|||你和电脑都输了!")
        else:
            if s_sel == "大":
                tkinter.messagebox.showinfo("掷骰子结果", "恭喜,你赢了电脑!")
            else:
                tkinter.messagebox.showinfo("掷骰子结果", "^_^你和电脑打平了!")

# 开始游戏
def start():
    global y_sel
    global count
    count = 0
    y_sel = option_value()
    call()


root = tkinter.Tk()
root.title('掷骰子游戏')
root.wm_attributes('-topmost', 1)
root.geometry('320x250')

title = tkinter.Label(root, text="选择骰子点数大小:").grid(column=0, row=0)

cvar = tkinter.IntVar()
cvar.set('1')     #单选按钮的默认值
tkinter.Radiobutton(root, text="大", variable=cvar, value=1, command=option_value).grid(column=0, row=1, columnspan=3)
tkinter.Radiobutton(root, text="小", variable=cvar, value=0, command=option_value).grid(column=3, row=1, columnspan=3)

image1 = tkinter.PhotoImage(file='2t.png')
label = tkinter.Label(root, image=image1)        # 第一个骰子图片
label.grid(column=0, row=2, columnspan=2)
image2 = tkinter.PhotoImage(file='4t.png')
labe2 = tkinter.Label(root, image=image2)        # 第二个骰子图片
labe2.grid(column=2, row=2, columnspan=2)
image3 = tkinter.PhotoImage(file='6t.png')
labe3 = tkinter.Label(root, image=image3)         # 第三个骰子图片
labe3.grid(column=4, row=2, columnspan=2)

labe4 = tkinter.Label(root, text="你选的是:大")  # 显示用户选择结果
labe4.grid(column=0, row=3, columnspan=3)
labe5 = tkinter.Label(root, text="电脑选的是:大")  # 显示电脑选择结果
labe5.grid(column=3, row=3, columnspan=3)

tkinter.Button(root, text="开始", command=start).grid(column=0, row=6, columnspan=6)  # 开始按钮

root.mainloop()

到了这里,关于【tkinter 专栏】掷骰子游戏的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【100天精通python】Day35:GUI界面编程_一文掌握Tkinter基本操作

    目录  专栏导读    1 GUI 编程概述 1.1 为什么需要GUI? 1.2 常见的GUI编程工具和库

    2024年02月12日
    浏览(57)
  • 【100天精通python】Day36:GUI界面编程_Tkinter高级功能操作和示例

    目录  专栏导读  一、GUI 高级功能 1 自定义主题和样式 2 实现拖放功能

    2024年02月10日
    浏览(57)
  • python趣味编程-使用 Tkinter 进行 RPS 游戏

      使用 Tkinter 的 RPS 游戏是用 Python 编程语言编码的应用程序。该项目使用 tkinter 库来显示游戏应用程序的 GUI。游戏机制包括选择一个符号来击败对手。 在 Python 中使用 Tkinter 的 RPS 游戏 是一种基于随机机会的游戏,您通过简单的运气获胜。这个 使用 Tkinter 的 RPS 游戏 可以引

    2024年02月05日
    浏览(36)
  • 【python小项目】python模拟掷骰子游戏

    骰子是具有代表性的中国传统民间娱乐工具,最常见的骰子是正方体六面骰,六面的点数分别从1~6,且相对面点数之和为7。现有A,B两人通过掷骰子比较谁的点数更大,请通过python程序模拟以下过程: (1) 一盘游戏中,AB两人轮流掷骰子5次,并将每次掷出的点数累加,5盘之后,

    2024年02月05日
    浏览(40)
  • Python制作简易计算器(GUI)---Tkinter

    tkinter模块是Python标准的TK GUI工具包接口,可以实现一些较为简单GUI的创建。 麻雀虽小,五脏俱全 TK工具集使用TCL(Tool Command Language)语言开发 运行相同的程序时,运行速度快于pyqt5 组件能满足基本使用 程序界面较简陋 开发时,使用的语句更短更易懂 Python内置的标准库 Qt框

    2024年02月08日
    浏览(63)
  • python中tkinter实现GUI程序:三个实例

    Python作为一种多功能、易于学习的编程语言,不仅仅在数据科学、机器学习、网络开发等领域大放异彩,也在图形用户界面(GUI)开发中扮演着重要角色。其中,Tkinter库作为Python的标准GUI库,以其简单易用而广受欢迎。 一位粉丝希望了解,如何实战python中tkinter如何实现GUI程

    2024年02月03日
    浏览(56)
  • 【Python】线程threading与GUI窗口tkinter结合应用

    Python的threading模块是一个强大的工具,它提供了高级别的线程编程接口。通过这个模块,Python程序员可以在应用程序中实现多线程并发执行。 线程(Thread)是程序执行流的最小单元,被包涵在进程之中,是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不

    2024年01月19日
    浏览(52)
  • 基于Python+Tkinter GUI 的模式识别水果分类小程序

      采用Python语言编写,并结合Tkinter GUI工具制作交互式小程序开发,实现了简单的水果的边缘提取和分类。如图1-A,用户可以自定义选择路径并输出,同时可以在对话框中输入/输出结果,如图1-B。 A 界面展示 B 交互展示   图1 Tkinter GUI 展示 本次课程实践一整体设计分为三个部

    2024年02月09日
    浏览(72)
  • 使用Python模拟掷骰子游戏的技术指南

    掷骰子游戏是一种非常经典的娱乐活动,通过投掷骰子来获取随机数值,并根据规则进行比较和判断。本文将介绍如何使用Python模拟掷骰子游戏,并通过案例讲解帮助读者更好地理解和实践。 1. 导入必要的库和模块 2. 定义骰子类 3. 创建骰子对象并进行投掷 4. 扩展:模拟多次

    2024年01月19日
    浏览(42)
  • Python创建一个GUI(Tkinter)选择文件的界面获取文件路径

    1、点击【选择路径可以选择文件】 2、【确定(开始执行)】 这个按钮没有绑定函数,大家可以根据自己的需求绑定函数

    2024年02月11日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包