Python面向对象小游戏初试水之战斗狂徒张三

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

如果有大佬看到,还请帮忙指正一下,感谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值