【学习记录】用python做一个简单的战斗游戏

文章内容是:利用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()

运行结果示例:
在这里插入图片描述
之后可以加上敏捷度判定谁先进攻
或者将攻击力设置成某个范围内的随机值
应该更有意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值