华为云高校联盟活动:Python模拟MOBA手游~英雄篇
【摘要】 我们的命运也是如此,只是与有些人不同,我把失败当作一杯烈酒,咽下去的是苦涩,吐出来的却是精神。MOBA手游中最重要的便是玩家,在游戏中表现为英雄,与英雄相关的操作有英雄击杀,英雄重生,英雄升级等等。如果再细化一点那便是英雄的属性改变、英雄坐标的变化以及经验值的改变...在上节的初见英雄时,我们已经初始化了英雄相关的属性值。可是在游戏中英雄属性的值都是在不断变化的,那么我们该如何做到实时地改变...
我们的命运也是如此,只是与有些人不同,我把失败当作一杯烈酒,咽下去的是苦涩,吐出来的却是精神。
MOBA手游中最重要的便是玩家,在游戏中表现为英雄,与英雄相关的操作有英雄击杀,英雄重生,英雄升级等等。如果再细化一点那便是英雄的属性改变、英雄坐标的变化以及经验值的改变...
在上节的初见英雄时,我们已经初始化了英雄相关的属性值。可是在游戏中英雄属性的值都是在不断变化的,那么我们该如何做到实时地改变英雄属性的值呢?
To:其中需要注意的点有给类中的函数赋参数,以及如何做到数据实时更新、数据的变化都会引起下次数据的变化等等。
这一节中分为了三个部分:
-
英雄出击 -
英雄击杀 -
英雄重生
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)