文本游戏开发:如何通过用户输入调用类的属性值?
我来帮你完善这个技能调用的功能!你的思路是对的,用字典做输入到技能对象的映射是个好方法,不过需要补全几个关键细节,让功能更健壮且易用。
先梳理现有问题
- 你的
cmnd2字典只包含了SHP,没把SWP加进去,没法处理另一个技能的输入 - 直接访问
cmnd2[inp]如果用户输入不存在的技能名,会直接抛出KeyError导致程序崩溃 - 没有明确返回或获取技能的属性(比如你需要的
AP数值)
完善后的代码实现
首先保持你的Abilities.py不变(确保所有技能都正确定义):
# Abilities.py import Nstats class Ability(): def __init__(self, AP, Desc): self.AP = int(AP) self.Desc = Desc SHP = Ability(10, "Super Hard Punch!") SWP = Ability(32, "Literally kills you!!")
然后修改战斗逻辑脚本里的convert函数,补全映射、错误处理和属性获取:
import Abilities def convert(inp): # 建立所有技能名称到对应Ability对象的映射表 skill_mapping = { 'SHP': Abilities.SHP, 'SWP': Abilities.SWP # 后续新增技能,直接在这里添加键值对即可,扩展性拉满 } # 先检查用户输入的技能是否存在 if inp not in skill_mapping: # 可以返回错误提示,或者根据游戏逻辑返回默认值/执行其他操作 return f"Invalid skill: '{inp}' doesn't exist!" # 获取选中的技能对象 target_skill = skill_mapping[inp] # 如果你需要直接返回AP数值,就返回这个 return target_skill.AP # 要是之后需要用到技能描述(Desc),也可以返回整个对象:return target_skill
测试使用示例
你可以这样调用这个函数,模拟用户输入:
# 模拟用户输入技能名 user_skill = input("Enter the skill you want to use: ") skill_ap = convert(user_skill) print(f"Skill AP value: {skill_ap}")
额外优化建议(可选)
为了让代码更模块化,你可以把技能映射表直接放在Abilities.py里,这样所有技能相关的定义都集中在一个地方:
# 在Abilities.py末尾添加 SKILL_REGISTRY = { 'SHP': SHP, 'SWP': SWP }
然后战斗脚本里直接用Abilities.SKILL_REGISTRY,不用自己维护映射表,后续改技能更方便。
这样修改后,用户输入正确的技能名就能拿到对应的AP数值,输入错误也不会崩溃,完全满足你的需求啦!
内容的提问来源于stack exchange,提问作者rauf543
相关产品推荐
相关产品推荐

