回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我在写一个类似口袋妖怪的转身基地战斗模拟器。我已经很好了,但我有个问题。我试着把动作写成字典,这样我就可以为它的对象中的每个怪物指定动作集。这样我就有了一本字典,里面有他们所有的动作和伤害。然后我就把这些动作传给怪物。这使我可以给每个怪物唯一的移动集,而不必指定每次移动造成的伤害。我遇到的问题是在while循环中,当用户选择攻击时,我得到了错误</p>
<pre><code>AttributeError: 'set' object has no attribute 'get'
</code></pre>
<p>我试着让用户输入攻击,这样它就可以从怪物1hp中获得伤害并减去它</p>
<p>如果我把字典放在对象中,它可以正常工作,但是每个对象都必须有自己的字典,我只想为所有移动设置一个字典,然后为移动集中的每个对象指定移动,如果这有意义的话。你知道吗</p>
<pre><code>import random
class Monster:
def __init__(self, name, types, hp, region, disc, strength, weakness, moveset):
self.name = name
self.type = types
self.hp = hp
self.region = region
self.disc = disc
self.strength = strength
self.weakness = weakness
self.moveset = moveset
moves_dict = {
"hyperbeam": 14,
"flames": 34,
"water": 27,
"cent": 33,
}
Ariol = Monster("Ariol", "shadow", 1000, "Xevor", "A monster from hell", "psychic", "electricity", {"hyperbeam", "flames", "water", "cent"})
Xenos = Monster("Xenos", "shadow", 300, "Xevor", "A monster from hell", "psychic", "electricity", {"hyperbeam", "flames", "water", "cent"})
Siance = Monster("Siance", "shadow", 500, "Xevor", "A monster from hell", "psychic", "electricity", {"hyperbeam", "flames", "water", "cent"})
Mammy = Monster("Mammy", "shadow", 3000, "Xevor", "A monster from hell", "psychic", "electricity", {"hyperbeam", "flames", "water", "cent"})
def choose_monster():
monster_menu = {
"Ariol" : Ariol,
"Xenos" : Xenos,
"Siance" : Siance,
"Mammy" : Mammy,
}
#choosemonster
trainer_monster = input("What monster do you want to use?\n")
#variable is holding monster chosen
monster_chosen1 = monster_menu.get(trainer_monster)
#get monster 1 hp
computer_choose = random.choice(list(monster_menu))
computer_chosen1 = monster_menu[computer_choose]
print("You chose", monster_chosen1.name,"!")
print("Your opponenet chose", computer_chosen1.name, "!")
#this dict not used
moveset_dict = {
"1": 14,
"2": 34,
"3": 27,
"4": 33,
}
#how to get monster hp from above
#monster1hp = Ariol.hp
monster1hp = monster_chosen1.hp
monster2hp = computer_chosen1.hp
while monster1hp or monster2hp <= 0:
#monster1 moveset
for x in monster_chosen1.moveset:
print(x)
choose_attack = input("What move would you like to use?\n")
attack_chosen = monster_chosen1.moveset.get(choose_attack)
monster2hp = monster2hp - attack_chosen
print(monster_chosen1.name, "used ", attack_chosen, computer_chosen1.name, "has", monster2hp, "hp")
if monster2hp <= 0:
print(computer_chosen1.name, "was knocked out", monster_chosen1.name, "wins!")
break
attack_chosen = random.choice(list(computer_chosen1.moveset))
monster1hp -= computer_chosen1.moveset[attack_chosen]
print(computer_chosen1.name, "used", attack_chosen, monster_chosen1.name, "has", monster1hp, "hp")
if monster1hp <= 0:
print(monster_chosen1.name, "was knocked out", computer_chosen1.name, "wins!")
break
else:
print("Battle over")
choose_monster()
</code></pre>