习题

1.什么是对象?什么是类?

  • 对象是具有特征和技能的结合体,类是一系列具有相同特征和技能的对象的整体

2.对象的绑定方法有什么特点

  • 对象调用绑定方法会默认将对象本身当做第一个参数传入该绑定方法
  • 对象的绑定方法与类中对应的方法功能一样但是内存地址不一样

3.基于面向对象设计一个对战游戏

# 基于面向对象仿制英雄联盟角色设计一个对战游戏

# 定义瑞文类
class RuiWen:
    camp = 'Nokesasi'

    def __init__(self, name, aggr=54, life=414, money=1001, armor=3):
        self.name = name
        self.aggr = aggr
        self.life = life
        self.money = money
        self.armor = armor

    def attack(self, enemy):
        damage_life = self.aggr - enemy.armor
        enemy.life -= damage_life


# 定义盖伦类
class GaiLun:
    camp = 'Demaxiya'  # 阵营是德玛西亚

    def __init__(self, name, aggr=58, life=455, money=100, armor=10):
        self.name = name
        self.aggr = aggr
        self.life = life
        self.money = money
        self.armor = armor

    def attack(self, enemy):
        damage_life = self.aggr - enemy.armor
        enemy.life -= damage_life


# 定义装备类,
class DuoLanRen:
    def __init__(self, price=475, aggr=9, life=100):
        self.price = price
        self.aggr = aggr
        self.life = life

    def add_attr(self, obj):
        obj.money -= self.price
        obj.aggr += self.aggr
        obj.life += self.life

    def fire_skill(self, obj):  # 装备的主动技能,喷火燃烧敌方100点生命值
        obj.life -= 100


# 交互代码
r1 = RuiWen('才气龙')
g1 = GaiLun('tank')
d1 = DuoLanRen()

if r1.money > d1.price:
    r1.duolanren = d1
    r1.duolanren.add_attr(r1)

print(f'''{r1.name}购买了多兰之刃
装备后:
攻击力:{r1.aggr}
生命值:{r1.life}
金钱:{r1.money}''')
print('*'*30)

print(f'盖伦初始生命值为:{g1.life}')
print('*'*30)

r1.attack(g1)  # 瑞文攻击盖伦一次
print(f'盖伦被瑞文攻击一次后生命值为:{g1.life}')
print('*'*30)

r1.duolanren.fire_skill(g1)  # 用多兰刃攻击
print(f'盖伦被多兰剑烧一次后生命值为:{g1.life}')