python 面向对象的方式写出下方游戏

奥特曼打小怪兽(一)

随着人类的工业开发过程,环境问题越来越严重,导致了生物的变异,也因此出现了小怪兽。而为了抵御小怪兽的入侵,奥特曼也来到了人间。本次作业,就需要我们创造出奥特曼和小怪兽两个类,来完成他们的攻防过程。具体要求如下: 创建出奥特曼类,这个类中需要有以下属性: 血量(为等级*30) 攻击力(为等级*10) 等级 创建出小怪兽类,这个类中需要有以下属性: 血量 攻击力 奥特曼类中需要有以下方法: 构造方法(初始化等级为1,初始化血量和攻击力) 升级(每打败一只小怪兽,就升一级) 攻击(接收一个小怪兽参数) 小怪兽类中需要有以下方法: 构造方法(初始化血量和攻击力) 反击(每被奥特曼攻击一次,就反击一次) 其它需要注意的事项: 当奥特曼被攻击时,血量需要减少,减少的值是攻击它的小怪兽攻击力的1/2 当小怪兽被攻击时,血量需要减少,减少的值是攻击它的奥特曼攻击力的2/3 奥特曼升级时,血量恢复到最大血量。 奥特曼和小怪兽之间不死不休,不允许逃跑。直到有一方死亡时才结束战斗。 编写一个主函数,生成一个奥特曼,之后生成一些小怪兽,让奥特曼来进行挑战。

import random as rn             # 引入随机数
# 定义精灵
class Sprite:
    def __init__(self,name):
        self.blood = 100         # 假设初始血量为:100
        self.power = 12           # 假设基础攻击能力:12
        self.name = name

    def attack(self, monster):
        # 假设每一次攻击的伤害 服从随机分布(7,17)
        minus = rn.randrange(self.power - 5, self.power + 5)
        print(minus)
        if monster.has_living():
            monster.minus_blood(minus)
        print(monster.name + ' 剩余血量:\n' + str(monster.blood)+ "\n")
        # 输出剩余血量

    def minus_blood(self,num):
        self.blood -= num

    def has_living(self):         #判断是否还有血量
        if self.blood > 0:
            return True
        return False

m = Sprite('怪兽*哥斯拉')
h = Sprite('迪迦*奥特曼')
print(m.name + ' 的初始血量:100')
print(h.name + ' 的初始血量:100')

while m.has_living() and h.has_living():
    print(m.name + ' 对 ' + h.name + ' 造成伤害:' )
    m.attack(h)
    print(h.name + ' 对 ' + m.name + ' 造成伤害:')
    h.attack(m)

if m.has_living():
    print(m.name + ' 胜利!')
elif h.has_living():
    print(h.name + ' 胜利~!')
else:
    print(m.name + ' 和 ' + h.name + '均阵亡!')

问题解决的话点这里下面的“采纳

import random


class Lightinson:  # 奥特曼是光之国的子民
    def __init__(self):
        self._update(1)
        print("Lightinson Created With HP = %d, Atk = %d" % (self.hp, self.atk))

    def _update(self, newLevel):
        self.level = newLevel
        self.hp = self.level * 30
        self.atk = self.level * 10

    def upgrade(self):
        self._update(self.level + 1)
        print("Lightinson Updated To Level.%d, HP = %d, Atk = %d" % (self.level, self.hp, self.atk))

    def attack(self, monster):
        self.hp -= self.atk / 2
        monster.underAttack(self.atk)
        print("Lightinson Attacked a Monster with %d HP Left" % self.hp)

    def underAttack(self, dmg):
        self.hp -= dmg
        print("Lightinson was Attacked with %d HP Left" % self.hp)

    def dead(self):
        return self.hp < 0


class Monster:
    def __init__(self, hp, atk):
        self.hp = hp
        self.atk = atk
        print("A Monster  Created With HP = %d, ATK = %d" % (self.hp, self.atk))

    def attack(self, lightinson):
        lightinson.underAttack(self.atk)

    def underAttack(self, dmg):
        self.hp -= dmg * 2 / 3
        print("The Monster was Under Attack with %d HP left" % self.hp)

    def dead(self):
        return self.hp < 0


if __name__ == "__main__":
    monsterHPLimit = 30   # 怪兽血量上限
    monsterAtkLimit = 10  # 怪兽攻击力上限
    monsters = 50         # 怪兽总数量

    automan = Lightinson()
    round = 0
    monster = Monster(
        random.randint(0, monsterHPLimit),
        random.randint(0, monsterAtkLimit))

    while not automan.dead() and automan.level <= monsters:
        print("Round %d:" % round)
        if monster.dead():
            automan.upgrade()
            monster = Monster(
                random.randint(0, monsterHPLimit),
                random.randint(0, monsterAtkLimit))

        automan.attack(monster)
        if not automan.dead() and not monster.dead():
            monster.attack(automan)

        round += 1

    if automan.hp < 0:
        print("Unfortunately, The Mighty Lightinson was Killed by One Ugly Monster, Run!")
    else:
        print("Wonderful, The Monsters were All Gone! Enjoy The Ever Lasting Peace Time!")