Python 奥特曼打小怪兽

写出一个“奥特曼”和“小怪兽”类,基本属性有名字、生命值和魔法值。来实现“奥特曼”打“小怪兽”。
基本玩法是,奥特曼先攻击,小怪兽只能反击;奥特曼可以使用普通攻击、魔法攻击和必杀技三种攻击方式,小怪兽只能使用普通攻击。奥特曼使用魔法攻击,扣40魔法值,每次普通攻击后恢复魔法值。

基本玩法满足后,测试一下“奥特曼”的胜率

 


奥特曼类 Ultraman --
    名字、生命值、魔法值
    attack 普通 15-25
    magic  魔法 20-30,每次魔法-40
    super 概率必杀技  扣敌3/4 自损50
    resume 恢复 1-10
    display 显示

小怪兽类 Monster --
    名字、生命值、魔法值
    attack 10-20
    display 显示
 

 分析:

  1. 实例化 奥特曼和怪兽
  2. 游戏开始,向对手致敬
  3. 进入游戏 死循环
  • 统计回合数
  •  奥特曼先攻击,生成随机数,概率使用技能
  • 怪兽反击
  1. 判断输赢
from random import randint

class Ultraman:     # 奥特曼类
    def __init__(self, name, hp, mp):
        self.name = name
        self.hp = hp
        self.mp = mp

    def attack(self, ms):  # 普通攻击 15-25
        tmp = randint(15, 20)
        ms.hp -= tmp
        print('%s使用了普通攻击,打掉了%s %d滴血!' % (self.name, ms.name, tmp))

    def magic(self, ms):   # 魔法攻击  20-30
        tmp = randint(20, 30)
        ms.hp -= tmp
        self.mp -= 40
        print('%s使用了魔法攻击,打掉了%s %d滴血!' % (self.name, ms.name, tmp))

    def ssuper(self, ms):  # 必杀技
        if self.hp > (1 / 2) * self.hp:
            self.hp -= (1 / 2) * self.hp
            t = (1 / 4) * ms.hp
            ms.hp -= t
            print('%s使用了必杀技攻击,打掉了%s %d滴血!' % (self.name, ms.name, t))
        else:
            self.attack()

    def resume(self):   # 魔法恢复
        tmp = randint(1, 10)
        self.mp += tmp
        if self.mp >= 100:
            self.mp = 100

    def display(self):   # 展示
        bar_length = 20
        h = '#' * int(self.hp / 100.0 * bar_length)
        s = '-' * (bar_length - len(h))
        h2 = '#' * int(self.mp / 100.0 * bar_length)
        s2 = '-' * (bar_length - len(h2))
        print("%s HP:[%s]%d" % (self.name, h + s, self.hp))
        print("%s MP:[%s]%d" % (self.name, h2 + s2, self.mp))

class Monster:  # 小怪兽类
    def __init__(self, name, hp):
        self.name = name
        self.hp = hp

    def attack(self, ua):
        tmp = randint(10, 20)
        ua.hp -= tmp
        print('%s使用了普通攻击,打掉了%s %d滴血!' % (self.name, ua.name, tmp))

    def display(self):
        bar_length = 20
        h = '#' * int(self.hp / 100.0 * bar_length)
        s = '-' * (bar_length - len(h))
        print("%s HP:[%s]%d" % (self.name, h + s, self.hp))

print("--游戏开始,向对手致敬--")
times = 1
ua = Ultraman('迪迦', 100, 100)
ms = Monster('哥斯拉', 110)
while(ua.hp > 0 and ms.hp > 0):
    print("=========================第0{}回合==========================".format(times))
    num = randint(1,10)
    if num in range(1,7):
        Ultraman.attack(ua,ms)
    elif num in range(7,10):
        Ultraman.magic(ua,ms)
    else:
        Ultraman.ssuper(ua,ms)
    Monster.attack(ms,ua)
    Ultraman.display(ua)
    Monster.display(ms)
    times += 1
print()
if ms.hp <= 0:
    print("奥特曼---{}胜利!!!".format(Ultraman.__name__))
elif ua.hp <= 0:
    print("小怪兽---{}胜利!!!".format(Monster.__name__))

现在有一个奥特曼怪兽的角色扮演游戏。请你根据下面的描述,定义两个类:奥特曼类和怪兽类。 在奥特曼的世界,打怪兽就是全部。现在人人都有机会成为奥特曼,加入到与怪兽无止境的战斗中。可惜,并非人人生来就是英雄,革命尚未成功,同志仍需努力啊。每一个奥特曼都要从零开始,辛勤劳动,打怪升级,最终才能成为举世瞩目的大英雄。 奥特曼的等级(rank)从第一级开始,随着它打怪兽经验(exp)的增加,等级将不断攀升。随着等级的升高,奥特曼的生命值(hp)上限和攻击力(damage)也将大大增强。在与怪兽的战斗中,奥特曼收获的不仅仅是经验。有时,运气好的话,还能从怪兽身上弄到点小钱(money)。不要小看这些钱,关键时刻,它能给奥特曼买药补血呀。奥特曼没有金刚不坏之身,在与怪兽的战斗中,奥特曼会受到伤害。一旦奥特曼的生命值降到0,它英雄的一生就结束了。 好了,了解了奥特曼的基本情况,现在可以开始战斗了。首先,我们需要一位全新的奥特曼,我们给它赋予一定的初始实力(initial)。让它投入战斗吧! 在与怪兽的战斗中要讲究策略。所谓知己知彼,百战不殆,一旦碰到怪兽,我们首先要查看自己和对方的实力(display),包括双方的等级、生命值、攻击力、经验和所拥有的钱财。所谓打得赢就打,打不赢就跑。如果对手太强大,逃跑吧(escape)!偶尔逃跑无伤颜面,但会耗费一点生命值。如果总是逃跑,生命被虚耗,那英雄就当不成了。所以该出手时就出手,勇敢地战斗(attack)吧!每一回合的战斗中,怪兽会受到攻击(attacked),怪兽也会反击(fightback),让奥特曼受到攻击(attacked)。每一回合结束,只要奥特曼还活着(isalive),而且怪兽也还活着,战斗就要继续。如果奥特曼的生命值太低,也许抵挡不了下一轮的进攻,那么别财迷了,掏钱出来给它补血(restore)吧。当然,如果形势确实不妙,奥特曼也可以中途逃跑。但如果获得了最终的胜利(win),不仅能赢得战斗经验,夺取怪兽身上的钱财,足够多的经验也许能让奥特曼升级(upgrade)。 以及其实现。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值