【python】奥特曼打小怪兽文字游戏
设计基本思路:
- 设置一个抽象类(FighterFighterFighter),用来初始化奥特曼与小怪兽的基本属性(name,hpname,hpname,hp);同时设置一个抽象类方法(attackattackattack),奥特曼与小怪兽对象皆可重载该方法设置自己的攻击方法;设置一个alivealivealive函数用于判断对象的hphphp
- 设置一个奥特曼类,继承自FighterFighterFighter类,调用父类的初始化方法初始化奥特曼的namenamename与hphphp属性,同时设置自己的属性mpmpmp(魔法值);重载attackattackattack方法对小怪兽造成随机伤害(普通攻击);依靠mpmpmp设置究极必杀技(hugehugehuge_ attackattackattack)以及魔法群体伤害(magicmagicmagic_ attackattackattack);设定普通攻击之后自动恢复一定的魔法值(resumeresumeresume)
- 设置一个小怪兽类,继承自FighterFighterFighter类,调用父类的初始化方法初始化小怪兽的namenamename与hphphp属性;重载attackattackattack方法对奥特曼造成随机伤害
- 当某一方阵亡则退出游戏:奥特曼使用alivealivealive判断是否存活,设置方法(isisis_ anyanyany_ alivealivealive)判断全体小怪兽是否存活
- 每回合攻击选择一只存活的小怪兽:设置方法(selectselectselect_ alivealivealive _oneoneone)用于选择存活的小怪兽
- 每回合结束显示奥特曼与小怪兽的信息:设置方法(displaydisplaydisplay _infoinfoinfo)显示信息
- 主体设置:(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】奥特曼打小怪兽文字游戏相关推荐
- python 奥特曼打小怪兽的简单版
from random import randint #导入randint函数 class Monster(object):def __init__(self,name,energy):self.na ...
- Python——用面相对象写奥特曼大战小怪兽
一,知识点 基本的面向对象知识 理解继承,多态,封装,不会的小伙可以看这篇超详细教程 了解基本的装饰器知识不会的小伙伴可以看这个讲解 ** 二,代码(奥特曼大战小怪兽) from abc import ...
- java奥特曼对战小怪兽_JAVA程序设计(09)-----面对对象设计初级应用 奥特曼打小怪兽...
1.一个奥特曼固定属性 4个小怪兽随机名字 随机属性 奥特曼有几率发动暴风雪技能 对所有小怪兽造成 50%~60%冰霜伤害 无视防御力 普通攻击伤害为 攻击力*80~120% - 对方防御力*60%~ ...
- java奥特曼对战小怪兽_“奥特曼攻打小怪兽”java打怪升级第一步
练习:回合制对战游戏:奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了! 不难看出场景中有两个对象:"奥特曼"这一对象抽象为"Ao"类: &q ...
- Scala - 小项目 - 奥特曼打小怪兽
一.项目描述 奥特曼 1个名字血量普通 必杀 一次只能打1只魔法 所有奥特曼的攻击 10%必杀 30%魔法 60%普攻小怪兽 4只名字血量普通 回合制游戏示例输出: ======== 第1回合 === ...
- JAVA继承:奥特曼打小怪兽
一.继承的基础知识: 1.类的继承的作用: 1)提高代码的重用性. 2)提高程序的扩展性. 简单来说,就是减少代码长度,减少工作量,工程量较小的时候,体现不出继承的优点,但是如果工程量很大的时候,比如 ...
- 奥特曼和小怪兽的故事
"妈妈,妈妈,"小怪兽问,"我什么时候才能长大呢?" 正做饭的怪兽妈妈和蔼地问:"干吗想长大呀,做妈妈的乖宝宝不好吗?" "长大了 ...
- 简单的奥特曼打小怪兽
奥特曼打小怪兽 需求 创建两个类,一个奥特曼类,一个怪兽类, 分别有各自对应的属性和方法 编写一个测试类,实现奥特曼与怪兽的创建,并让他们两个互相攻击,最后给出胜利结果 说明 奥特曼 属性: 血量 攻 ...
- java基础练习之奥特曼打小怪兽
/******************外星人公共类******************/ public class Aliens { // 外星人姓名 private String n ...
最新文章
- oracle win10家庭版,Windows10远程报错:由于CredSSP加密Oracle修正(ps:Win10家庭版)
- 产品经理对接第三方case,国内外4家公司联动落地项目
- 思科查看服务器启动配置文件,启动配置检查UCS
- 客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)
- python copy()和deepcopy()解释(import copy)
- 中国物联网激荡 20 年
- Freescale i.mx28 Boot-stream分析
- Python入门--列表元素的删除,remove(),pop(),切片,clear(),del
- 个人信息保护与大数据应用如何共存
- Office版本差别引发的语法问题
- paip.C#.net TIMER不起作用在用户控件中
- EXCEL调用REFPROP方法
- SQL数据库注入防范 ASP.NET Globle警告
- Python自动化办公:openpyxl绘制图表
- 如何安装OpenCVE
- three.js 笔记 --- 渲染图片 和 渲染obj,mtl文件
- t420i升级固态硬盘提升_固态硬盘能提升游戏性能吗
- 快手一键取关所有关注的人JS代码
- 解决Nvivo自动编码问题的语言包
- 风速仪原理是什么你知道么?