设计基本思路:

  1. 设置一个抽象类(FighterFighterFighter),用来初始化奥特曼与小怪兽的基本属性(name,hpname,hpname,hp);同时设置一个抽象类方法(attackattackattack),奥特曼与小怪兽对象皆可重载该方法设置自己的攻击方法;设置一个alivealivealive函数用于判断对象的hphphp
  2. 设置一个奥特曼类,继承自FighterFighterFighter类,调用父类的初始化方法初始化奥特曼的namenamename与hphphp属性,同时设置自己的属性mpmpmp(魔法值);重载attackattackattack方法对小怪兽造成随机伤害(普通攻击);依靠mpmpmp设置究极必杀技(hugehugehuge_ attackattackattack)以及魔法群体伤害(magicmagicmagic_ attackattackattack);设定普通攻击之后自动恢复一定的魔法值(resumeresumeresume)
  3. 设置一个小怪兽类,继承自FighterFighterFighter类,调用父类的初始化方法初始化小怪兽的namenamename与hphphp属性;重载attackattackattack方法对奥特曼造成随机伤害
  4. 当某一方阵亡则退出游戏:奥特曼使用alivealivealive判断是否存活,设置方法(isisis_ anyanyany_ alivealivealive)判断全体小怪兽是否存活
  5. 每回合攻击选择一只存活的小怪兽:设置方法(selectselectselect_ alivealivealive _oneoneone)用于选择存活的小怪兽
  6. 每回合结束显示奥特曼与小怪兽的信息:设置方法(displaydisplaydisplay _infoinfoinfo)显示信息
  7. 主体设置:(1)定义奥特曼与小怪兽对象,进行游戏;(2)首先选择一个活着的小怪兽并产生一个随机值,当随机值处于某个范围内,奥特曼采用普通攻击(attackattackattack)攻击小怪兽;(3)随机值处于某个范围并且魔法值足够则触发魔法伤害,对全体小怪兽造成伤害,否则使用魔法失败;(4)随机值处于另一个范围且魔法值足够触发究极必杀技,否则使用普通攻击;(5)若选定的小怪兽攻击之后依然存活则回击奥特曼;(6)回合结束显示奥特曼与小怪兽信息;(7)当某一方阵亡则退出游戏,宣布某一方游戏胜利

实现:

1.需要使用抽象类与抽象方法,从abcabcabc模块导入ABCMetaABCMetaABCMeta以及abstractmethodabstractmethodabstractmethod包;需要使用随机值,从randomrandomrandom模块导入randintrandintrandint以及randrangerandrangerandrange包

from abc import ABCMeta, abstractmethod
from random import randint, randrange

2.定义抽象类FighterFighterFighter

class Fighter(object, metaclass=ABCMeta):"""战斗者"""#通过__slots__魔法限定对象可以绑定的成员变量__slots__ = ('_name', '_hp')def __init__(self, name, hp):"""初始化方法:param name: 名字:param hp: 生命值"""self._name = nameself._hp = hp#使用property装饰器定义getter以及setter方法@propertydef name(self):return self._name@propertydef hp(self):return self._hp@hp.setterdef hp(self, hp):self._hp = hp if hp >= 0 else 0@propertydef alive(self):return self._hp > 0#抽象类方法@abstractmethoddef attack(self, other):"""攻击:param other: 被攻击的对象"""pass

3.定义奥特曼(UltramanUltramanUltraman)类,继承自FighterFighterFighter类

class Ultraman(Fighter):"""奥特曼"""__slots__ = ('_name', '_hp', '_mp')def __init__(self, name, hp, mp):"""初始化方法:param name: 名字:param hp: 生命值:param mp: 魔法值"""super().__init__(name, hp)self._mp = mp#普通攻击def attack(self, other):other.hp -= randint(15, 25)def huge_attack(self, other):"""究极必杀技(打掉对方至少50点或四分之三的血):param other: 被攻击的对象:return: 使用成功返回True否则返回False"""#放出大招,消耗50点魔法值造成伤害;魔法值不够则采用普通攻击if self._mp >= 50:self._mp -= 50injury = other.hp * 3 // 4injury = injury if injury >= 50 else 50other.hp -= injuryreturn Trueelse:self.attack(other)return Falsedef magic_attack(self, others):"""魔法攻击:param others: 被攻击的群体:return: 使用魔法成功返回True否则返回False"""#释放魔法攻击,消耗20魔法点;魔法值不够则使用魔法失败if self._mp >= 20:self._mp -= 20for temp in others:if temp.alive:temp.hp -= randint(10, 15)return Trueelse:return Falsedef resume(self):"""恢复魔法值"""incr_point = randint(1, 10)self._mp += incr_pointreturn incr_point#显示奥特曼个人信息def __str__(self):return '~~~%s奥特曼~~~\n' % self._name + \'生命值: %d\n' % self._hp + \'魔法值: %d\n' % self._mp

4.定义小怪兽(MonsterMonsterMonster)类,继承自FighterFighterFighter类

class Monster(Fighter):"""小怪兽"""__slots__ = ('_name', '_hp')def attack(self, other):other.hp -= randint(10, 20)#显示小怪兽个人信息def __str__(self):return '~~~%s小怪兽~~~\n' % self._name + \'生命值: %d\n' % self._hp

5.判断全体小怪兽是否存活

def is_any_alive(monsters):"""判断有没有小怪兽是活着的"""for monster in monsters:if monster.alive > 0:return Truereturn False

6.选择一只活着的小怪兽

def select_alive_one(monsters):"""选中一只活着的小怪兽"""monsters_len = len(monsters)while True:index = randrange(monsters_len)monster = monsters[index]if monster.alive > 0:return monster

7.显示奥特曼和小怪兽的信息

def display_info(ultraman, monsters):"""显示奥特曼和小怪兽的信息"""print(ultraman)for monster in monsters:print(monster, end='')

8.主体逻辑

def main():u = Ultraman('花花', 1000, 120)m1 = Monster('狄仁杰', 250)m2 = Monster('李元芳', 500)m3 = Monster('王大锤', 750)ms = [m1, m2, m3]fight_round = 1while u.alive and is_any_alive(ms):print('=======第%02d回合======' % fight_round)m = select_alive_one(ms)skill = randint(1, 10)if skill <= 6:print('%s使用普通攻击打了%s.' % (u.name, m.name))u.attack(m)print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))elif skill <= 9:  # 30%的概率使用魔法攻击(可能因魔法值不足而失败)if u.magic_attack(ms):print('%s使用了魔法攻击.' % u.name)else:print('%s使用魔法失败.' % u.name)else:  # 10%的概率使用究极必杀技(如果魔法值不足则使用普通攻击)if u.huge_attack(m):print('%s使用究极必杀技虐了%s.' % (u.name, m.name))else:print('%s使用普通攻击打了%s.' % (u.name, m.name))print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))if m.alive > 0:  # 如果选中的小怪兽没有死就回击奥特曼print('%s回击了%s.' % (m.name, u.name))m.attack(u)display_info(u, ms)  # 每个回合结束后显示奥特曼和小怪兽的信息fight_round += 1print('\n========战斗结束!========\n')if u.alive > 0:print('%s奥特曼胜利!\n' % u.name)else:print('小怪兽胜利!\n')if __name__ == '__main__':main()

测试:



【python】奥特曼打小怪兽文字游戏相关推荐

  1. python 奥特曼打小怪兽的简单版

    from random import randint #导入randint函数 class Monster(object):def __init__(self,name,energy):self.na ...

  2. Python——用面相对象写奥特曼大战小怪兽

    一,知识点 基本的面向对象知识 理解继承,多态,封装,不会的小伙可以看这篇超详细教程 了解基本的装饰器知识不会的小伙伴可以看这个讲解 ** 二,代码(奥特曼大战小怪兽) from abc import ...

  3. java奥特曼对战小怪兽_JAVA程序设计(09)-----面对对象设计初级应用 奥特曼打小怪兽...

    1.一个奥特曼固定属性 4个小怪兽随机名字 随机属性 奥特曼有几率发动暴风雪技能 对所有小怪兽造成 50%~60%冰霜伤害 无视防御力 普通攻击伤害为 攻击力*80~120% - 对方防御力*60%~ ...

  4. java奥特曼对战小怪兽_“奥特曼攻打小怪兽”java打怪升级第一步

    练习:回合制对战游戏:奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了! 不难看出场景中有两个对象:"奥特曼"这一对象抽象为"Ao"类: &q ...

  5. Scala - 小项目 - 奥特曼打小怪兽

    一.项目描述 奥特曼 1个名字血量普通 必杀 一次只能打1只魔法 所有奥特曼的攻击 10%必杀 30%魔法 60%普攻小怪兽 4只名字血量普通 回合制游戏示例输出: ======== 第1回合 === ...

  6. JAVA继承:奥特曼打小怪兽

    一.继承的基础知识: 1.类的继承的作用: 1)提高代码的重用性. 2)提高程序的扩展性. 简单来说,就是减少代码长度,减少工作量,工程量较小的时候,体现不出继承的优点,但是如果工程量很大的时候,比如 ...

  7. 奥特曼和小怪兽的故事

    "妈妈,妈妈,"小怪兽问,"我什么时候才能长大呢?" 正做饭的怪兽妈妈和蔼地问:"干吗想长大呀,做妈妈的乖宝宝不好吗?" "长大了 ...

  8. 简单的奥特曼打小怪兽

    奥特曼打小怪兽 需求 创建两个类,一个奥特曼类,一个怪兽类, 分别有各自对应的属性和方法 编写一个测试类,实现奥特曼与怪兽的创建,并让他们两个互相攻击,最后给出胜利结果 说明 奥特曼 属性: 血量 攻 ...

  9. java基础练习之奥特曼打小怪兽

    /******************外星人公共类******************/ public class Aliens {     // 外星人姓名     private String n ...

最新文章

  1. oracle win10家庭版,Windows10远程报错:由于CredSSP加密Oracle修正(ps:Win10家庭版)
  2. 产品经理对接第三方case,国内外4家公司联动落地项目
  3. 思科查看服务器启动配置文件,启动配置检查UCS
  4. 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
  5. python copy()和deepcopy()解释(import copy)
  6. 中国物联网激荡 20 年
  7. Freescale i.mx28 Boot-stream分析
  8. Python入门--列表元素的删除,remove(),pop(),切片,clear(),del
  9. 个人信息保护与大数据应用如何共存
  10. Office版本差别引发的语法问题
  11. paip.C#.net TIMER不起作用在用户控件中
  12. EXCEL调用REFPROP方法
  13. SQL数据库注入防范 ASP.NET Globle警告
  14. Python自动化办公:openpyxl绘制图表
  15. 如何安装OpenCVE
  16. three.js 笔记 --- 渲染图片 和 渲染obj,mtl文件
  17. t420i升级固态硬盘提升_固态硬盘能提升游戏性能吗
  18. 快手一键取关所有关注的人JS代码
  19. 解决Nvivo自动编码问题的语言包
  20. 风速仪原理是什么你知道么?

热门文章

  1. ChatPPT 国内首个AI自动生成PPT效率工具
  2. 前端校招面试该考察什么?
  3. 微信卡券领用的附加测试
  4. 【汇正财经】有色:全球钼价轮番拉涨,小市场或有大行情
  5. 搬运机械手及其控制系统设计(论文+CAD装配图+零件图+梯形图+接线图)
  6. 反省:低调做人,高调做事!
  7. Shakti是什么?
  8. python的pptx库_python学习之python-pptx
  9. PuddingSwap布丁美食帝国原材料即将上线
  10. 微信小程序宠物论坛4