文章内容是:利用Tkinter做一个基于python的简单游戏
Tkinter
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库。
使用方法
import tkinter
完成的游戏程序如图
输入相应内容,将计算出战斗结果
以下是代码内容
首先设置窗口里的部件,这里用 grid 构建整体布局
grid 的用法可以参考这个链接里的介绍:链接:link
或者可以用 place 定义位置
其中本程序中用到的有:
Label:标签控件;可以显示文本和位图
Entry:输入控件;用于显示简单的文本内容
Button:按钮控件;在程序中显示按钮。
Text:文本控件;用于显示多行文本
还有很多控件,可以参考链接:link
#带gui窗口的对战游戏程序
import sys
import tkinter as tk
root_window = tk.Tk()
root_window.geometry('800x600') # 窗口大小
root_window.title("战斗游戏") # 窗口标题
root_window['bg'] = 'grey' # 窗口背景颜色
text = tk.Label(root_window, bg='grey', text="战斗游戏界面", fg='black', font=("等线",20,"bold"))
text.grid(row=0, column=0, columnspan=2, pady=10)
heroName1 = tk.Label(root_window, text="请输入英雄1的名字:", fg='black', font=("仿宋",20,"bold"))
heroName1.grid(row=1, column=0, sticky='W', padx=5, pady=5)
inName1 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
inName1.grid(row=2, column=0, sticky='W', padx=5, pady=5)
heroName2 = tk.Label(root_window, text="请输入英雄2的名字:", fg='black', font=("仿宋",20,"bold"))
heroName2.grid(row=1, column=1, sticky='W', padx=5, pady=5)
inName2 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
#inName2.place(x=400,y=120)
inName2.grid(row=2, column=1, sticky='W', padx=5, pady=5)
herogongji1 = tk.Label(root_window, text="请输入攻击力(51-100):", fg='black', font=("仿宋",20,"bold"))
herogongji1.grid(row=3, column=0, sticky='W', padx=5, pady=5)
inGongji1 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
inGongji1.grid(row=4, column=0, sticky='W', padx=5, pady=5)
herogongji2 = tk.Label(root_window, text="请输入攻击力(51-100):", fg='black', font=("仿宋",20,"bold"))
herogongji2.grid(row=3, column=1, sticky='W', padx=5, pady=5)
inGongji2 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
inGongji2.grid(row=4, column=1, sticky='W', padx=5, pady=5)
herofangyu1 = tk.Label(root_window, text="请输入防御力(1-80):", fg='black', font=("仿宋",20,"bold"))
herofangyu1.grid(row=5, column=0, sticky='W', padx=5, pady=5)
inFangyu1 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
inFangyu1.grid(row=6, column=0, sticky='W', padx=5, pady=5)
herofangyu2 = tk.Label(root_window, text="请输入防御力(1-80):", fg='black', font=("仿宋",20,"bold"))
herofangyu2.grid(row=5, column=1, sticky='W', padx=5, pady=5)
inFangyu2 = tk.Entry(root_window, width=20, bg='white', font=("仿宋",20,"bold"))
inFangyu2.grid(row=6, column=1, sticky='W', padx=5, pady=5)
text_t = tk.Label(root_window, text="战斗结果如下", fg='black', font=("仿宋",20,"bold"))
text_t.grid(row=8, column=0, columnspan=2)
text_end = tk.Text(root_window)
text_end.configure(height=10, width=80)
text_end.grid(row=9, column=0, columnspan=2,pady=10)
接下来完成战斗计算部分
按照回合制,第一个英雄打出的伤害是第一个英雄的攻击力减去对方的防御力
我的代码不够规范,变量用相应内容的英文表述应该更好看,但是这样比较容易看懂
在“开始战斗”的按钮中设置代码启动器
command
class hero:
def __init__(self,name,shengming,gongjili,fangyu):
self.name = name
self.shengming = shengming
self.gongjili = gongjili
self.fangyu = fangyu
def shanghai(self, hurt):
if self.shengming > (hurt - self.fangyu):
self.shengming -= hurt - self.fangyu
else:
self.shengming = 0
def isdead(self):
if self.shengming == 0:
return True
else:
return False
def zhandou():
name1 = inName1.get()
name2 = inName2.get()
gongji1 = int(inGongji1.get())
gongji2 = int(inGongji2.get())
fangyu1 = int(inFangyu1.get())
fangyu2 = int(inFangyu2.get())
hero1 =hero(name1, 120, gongji1, fangyu1)
hero2 =hero(name2, 100, gongji2, fangyu2)
for i in range(1,100):
print("第%d回合"%(i))
text_end.insert(tk.END,"第%d回合"%(i) + '\n')
hero2.shanghai(hero1.gongjili)
if hero2.isdead():
print("游戏结束。%s胜利"%(hero1.name))
text_end.insert(tk.END, "游戏结束。%s胜利"%(hero1.name) + '\n')
break
hero1.shanghai(hero2.gongjili)
if hero1.isdead():
print("游戏结束。%s胜利" % (hero2.name))
text_end.insert(tk.END, "游戏结束。%s胜利" % (hero2.name)+ '\n')
break
print("%s生命值:%d,%s生命值:%d"%(hero1.name,hero1.shengming,hero2.name,hero2.shengming))
text_end.insert(tk.END, "%s生命值:%d,%s生命值:%d"%(hero1.name,hero1.shengming,hero2.name,hero2.shengming)+ '\n')
begin_zd = tk.Button(root_window, text='点击开始战斗', font=("仿宋",20,"bold"),width=20, command=zhandou)
begin_zd.grid(row=7, column=0, columnspan=2, pady=20)
#root_window['height'] = 600
#root_window['width'] = 800
root_window.mainloop()
运行结果示例:
之后可以加上敏捷度判定谁先进攻
或者将攻击力设置成某个范围内的随机值
应该更有意思