2021年04月16日 23:46 __ _ _ _ _

文章配图

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

文章配图

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=0while result>0:    result=hero.attack(result)    count+=1print(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)

运行结果:

文章配图

未完待续…

文章配图

文章配图

为你,千千万万遍.

往期推荐:

TIOBE榜单四月已出:上古语言Fortran重回前20? 2021-04-08
文章配图

C++系列:链接器是如何工作的 2021-04-07
文章配图

C++系列:编译器是如何工作的 2021-04-05
文章配图

一键三连,就差你了
文章配图

预览时标签不可点

阅读




__