小小土贼 发表于 2020-5-14 13:06

面向对象练习,写的一个简单的文字游戏,英雄打怪兽

游戏的要求:如图
源代码:import random as r
#英雄(大类),包含精灵和人类两类s
class Hero:
    #属性,这里使用__init__方法,在创建Hero对象时默认被调用
    def __init__(hero, name):
      hero.name = name   # 名字
      hero.level = 1       # 等级
      hero.max_hp = hero.level*20# 最大生命
      hero.current_hp = hero.level*20# 当前生命
    #攻击
    def attack(hero):
      atk = r.randint(0, hero.level*10-1)
      print("-->英雄发起攻击!")
      return atk
    #升级
    def upgrade(hero):
      hero.current_hp= hero.current_hp+10#当前血量
      hero.level = hero.level +1#等级
      print("---->{} 升级,当前等级 {},当前血量 {}".format(hero.name, hero.level, hero.current_hp))
# 人类(英雄分支1)
class HeroHuman(Hero):
    # 属性
    def __init__(hero, name):
      super(HeroHuman, hero).__init__(name)#继承
      hero.avd = 0.4      # 灵活性
    #防御
    def defense(hero, atk):
      is_hurt = r.random()#产生随机数,如果小于0.4则躲避,大于则命中
      if hero.avd < is_hurt:
            hero.current_hp -= atk
            print("-->英雄_人类:受到 {}点伤害,当前血量 {}".format(atk, hero.current_hp))
      else:
            print("-->英雄_人类:躲避,未命中!")

# 精灵(英雄分支2)
class HeroSpirit(Hero):
    # 属性
    def __init__(hero, name):
      super(HeroSpirit, hero).__init__(name)
      hero.avd = 0.7      # 灵活性
    # 防御
    def defense(hero, atk):
      is_hurt = r.random()
      if hero.avd < is_hurt:
            hero.current_hp -= atk
            print("-->英雄_精灵:受到 {}点伤害,当前血量 {}".format( atk, hero.current_hp))
      else:
            print("-->英雄_精灵:躲避,未命中!")


#怪兽(大类),包含怪兽和大怪兽
class Monster:
    #属性
    def __init__(monster, name, level):
      monster.name = name      # 名字
      monster.level = level    # 等级
      monster.max_hp = int(level * 15)# 最大生命
      monster.current_hp = int(level * 15)# 当前生命
      # 攻击

    def attack(monster):
      atk = r.randint(0, monster.level * 10 - 1)
      print("-->怪兽发起攻击!".format(monster.name))
      return atk

      # 防御
    def defense(monster, atk):
      monster.current_hp -= atk
      print("-->怪兽受到 {} 点伤害,当前血量 {}".format( atk, monster.current_hp))

# 大怪兽,拥有护盾属性并重写防御方法
class Monster_bigMonster(Monster):
    # 属性
    def __init__(Big_monster, name, level):
      super(Monster_bigMonster, Big_monster).__init__(name, level)
      Big_monster.shield = Big_monster.max_hp * 0.2# 护盾
    # 防御
    def defense(Big_monster, atk):   # 重写防御方法,受到攻击优先扣除护盾
      if Big_monster.shield - atk >= 0:
            Big_monster.shield = atk-Big_monster.shield
            print("-->大怪兽:受到 {}点伤害,当前护盾值 {} 血量 {}".format( atk, Big_monster.shield, Big_monster.current_hp))
      else:
            if Big_monster.shield > 0:
                Big_monster.current_hp -= Big_monster.shield
                Big_monster.shield = 0
                print("-->大怪兽:受到 {}点伤害,当前护盾值 {} 血量 {}".format( atk, Big_monster.shield, Big_monster.current_hp))
            else:
                Big_monster.current_hp -= atk
                print("-->大怪兽:受到 {}点伤害,当前护盾值 {} 血量 {}".format(Big_monster.name, atk, Big_monster.shield, Big_monster.current_hp))


#主方法
def main():
    #生成一个英雄,两个低等级怪兽,一个大怪兽
    h1 = HeroHuman("人类")
    m1 = Monster("怪兽1", 1)
    m2 = Monster("怪兽2", 2)
    m3 = Monster_bigMonster("大怪兽", 3)
    enemy =
    r = 1
    while True:
      print("回合{}:".format(r))
      enemy[0].defense(h1.attack())   # 英雄先攻击第一个怪兽,直到一方死亡
      if enemy[0].current_hp <= 0:   # 如果怪兽阵亡,从列表中删除这个怪兽,英雄升级
            print("{} 阵亡".format(enemy[0].name))
            h1.upgrade()
            del enemy[0]
      # 判断英雄成功还是失败
      if len(enemy) == 0:      # 英雄胜利的条件是怪兽数量为0
            print("---->英雄:Win!")
            return

      for each in enemy:       # 英雄攻击完后,怪兽依次攻击英雄
            h1.defense(each.attack())
      if h1.current_hp <= 0:    # 失败
            print("---->英雄:Lose!")
            return
      r += 1    # 回合数

#python程序入口
if __name__ == '__main__':
main()
运行效果:

深爱我的女孩 发表于 2020-5-14 13:26

让我想起了,曾经的3G版精武堂

宇宙小菜鸟 发表于 2020-5-14 14:23

这就是正儿八经的文字游戏了?开个玩笑哈还蛮有趣的
页: [1]
查看完整版本: 面向对象练习,写的一个简单的文字游戏,英雄打怪兽