import random
class Weapons():
'''
武器类的父类,提供初始化属性方便子类继承,但实际上也没继承到,哈哈,子类的伤害还是手动加的
'''
def __init__(self,name):
self.name = name
self.urgent = 300
class Axe(Weapons):
'''
这是武器类的传世斧
'''
def __init__(self,name):
self.name = name
def super(self):
self.maxurgent = random.randint(300,500) + 300
self.owner = "张三"
print("%s装备传世斧,获得主动技能:力劈华山" %self.owner)
return self.maxurgent
class Sword(Weapons):
'''
这是武器类的传世剑
'''
def __init__(self,name):
self.name = name
def super(self):
self.maxurgent = random.randint(300,500) + 300
self.owner = "张三"
print("%s装备传世剑,获得主动技能:会心一剑" % self.owner)
return self.maxurgent
########################################################################################################################
class person:
def __init__(self, name): # 首先初始化人类的默认参数,包括名字血量和攻击力
self.name = name
self.person_blood = 1000
self.person_attack = 100
self.person_maxattck = 300 # 再增加一个伤害值,你不调用它的时候它没有任何作用,你调用它的时候它就是暴击伤害
print("狂战士%s 初始血量%d点 初始攻击%d点" % (self.name, self.person_blood, self.person_attack))
def attack(self, target): # 主动攻击(attack)就是去调用史莱姆被攻击(attacked)的方法
print("~" * 50)
print("%s发动一次普通攻击" % self.name)
target.attacked(self.person_attack) # 此时的形式参数目标(史莱姆)被攻击,调用slime类的attacked方法
def attacked(self, damage):
self.person_blood -= damage
print("%s受到%d点伤害,剩余血量%d" % (self.name, damage, self.person_blood))
def maxAttack(self, hurt):
print("~" * 50)
print("%s获得传世宝典,获得被动致命一击" % self.name)
print(">"*50)
hurt.maxAttacked(self.person_maxattck)
########################################################################################################################
def superAttackone(self,emergency):
print("~" * 50)
print("%s获得传世武器,可以使用必杀技能" % self.name)
print(">" * 50)
emergency.superAttacked(Axe.super(self))
'''
这部分是针对武器攻击的代码:有个缺陷就是不知道怎么去合并到一起,导致每创建一个武器类就要重新创建一个攻击方法给角色,很麻烦。
'''
def superAttacktwo(self,emergency):
print("~" * 50)
print("%s获得传世武器,可以使用必杀技能" % self.name)
print(">" * 50)
emergency.superAttacked(Sword.super(self))
########################################################################################################################
class Slime(person):
def __init__(self, name): # 首先初始化史莱姆的默认参数,包括名字血量和攻击力
self.name = name
self.slime_blood = 500
self.slime_attack = 200
print("怪物%s 初始血量%d点 初始攻击%d点" % (self.name, self.slime_blood, self.slime_attack))
def attack(self, target): # 主动攻击(attack)就是去调用张三被攻击(attacked)的方法
print("~" * 50)
print("%s发动一次普通摇摆攻击" % self.name)
target.attacked(self.slime_attack)
def attacked(self, damage):
self.slime_blood -= damage
print("%s受到%d点伤害,剩余血量%d" % (self.name, damage, self.slime_blood))
def maxAttacked(self, hurt): # 由于传世武器伤害的特殊性,单独定义一下被攻击的剩余血量值
self.slime_blood -= hurt
print("%s受到%d点伤害,剩余血量%d" % (self.name, hurt, self.slime_blood))
########################################################################################################################
def superAttacked(self, emergency):
self.slime_blood -=emergency
print("%s受到%d点伤害,剩余血量%d" % (self.name, emergency, self.slime_blood))
########################################################################################################################
zhangsan = person("张三")
slime = Slime("史莱姆")
# axe = Axe("传世斧")
# sword = Sword("传世剑")
Sword.owner = zhangsan
while True:
'''
想要让张三用传世斧就更改方法为superAttackone;使用传世剑就使用方法superAttacktwo
普通攻击就用attacked 强力攻击就用maxAttack
'''
zhangsan.superAttackone(slime)
if slime.slime_blood <=0:
print("史莱姆死亡,%s获胜!" % zhangsan.name)
break
slime.attack(zhangsan)
if zhangsan.person_blood <=0:
print("%s死亡,史莱姆获胜!" % zhangsan.name)
break
如果有大佬看到,还请帮忙指正一下,感谢!