首页 > 技术文章 > 人狗大战

Xiao_Xu 2019-03-27 16:53 原文

 

定义两个类(人,狗)实现人狗大战

(版本1)

class Dog:
    def __init__(self,name,hp,ad,kind):  # 初始化方法  设置狗的参数:名字,血量,攻击,种类
        self.name = name   # 实例变量   对象属性
        self.hp = hp
        self.ad = ad
        self.type = kind

    def bite(self, person):     # 定义 狗咬人 的方法
        person.hp -= self.ad    # 人的血量减去狗的攻击就是人新的血量
        print('%s咬了%s,%s掉了%s点血' % (self.name, person.name, person.name, self.ad))

class Person:
    def __init__(self,name,hp,ad,sex):  # 初始化方法    设置人的参数:名字,血量,攻击,性别
        self.name = name        # 实例变量   对象属性
        self.hp = hp
        self.ad = ad
        self.sex = sex

    def fight(self,dog):  # 动态变量  方法   人打狗
        # 狗掉血,就是人的攻击力
        dog.hp -= self.ad
        print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))

hei = Dog('小黑',300,20,'哈士奇')   # 小黑 对象 实例
alex = Person('alex',100,10,'male')  # alex 对象 实例

print(hei.hp)    # 300
print(alex.hp)   # 100

hei.bite(alex)   # 小黑咬了alex,alex掉了20点血
alex.fight(hei)  # alex攻击了小黑,小黑掉了10点血

print(hei.hp)    # 290
print(alex.hp)   # 80

 

(版本2)增加了武器类,添加了人购买和装备武器的方法,添加了武器作用方法  【使用了类的组合】

class Person:
    def __init__(self,name,hp,ad,sex):
        self.name = name
        self.hp = hp
        self.ad = ad
        self.sex = sex
        self.money = 2000.8      #给人一个金额
        self.beg = []               #给人一个空背包

    def fight(self,dog):
        dog.hp -= self.ad
        print('%s打了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))

    def buy_weapon(self,weapon):               #添加了买武器的方法
        if weapon.price <= self.money:         #判断武器价格是否小于人所有的金额
            self.money -= weapon.price         #求得余额
            self.money = round(self.money,2)   #余额四舍五入,保留两位小数
            self.beg.append(weapon)            #背包中加入购买的武器
            print('购买%s成功,您当前的余额:%s'%(weapon.name,self.money))
        else:
            print('您的余额不足,请充值之后重试')

    def use_weapon(self):             #添加了使用武器的方法
        for weap in self.beg:         #将武器从背包中拿出
            if weap.t == 'weapon':    #判断背包中拿出的是不是武器
                self.weapon = weap    # 组合
                self.hp += weap.hp    #人的血量获得武器加成
                self.ad += weap.ad    #人的攻击获得武器加成
                break

class Dog:
    def  __init__(self,name,hp,ad,kind):
        self.name = name
        self.hp = hp
        self.ad = ad
        self.kind = kind

    def bite(self,person):
        person.hp -= self.ad
        print('%s咬了%s,%s掉了%s点血'%(self.name,person.name,person.name,self.ad))

class Weapon:     #新定义了一个武器类
    t = 'weapon'  #静态变量
    def __init__(self,name,price,ad,hp):
        self.name = name
        self.price = price
        self.ad = ad
        self.hp = hp

    def throw(self,dog,person):    #在武器类中添加使用武器的方法
        dog.hp -= self.ad
        print('%s被%s扔中了,掉了%s点血,当前%s的血量为%s'%(dog.name,person.name,self.ad,dog.name,dog.hp))

alex = Person('alex',100,10,'male')   #传入人的参数
hei = Dog('小黑',300,20,'藏獒')       #传入狗的参数
zhuan = Weapon('板砖',2000,200,100)   #传入武器的参数
alex.buy_weapon(zhuan)                #人 买    武器
alex.use_weapon()                     #人 装备  武器
print(alex.weapon.name)               #查看人装备的武器名称
print(alex.__dict__)                  #查看人此时状态
alex.weapon.throw(hei,alex)           #人对狗使用武器   

 

 

(版本3)在版本1基础上进行了类的继承

class Animal(object):       #父类  (含有人与狗共有的属性)
    def __init__(self,name,hp,ad):
        self.name = name
        self.hp = hp
        self.ad = ad
class Dog(Animal):  #继承
    def __init__(self,name,hp,ad,kind):
        super().__init__(name,hp,ad)
        self.kind = kind    #狗的种类

    def bite(self,person):
        person.hp -= self.ad
        print('%s攻击了%s,%s掉了%s点血' % (self.name, person.name, person.name, self.ad))

class Person(Animal):
    def __init__(self,name,hp,ad,sex):
        super().__init__(name,hp,ad)
        self.sex = sex  #人的性别

    def fight(self,dog):
        dog.hp -= self.ad
        print('%s攻击了%s,%s掉了%s点血'%(self.name,dog.name,dog.name,self.ad))

hei = Dog('小黑',300,20,'哈士奇')
alex = Person('alex',100,10,'male')
alex.fight(hei)
print(hei.hp)
hei.bite(alex)
print(alex.hp)

 

推荐阅读