python入门学习之小工具制作系列--01使用tkinter库封装(人生重开模拟器)小游戏

一、制作背景:

过年浏览csdn博文时,有看到其他博主的一篇人生重开模拟器的小游戏,将代码拷贝运行后看效果很好,非常有趣。于是就学习使用tkinter库将源代码封装,使其可以成为应用小游戏。

二、人生重开小游戏原文链接:

相关游戏制作逻辑可以看原文博客。

https://blog.csdn.net/weixin_73888239/article/details/128732979

三、小游戏效果体验:
1,小游戏弹出框整体界面展示~
2,开始游戏后的展示(此处没有再单独制作重生界面,使用了messagebox模块生成弹窗):

1,)生成初始属性

2,)属性输出

3,)根据游戏逻辑,输出第一次重生的人物属性

4,)第一次人物属性

.... .... .... ....

5,)直到运行至游戏代码逻辑的最后一年,第10年。输出属性后游戏结束,此时,可以选择继续游戏,也可以选择退出游戏

四、使用tkinter制作应用小游戏
1,引入tkinter库
import tkinter as tk
from tkinter import messagebox
2,设置弹出框基本框架
root = tk.Tk()
root.geometry('600x600+500+130')
root.iconbitmap('C:/Users/17496/Pictures/Saved Pictures/favicon.ico')
root.title('人生重开模拟器(简版)')
root.mainloop()
3,配置弹出框的基本属性,包括弹窗所处屏幕位置,弹窗大小等
photo = tk.PhotoImage(file='C:/Users/17496/Pictures/Saved Pictures/1.gif')
imgLabel = tk.Label(root, image=photo, compound=tk.CENTER, fg='white')
imgLabel.pack()

page = tk.Frame(root)
page.pack()

tk.Label(page).grid(row=0, column=0)

tk.Label(page, text='颜值设定(1~10): ').grid(row=1, column=1, pady=10)
tk.Entry(page, textvariable=face).grid(row=1, column=2)

tk.Label(page, text='智力设定(1~10): ').grid(row=2, column=1, pady=10)
tk.Entry(page, textvariable=ability).grid(row=2, column=2)

tk.Label(page, text='体质设定(1~10): ').grid(row=3, column=1, pady=10)
tk.Entry(page, textvariable=strength).grid(row=3, column=2)

tk.Label(page, text='家境设定(1~10): ').grid(row=4, column=1, pady=10)
tk.Entry(page, textvariable=family).grid(row=4, column=2)
tk.Button(page, text='开始游戏', command=game).grid(row=5, column=1, pady=15)
tk.Button(page, text='退出游戏', command=page.quit).grid(row=5, column=2)
4,设置获取输入信息的命令
face = tk.IntVar()
ability = tk.IntVar()
strength = tk.IntVar()
family = tk.IntVar()
5,使用函数将原代码封装
def game():
    while True:
        yanzhi = face.get()
        zhili = ability.get()
        tizhi = strength.get()
        jiajing = family.get()
        if yanzhi < 1 or yanzhi > 10:
            messagebox.showwarning(title='警告',message='颜值设置错误')
            break
        elif zhili < 1 or zhili > 10:
            messagebox.showwarning(title='警告',message='智力设置错误')
            break
        elif tizhi < 1 or tizhi > 10:
            messagebox.showwarning(title='警告',message='体质设置错误')
            break
        elif jiajing < 1 or jiajing > 10:
            messagebox.showwarning(title='警告',message='家境设置错误')
            break
        elif yanzhi + zhili + tizhi + jiajing > 20:
            messagebox.showwarning(title='警告',message='输入错误,总属性超过20')
            break
        messagebox.showinfo(title='属性设置',message="初始属性设置完毕")
        messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")
        break

    point = random.randint(1, 6)

    if point % 2 == 1:
        gender = "boy"
        messagebox.showinfo(title='性别',message="你是个男孩.")
    else:
        gender = "girl"
        messagebox.showinfo(title='性别',message="你是个女孩.")

    point = random.randint(1, 3)
    if jiajing == 10:

        messagebox.showinfo(title='命运',message="你出生在帝都,父母是世界首富.")
        jiajing += 1
        yanzhi += 1
        zhili += 1
    elif jiajing >= 7 and jiajing <= 9:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是医生.")
            yanzhi += 2
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是资深程序员.")
            zhili += 2
        else:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是健身教练.")
            tizhi += 3
            yanzhi += 1
            zhili -= 1
    elif jiajing >= 4 and jiajing <= 6:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是企业管理.")
            zhili += 1
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是小学老师.")
            zhili += 1
        else:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是自己开店做生意.")
            jiajing += 1

    else:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在农村,父母是农民.")
            tizhi += 2
            yanzhi -= 1
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在山里,父母是猎人.")
            tizhi += 2
            jiajing -= 1
            yanzhi -= 1
        else:
            messagebox.showinfo(title='命运',message="你出生在小镇上,父母是镇长.")
            yanzhi += 1
            jiajing += 1

    messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")

    for age in range(1, 11):

        info = f'你今年{age}岁'

        point = random.randint(1, 3)

        if gender == 'girl' and jiajing <= 3 and point == 1:
            info += '你的家里人重男轻女思想非常严重,把你丢弃了.'
            messagebox.showinfo(title='属性输出',message="游戏结束.")
            sys.exit(0)

        elif tizhi < 6 and point < 3:
            info += '你生了一场病.'
            if jiajing >= 5:
                info += '在父母的照顾下,你康复了.'
                tizhi += 1
                jiajing -= 1
            else:
                info += '父母没时间管你,你的情况更糟糕了.'
                tizhi -= 1

        elif yanzhi <= 4 and age >= 7:
            info += '你长的太丑了,别的小朋友不和你一起玩.'
            if zhili > 5:
                info += '你决定用学习填充自己.'
                zhili += 1
            else:
                if gender == 'boy':
                    info += '你和别的小朋友打架.'
                    tizhi += 1
                    zhili -= 1
                else:
                    info += '你经常被别的小朋友欺负.'
                    tizhi -= 1

        elif zhili < 5:
            info += '你看起来傻乎乎的.'
            if jiajing >= 8 and age >= 6:
                info += '你的父母把你送到更好的学校学习.'
                zhili += 1
            elif 4 <= jiajing <= 7:
                if gender == 'boy':
                    info += '你的父母鼓励你多运动,争取成为运动健将.'
                    tizhi += 1
                else:
                    info += '你的古父母鼓励你多打扮自己.'
                    yanzhi += 1
            else:
                info += '你的父母经常为此吵架.'
                if point == 1:
                    tizhi -= 1
                elif point == 2:
                    zhili -= 1
                else:
                    pass

        else:
            info += '你健康成长.'
            if point == 1:
                info += '你看起来更结实了.'
                tizhi += 1
            elif point == 2:
                info += '你看起来更好看了.'
                yanzhi += 1
            else:
                pass
        messagebox.showinfo(title='属性输出',message=info)
        messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")
        messagebox.showinfo(title='分隔符',message="---------------------------------------------------------------")
        time.sleep(1)

... ... ... ... ... ...

五、封装完成后,即可运行程序玩小游戏了。

~~~

尴尬!!! 最后说一下哈,封装后部分代码逻辑有点问题,这块主要是原博主设置的超过设定值时原游戏代码不能再运行,会提示要重新输入,但封装后的代码输入超过设定值范围提示设置错误后仍然会运行下去!!! 哈哈,不知道怎么改了。有大佬知道的可以改下,最后附上源码~~ 谢谢支持~~~

import tkinter as tk
from tkinter import messagebox
import random
import sys
import time

root = tk.Tk()
root.geometry('600x600+500+130')
root.iconbitmap('C:/Users/17496/Pictures/Saved Pictures/favicon.ico')
root.title('人生重开模拟器(简版)')

face = tk.IntVar()
ability = tk.IntVar()
strength = tk.IntVar()
family = tk.IntVar()

photo = tk.PhotoImage(file='C:/Users/17496/Pictures/Saved Pictures/1.gif')
imgLabel = tk.Label(root, image=photo, compound=tk.CENTER, fg='white')
imgLabel.pack()

page = tk.Frame(root)
page.pack()

tk.Label(page).grid(row=0, column=0)

tk.Label(page, text='颜值设定(1~10): ').grid(row=1, column=1, pady=10)
tk.Entry(page, textvariable=face).grid(row=1, column=2)

tk.Label(page, text='智力设定(1~10): ').grid(row=2, column=1, pady=10)
tk.Entry(page, textvariable=ability).grid(row=2, column=2)

tk.Label(page, text='体质设定(1~10): ').grid(row=3, column=1, pady=10)
tk.Entry(page, textvariable=strength).grid(row=3, column=2)

tk.Label(page, text='家境设定(1~10): ').grid(row=4, column=1, pady=10)
tk.Entry(page, textvariable=family).grid(row=4, column=2)


def game():
    while True:
        yanzhi = face.get()
        zhili = ability.get()
        tizhi = strength.get()
        jiajing = family.get()
        if yanzhi < 1 or yanzhi > 10:
            messagebox.showwarning(title='警告',message='颜值设置错误')
            break
        elif zhili < 1 or zhili > 10:
            messagebox.showwarning(title='警告',message='智力设置错误')
            break
        elif tizhi < 1 or tizhi > 10:
            messagebox.showwarning(title='警告',message='体质设置错误')
            break
        elif jiajing < 1 or jiajing > 10:
            messagebox.showwarning(title='警告',message='家境设置错误')
            break
        elif yanzhi + zhili + tizhi + jiajing > 20:
            messagebox.showwarning(title='警告',message='输入错误,总属性超过20')
            break
        messagebox.showinfo(title='属性设置',message="初始属性设置完毕")
        messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")
        break

    point = random.randint(1, 6)

    if point % 2 == 1:
        gender = "boy"
        messagebox.showinfo(title='性别',message="你是个男孩.")
    else:
        gender = "girl"
        messagebox.showinfo(title='性别',message="你是个女孩.")

    point = random.randint(1, 3)
    if jiajing == 10:

        messagebox.showinfo(title='命运',message="你出生在帝都,父母是世界首富.")
        jiajing += 1
        yanzhi += 1
        zhili += 1
    elif jiajing >= 7 and jiajing <= 9:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是医生.")
            yanzhi += 2
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是资深程序员.")
            zhili += 2
        else:
            messagebox.showinfo(title='命运',message="你出生在一线城市,父母是健身教练.")
            tizhi += 3
            yanzhi += 1
            zhili -= 1
    elif jiajing >= 4 and jiajing <= 6:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是企业管理.")
            zhili += 1
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是小学老师.")
            zhili += 1
        else:
            messagebox.showinfo(title='命运',message="你出生在三线城市,父母是自己开店做生意.")
            jiajing += 1

    else:

        if point == 1:
            messagebox.showinfo(title='命运',message="你出生在农村,父母是农民.")
            tizhi += 2
            yanzhi -= 1
        elif point == 2:
            messagebox.showinfo(title='命运',message="你出生在山里,父母是猎人.")
            tizhi += 2
            jiajing -= 1
            yanzhi -= 1
        else:
            messagebox.showinfo(title='命运',message="你出生在小镇上,父母是镇长.")
            yanzhi += 1
            jiajing += 1

    messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")

    for age in range(1, 11):

        info = f'你今年{age}岁'

        point = random.randint(1, 3)

        if gender == 'girl' and jiajing <= 3 and point == 1:
            info += '你的家里人重男轻女思想非常严重,把你丢弃了.'
            messagebox.showinfo(title='属性输出',message="游戏结束.")
            sys.exit(0)

        elif tizhi < 6 and point < 3:
            info += '你生了一场病.'
            if jiajing >= 5:
                info += '在父母的照顾下,你康复了.'
                tizhi += 1
                jiajing -= 1
            else:
                info += '父母没时间管你,你的情况更糟糕了.'
                tizhi -= 1

        elif yanzhi <= 4 and age >= 7:
            info += '你长的太丑了,别的小朋友不和你一起玩.'
            if zhili > 5:
                info += '你决定用学习填充自己.'
                zhili += 1
            else:
                if gender == 'boy':
                    info += '你和别的小朋友打架.'
                    tizhi += 1
                    zhili -= 1
                else:
                    info += '你经常被别的小朋友欺负.'
                    tizhi -= 1

        elif zhili < 5:
            info += '你看起来傻乎乎的.'
            if jiajing >= 8 and age >= 6:
                info += '你的父母把你送到更好的学校学习.'
                zhili += 1
            elif 4 <= jiajing <= 7:
                if gender == 'boy':
                    info += '你的父母鼓励你多运动,争取成为运动健将.'
                    tizhi += 1
                else:
                    info += '你的古父母鼓励你多打扮自己.'
                    yanzhi += 1
            else:
                info += '你的父母经常为此吵架.'
                if point == 1:
                    tizhi -= 1
                elif point == 2:
                    zhili -= 1
                else:
                    pass

        else:
            info += '你健康成长.'
            if point == 1:
                info += '你看起来更结实了.'
                tizhi += 1
            elif point == 2:
                info += '你看起来更好看了.'
                yanzhi += 1
            else:
                pass
        messagebox.showinfo(title='属性输出',message=info)
        messagebox.showinfo(title='属性输出',message=f"颜值:{yanzhi},体质:{tizhi},智力:{zhili},家境:{jiajing}")
        messagebox.showinfo(title='分隔符',message="---------------------------------------------------------------")
        time.sleep(1)


tk.Button(page, text='开始游戏', command=game).grid(row=5, column=1, pady=15)
tk.Button(page, text='退出游戏', command=page.quit).grid(row=5, column=2)

root.mainloop()
摘要 针对便利购超市传统库存管理中人工操作效率低、数据同步滞后、权限边界模糊、流程不规范等问题,为实现库存管理的数字化、规范化与智能化,提升多角色协同效率,本文设计并实现了一套适配中小型超市实际业务的库存信息管理平台。研究以问题为导向,遵循调研分析 - 设计开发 - 测试优化的软件开发流程,先通过文献研究与实地调研梳理核心技术要点与业务需求,明确管理员、库管、一线员工三类角色的功能边界;再基于 Vue+Spring Boot+MyBatis 技术栈搭建前后端分离架构,结合 RBAC 角色权限模型与数据库第三范式完成系统整体设计,涵盖需求分析、架构设计、功能模块设计、接口与权限控制设计、界面原型设计等环节;随后完成平台前后端开发实现,实现商品及类别管理、库存预警、出入库与报损管理、全局库存管控等九大核心功能,同时针对开发中的权限控制、数据一致性、接口交互等问题提出针对性解决策略;最后通过功能、性能、兼容性多维度测试验证系统有效性。测试结果表明,该平台实现了库存管理全流程的线上化,可实现多角色权限的精细化管控、库存数据的实时同步与预警信息的即时推送,有效解决了传统库存管理的痛点,提升了超市库存管理的效率与精准度。系统兼具良好的稳定性、易用性与可扩展性,可为中小型零售超市的库存数字化管理提供技术支撑与实践参考,后续可进一步拓展数据分析、智能补货等功能,提升平台的智能化水平。 关键词:库存预警;超市;MyBatis
内容概要:本文研究了改进深度优先搜索算法与二进制粒子群优化算法相结合在配电网故障恢复重构中的应用,旨在提升故障后网络重构的效率与供电可靠性。通过引入改进的深度优先搜索算法高效生成满足辐射状约束的可行拓扑结构,并结合二进制粒子群算法进行全局优化,实现对开关操作序列的智能决策。文中系统阐述了两种算法的协同机制、适应度函数构建、配电网约束处理(如潮流平衡、电压限值、容量限制)以及孤岛与环网的规避策略,提出了一套完整的故障恢复重构流程。基于Matlab平台的仿真验证表明,该方法能在较短时间内找到高质量的恢复方案,有效恢复失电负荷,避免不合理的网络结构,具有较强的实用性和鲁棒性。; 适合人群:具备电力系统分析基础和Matlab编程能力,从事智能电网、配电自动化、故障诊断与恢复、电力系统优化等方向的科研人员及工程技术人员。; 使用场景及目标:①应对配电网突发故障,快速制定最优网络重构方案以最大化恢复供电范围;②优化故障后开关操作策略,降低停电损失和运行风险;③为配电管理系统(DMS)和自愈控制系统提供高效的算法支撑;④研究启发式算法与图搜索算法在复杂电力网络优化中的融合应用; 阅读建议:建议读者结合Matlab代码深入理解算法实现细节,重点关注深度优先搜索在拓扑可行性校验中的作用以及粒子群算法在离散空间优化中的编码与更新策略,可通过调整网络模型、故障场景和算法参数进行对比实验,以全面掌握其性能特点与适用边界。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值