华为云高校联盟活动:Python模拟MOBA手游~英雄篇

举报
小Bob来啦 发表于 2021/04/16 23:57:55 2021/04/16
【摘要】 我们的命运也是如此,只是与有些人不同,我把失败当作一杯烈酒,咽下去的是苦涩,吐出来的却是精神。MOBA手游中最重要的便是玩家,在游戏中表现为英雄,与英雄相关的操作有英雄击杀,英雄重生,英雄升级等等。如果再细化一点那便是英雄的属性改变、英雄坐标的变化以及经验值的改变...在上节的初见英雄时,我们已经初始化了英雄相关的属性值。可是在游戏中英雄属性的值都是在不断变化的,那么我们该如何做到实时地改变...

我们的命运也是如此,只是与有些人不同,我把失败当作一杯烈酒,咽下去的是苦涩,吐出来的却是精神。

MOBA手游中最重要的便是玩家,在游戏中表现为英雄,与英雄相关的操作有英雄击杀,英雄重生,英雄升级等等。如果再细化一点那便是英雄的属性改变、英雄坐标的变化以及经验值的改变...

在上节的初见英雄时,我们已经初始化了英雄相关的属性值。可是在游戏中英雄属性的值都是在不断变化的,那么我们该如何做到实时地改变英雄属性的值呢?

To:其中需要注意的点有给类中的函数赋参数,以及如何做到数据实时更新、数据的变化都会引起下次数据的变化等等。

这一节中分为了三个部分:

  1. 英雄出击
  2. 英雄击杀
  3. 英雄重生

第一部分需要注意的是在计算攻击次数时对条件的判断,即怪物的血量值什么时候为0.
第二部分小编一直以为英雄击杀是分次数的,每次的攻击都是定值然后累计相加,怪物的血量也是分次数掉的,但最后发现其实在这个项目中的代码并非如此,而是一次直接计算次数
第三部分关键是对于经验值的掌握,比如攻击怪物所掉血量会获得多少经验,以及经验的积累,最终才是英雄升级。

每一节的三个部分层层递进还是安排的很合理的,难度把握也刚刚好,说了这么多,开始撕代码吧!

1.英雄出击


源代码:

# Hero类
class Hero(object):
    # Todo:初始化属性name, maxHP, maxMP, AD
    def __init__(self, name, maxHP, maxMP, AD):
        self.name=name
        self.maxHP=maxHP
        self.maxMP=maxMP
        self.AD=AD
    # Todo:补全attack方法 传入参数为:被英雄攻击的怪物的生命值,返回值为:被英雄攻击后,怪物的剩余生命值。
    def attack(self, result):
        #result=0
        return result-AD#怪物的生命值
'''
    #Todo:  输入五行字符,按照顺序依次为Hero类对象的名称(name)、
            最大生命值(maxHP)、最大魔法值(maxMP)、攻击力(AD)初始化,怪物最大生命值。
            建议最大生命值(maxHP)、最大魔法值(maxMP)、攻击力(AD)、怪物最大生命值为整数
'''
name=input()
maxHP=int(input())
maxMP=int(input())
AD=int(input())
result=int(input())

# Todo:实例化Hero对象,打印输出结果
hero=Hero(name,maxHP,maxMP,AD)
'''
#Todo : 调用Hero类的attack()方法,执行攻击动作,计算击杀当前怪物需要攻击几次。
友情提示:英雄反复攻击怪物,怪物生命值小于等于0,则停止攻击,计数器停止计数
'''
# Todo: 打印输出需要攻击的次数。
count=0
while result>0:
    result=hero.attack(result)
    count+=1
print(count)

运行结果:

图片

2.英雄击杀


源代码:

    # Todo:补全Hero类
    class Hero:
    # Todo: 初始化属性name、AD、maxEXP、currentEXP,升级所需经验值(maxEXP)默认为100、当前经验值(currentEXP)默认为0
        def __init__(self, name, AD):
            self.name=name
            self.AD=AD
    # attack方法,传入参数为:被英雄攻击的怪物的生命值,返回值为:被英雄攻击后,怪物的剩余生命值。
        def attack(self, result):
            return result-AD
     # Todo:补全isKilled方法,传入参数为:击杀的怪物的生命值,返回值为:击杀该怪物,英雄应该获得的经验值。怪物每10点生命值,英雄获取1点经验值。
    
        def isKilled(self, result):
            return result//10
    '''
    #Todo:  输入三行字符,按照顺序依次为Hero类对象的名称(name)、
    攻击力(AD)、怪物的生命值初始化
    '''
    name=input()
    AD=int(input())
    result=int(input())
    # Todo:实例化Hero对象,打印输出结果
    
    hero=Hero(name,AD)
    '''
     #Todo : 调用Hero类的attack()方法,执行攻击动作,最终击杀怪物,调用isKilled方法返回英雄当前的经验值,打印输出。
           友情提示:英雄一直攻击怪物,怪物生命值小于等于0,则停止攻击。
    '''
    s=hero.isKilled(result)
    # Todo: 调用Hero类的isKilled()方法, 计算英雄获取的经验值
    print(s)
    # Todo: 打印输出当前Hero对象的经验值

    运行结果:

    图片

    3.英雄重生


    源代码:

      # Todo:补全Hero类
      class Hero:
      # Todo:  初始化属性name、AD、maxEXP、currentEXP,升级所需经验值(maxEXP)默认为100、
      #       当前经验3值(currentEXP)默认为0、英雄当前等级(currentLevel)默认为1
          def __init__(self, name, AD):
              self.name=name
              self.AD=AD
              self.curentEXP=0
              self.currentLevel=1
      # Todo:  补全isKilled方法,
      # 传入参数为:击杀的怪物的生命值,
      # 返回值为:击杀该怪物,英雄应该获得的经验值。
      # 怪物每10点生命值,英雄获取1点经验值。
          def isKilled(self, result):
              curentEXP=result//10
              return curentEXP
      
          # Todo:  补全changeExp()方法,
      #       传入参数为:英雄应该获得的经验值,
      #       返回值为:英雄提升等级数值。
      #       默认英雄击杀一个怪物最多提升一个等级
          def changeExp(self, exp):
              result = self.currentLevel
              if exp<100:
                  result=1
              else:
                  result+=1
              return result
      '''
          #Todo:  输入三行字符,按照顺序依次为Hero类对象的名称(name)、
                  攻击力(AD)、怪物的生命值初始化
      '''
      name=input()
      AD=int(input())
      result=int(input())
      # Todo:实例化Hero对象,打印输出结果
      hero=Hero(name,AD)
      
      # Todo: 调用Hero类的isKilled()方法, 计算英雄获取的经验值
      k=hero.isKilled(result)
      
      # Todo: 调用Hero类的changeExp()方法, 修改英雄经验值及等级状态
      s=hero.changeExp(k)
      
      # Todo: 打印输出英雄当前等级。
      print(s)

      运行结果:

      图片

      未完待续...

      【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
      • 点赞
      • 收藏
      • 关注作者

      评论(0

      0/1000
      抱歉,系统识别当前为高风险访问,暂不支持该操作

      全部回复

      上滑加载中

      设置昵称

      在此一键设置昵称,即可参与社区互动!

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

      *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。