一、制作背景:
过年浏览csdn博文时,有看到其他博主的一篇人生重开模拟器的小游戏,将代码拷贝运行后看效果很好,非常有趣。于是就学习使用tkinter库将源代码封装,使其可以成为应用小游戏。
二、人生重开小游戏原文链接:
相关游戏制作逻辑可以看原文博客。
https://blog.csdn.net/weixin_73888239/article/details/128732979
三、小游戏效果体验:
1,小游戏弹出框整体界面展示~
![](https://i-blog.csdnimg.cn/blog_migrate/c2b40a9b2088fc194088a56f0863ef02.png)
2,开始游戏后的展示(此处没有再单独制作重生界面,使用了messagebox模块生成弹窗):
1,)生成初始属性
![](https://i-blog.csdnimg.cn/blog_migrate/fd4a439940c4a0665fc8bd5e7453ba97.png)
2,)属性输出
![](https://i-blog.csdnimg.cn/blog_migrate/6bc08ed4b353d50c9a0a954964ad7589.png)
3,)根据游戏逻辑,输出第一次重生的人物属性
![](https://i-blog.csdnimg.cn/blog_migrate/0197c223d68cae25cac33cda6dc28ab3.png)
4,)第一次人物属性
![](https://i-blog.csdnimg.cn/blog_migrate/3709819f51d024100a42b19f22cb4bc9.png)
.... .... .... ....
5,)直到运行至游戏代码逻辑的最后一年,第10年。输出属性后游戏结束,此时,可以选择继续游戏,也可以选择退出游戏
![](https://i-blog.csdnimg.cn/blog_migrate/c1a9649a3bb04fda99003cb8f88f24ff.png)
四、使用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)
... ... ... ... ... ...
五、封装完成后,即可运行程序玩小游戏了。
![](https://i-blog.csdnimg.cn/blog_migrate/bae92e33115448315d68fc086f54a562.png)
~~~
尴尬!!! 最后说一下哈,封装后部分代码逻辑有点问题,这块主要是原博主设置的超过设定值时原游戏代码不能再运行,会提示要重新输入,但封装后的代码输入超过设定值范围提示设置错误后仍然会运行下去!!! 哈哈,不知道怎么改了。有大佬知道的可以改下,最后附上源码~~ 谢谢支持~~~
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()