day 19 作业

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

对象是特征与技能的结合体,类是一系列对象相同的特征和技能的结合体

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

类内部的函数主要是给对象用的

由类来调用类内部的函数,该函数只是一个普通的函数,普通的函数需要接受几个参数就得传几个参数

由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中

对象的绑定方法,是由对象来调用的,特殊之处就是把对象当作第一个参数传入该方法中

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

# 仿制英雄联盟角色
import time


class Riven:
    camp = 'Noxus'

    def __init__(self,
                 heroname,
                 aggressivity=54,
                 life_value=414,
                 money=2000,
                 armor=12,
                 grade=1):
        self.heroname = heroname
        self.aggressivity = aggressivity
        self.life_value = life_value
        self.money = money
        self.armor = armor
        self.grade = grade

    def attack(self, enemy):
        if self.life_value < 0:
            return True, f'{self.heroname}死亡,{enemy.heroname}获胜'
        if self.life_value:
            damage_value = self.aggressivity - enemy.armor
            enemy.life_value -= damage_value
            print(f'{self.heroname}开始攻击{enemy.heroname}
造成{damage_value}伤害
{enemy.heroname}剩余血量{enemy.life_value}
')
            return False, None


class Garen:
    camp = 'Demacia'

    def __init__(self,
                 heroname,
                 aggressivity=56,
                 life_value=455,
                 money=300,
                 armor=19,
                 grade=1):
        self.heroname = heroname
        self.aggressivity = aggressivity
        self.life_value = life_value
        self.money = money
        self.armor = armor
        self.grade = grade

    def attack(self, enemy):
        if self.life_value < 0:
            return True, f'{self.heroname}死亡,{enemy.heroname}获胜'
        if self.life_value:
            damage_value = self.aggressivity - enemy.armor
            enemy.life_value -= damage_value
            print(f'{self.heroname}开始攻击{enemy.heroname}
造成{damage_value}伤害
{enemy.heroname}剩余血量{enemy.life_value}
')
            return False, None


class BlackCleaver:
    def __init__(self, price=475, aggrev=9, life_value=100):
        self.price = price
        self.aggrev = aggrev
        self.life_value = life_value

    def update(self, obj):
        obj.money -= self.price
        obj.aggressivity += self.aggrev
        obj.life_value += self.life_value
        print(f'{obj.heroname}装备火焰武器
{obj.heroname}获得攻击力加成{self.aggrev}点
{obj.heroname}获得生命值加成{self.life_value}点')

    def fire(self, emeny):
        emeny.life_value -= 100
        print(f'{emeny.heroname}受到火焰伤害100')


hero1 = Riven('锐雯')
hero2 = Garen('德玛')
wepon = BlackCleaver()
count = 1
while True:


    print(f'回合{count}开始:')
    flag, msg = hero2.attack(hero1)
    if count ==4:
        if hero1.money>wepon.price:
             hero1.wepon = wepon
             wepon.update(hero1)
             hero1.wepon.fire(hero2)
    if flag == True:
        print(msg)
        break

    flag, msg = hero1.attack(hero2)
    if flag == True:
        print(msg)
        break
    count += 1
    time.sleep(1)



输出结果:

回合1开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量370

锐雯开始攻击德玛
造成35伤害
德玛剩余血量420

回合2开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量326

锐雯开始攻击德玛
造成35伤害
德玛剩余血量385

回合3开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量282

锐雯开始攻击德玛
造成35伤害
德玛剩余血量350

回合4开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量238

锐雯装备火焰武器
锐雯获得攻击力加成9点
锐雯获得生命值加成100点
德玛受到火焰伤害100
锐雯开始攻击德玛
造成44伤害
德玛剩余血量206

回合5开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量294

锐雯开始攻击德玛
造成44伤害
德玛剩余血量162

回合6开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量250

锐雯开始攻击德玛
造成44伤害
德玛剩余血量118

回合7开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量206

锐雯开始攻击德玛
造成44伤害
德玛剩余血量74

回合8开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量162

锐雯开始攻击德玛
造成44伤害
德玛剩余血量30

回合9开始:
德玛开始攻击锐雯
造成44伤害
锐雯剩余血量118

锐雯开始攻击德玛
造成44伤害
德玛剩余血量-14

回合10开始:
德玛死亡,锐雯获胜
原文地址:https://www.cnblogs.com/LZF-190903/p/11643633.html