提问人:Toby 提问时间:8/30/2023 更新时间:8/30/2023 访问量:51
while 循环和字典问题
while loop and dictionary issue
问:
我正在尝试使用 Python 创建一个基于文本的游戏。
我目前的问题涉及我试图构建战斗系统。一开始,它会显示你和敌人的统计数据(技能/耐力),然后是你的选项(攻击/物品/逃跑)。
当你选择攻击时,成功命中应该会从被击中的人身上移除 2 点耐力。
我的问题是整体耐力似乎不想降低:
tempSkill = skill
tempStamina = stamina
tempLuck = luck
enemyName = Creature.goblin['enemy_name']
enemySkillTemp = Creature.goblin['skill']
enemyStamina = Creature.goblin['stamina']
while enemyStamina and tempStamina > 0:
print(f"\nyou encountered {enemyName}!")
print(f"{enemyName} | SKILL: {enemySkillTemp} | STAMINA: {enemyStamina}")
print(f"{name.upper()} | SKILL: {tempSkill} | STAMINA: {tempStamina}")
print("1. ATTACK")
print("2. ITEM")
print("3. FLEE")
choice = input("\nMake your choice: (1, 2, 3): ")
choice = int(choice)
if choice == 1:
playerAS = Combat.attackSkillRoll(tempSkill)
enemyAS = Combat.attackSkillRoll(enemySkillTemp)
print("\nATTACK!")
print(f"{enemyName} rolled {enemyAS - enemySkillTemp}! | Attack Strength: {enemyAS}")
print(f"{name.upper()} rolled {playerAS - tempSkill}! | Attack Strength: {playerAS}")
if enemyAS > playerAS:
print(f"{name.upper} wounded! (-2 STAMINA)")
print(Combat.wound(tempStamina))
elif playerAS > enemyAS:
print(f"{enemyName} wounded! (-2 STAMINA)")
print(Combat.wound(enemyStamina))
print("1. Continue")
print("2. Test your LUCK?")
choice2 = input ("Make your choice: (1, 2): ")
choice2 = int(choice2)
if choice2 == 1:
continue
elif choice2 == 2:
pass
else:
print("Try that again...")
elif choice == 2:
print("Here are your items!")
elif choice == 3:
print("You fled... (-2 STAMINA)")
else:
print("Try that again...")
enemyStamina
应在外部文件中传递给战斗类
def wound (x):
return x - 2
然后它应该回到while循环的开头,直到任何一个实体的耐力耗尽。
我的一个理论是,它从另一个名为 Creature 的外部类中的字典中检索敌人的耐力:
class Creature:
goblin = {
"enemy_name" : "GOBLIN",
"skill" : 5,
"stamina" : 6
}
我试过复制字典,但认为我做错了。
任何帮助将不胜感激
答:
2赞
Code-Apprentice
8/30/2023
#1
这里的问题在于代码的这些部分的组合:
Combat.wound(enemyStamina)
def wound (x):
return x - 2
在这里,该函数通过从传递给参数的值中减去 2 来计算值,但它不会更改值,也不会更改其值被传递给的变量的值。wound()
x
x
x
我建议做这样的事情:
class Creature:
def __init__(name, skill, stamina)
self.name = name
self.skill = skill
self.stamina = stamina
def wound(damage):
self.stamina = self.stamina - damage
请注意此版本如何更改 的值。现在你可以用类似的东西创建一个生物wound()
stamina
goblin = Creature("goblin", 5, 6)
然后你可以用
print(goblin.stamina) // 6
goblin.wound(2)
print(goblin.stamina) // 4
这个职业现在可以重复使用来制作兽人、地精、龙或其他任何你想要的东西。你甚至可以重用这个类来表示英雄,或者你可以为英雄创建一个单独的类。我建议您阅读有关函数和类如何工作的更多信息,以理解这一点并能够自己编写这样的代码。Creature
评论