写出一个“奥特曼”和“小怪兽”类,基本属性有名字、生命值和魔法值。来实现“奥特曼”打“小怪兽”。
基本玩法是,奥特曼先攻击,小怪兽只能反击;奥特曼可以使用普通攻击、魔法攻击和必杀技三种攻击方式,小怪兽只能使用普通攻击。奥特曼使用魔法攻击,扣40魔法值,每次普通攻击后恢复魔法值。
基本玩法满足后,测试一下“奥特曼”的胜率
奥特曼类 Ultraman --
名字、生命值、魔法值
attack 普通 15-25
magic 魔法 20-30,每次魔法-40
super 概率必杀技 扣敌3/4 自损50
resume 恢复 1-10
display 显示小怪兽类 Monster --
名字、生命值、魔法值
attack 10-20
display 显示
分析:
- 实例化 奥特曼和怪兽
- 游戏开始,向对手致敬
- 进入游戏 死循环
- 统计回合数
- 奥特曼先攻击,生成随机数,概率使用技能
- 怪兽反击
- 判断输赢
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__))