我正在写一个文字冒险游戏作为练习。我是Python的新手。我试图将字典中的敌人伤害保存为范围:
giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':random.randrange(1, 4)}
player = {'health':20, 'weapon':None, 'holding':None}
所以我以后要做的就是访问这个范围并选择一个随机数 在该范围内并从玩家的健康状况中减去它。
atkDmg = giant_rat['attack']
player['health'] -= atkDmg
这给了我错误。这不应该工作吗? atkDmg是一个整数,播放器['health']也是如此,所以我不确定为什么它会给我一个错误?
此外,如果有更聪明的方法来实现这一点,那么我愿意接受建议。我想编写程序,以便我所要做的就是添加一个新的敌人(而不是仅仅在战斗函数循环中放入我想要的范围。)
我希望这是有道理的。
谢谢!
编辑:好的,这是实际的代码。我认为上面的代码与我的代码相同,但我想它不是:# Weapon Stats
weapon = {'Bone':(4, 9), 'None':random.randrange(2, 5)}
# Player Stats
player = {'weapon':'None', 'Health':20, 'Holding':'None'}
# enemy
giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':(1, 4)}
然后这是给我错误的代码:
atkDmg = weapon[player['weapon']]
enemy['Health'] -= atkDmg
def battleLoop():
enemyList = [giant_rat, giant_spider]
enemy = random.randrange(2)
stdio.writeln('Suddenly a ' + enemyList[enemy]['name'] + ' appears!')
attackLoop(enemy)
更新2:实际上,我已经弄明白了。在上面的代码中,我忘了给敌人分配敌人的值。我认为应该解决我的问题。谢谢你的帮助!
答案 0 :(得分:0)
您显示的代码完全没有问题,如下所示:
>>> import random
>>> giant_rat = {'name':'Giant Rat', 'Health':15, 'attack':random.randrange(1, 4)}
>>> player = {'health':20, 'weapon':None, 'holding':None}
>>> atkDmg = giant_rat['attack']
>>> atkDmg
3
>>> player['health'] -= atkDmg
>>> player['health']
17
因此,您的问题几乎肯定在于您显示的某些代码 。根据您收到的错误消息,您很可能会使用某种整数覆盖player
:
>>> player = 42
>>> player['health'] -= atkDmg
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable