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__))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值