构建一个基于python文本的游戏:我试图访问字典中的特定值



大家好,我正在为一个类构建一个基于文本的游戏,在这个类中,我在房间之间移动,并尝试收集所有物品,而不与绒毛人(在本例中为记录执行官(一起进入房间,我只是在直接访问物品时遇到问题,以便将其添加到我的库存列表中。。

这是我的字典:

rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}

这是我的移动代码:

while gameOver != True:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('Enter your move:n')
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue

我从大堂向东移动,我当前的房间改成了酒吧,但我不知道如何进入其中的"物品"属性,这样我就可以将"键盘"添加到我的库存列表中。。。任何帮助都将不胜感激!!谢谢

为想要的字典编制索引

currentRoom['Item']

你会在移动后将其添加到列表中,所以在最后(在"尝试"、"除"之后,部分(你会添加:

inventory.append(currentRoom['Item'])

通过将其放在移动代码之后,可以从新房间中获取项目,而不是从现有房间中获取。

有些房间可能没有物品,所以你可以这样做:

try:
inventory.append(currentRoom['Item'])
except KeyError:
pass

这样可以防止在没有物品的情况下进入房间时出错。

另外,当你拿东西的时候,你可能想把它从房间里拿出来。所以你可以这样做。

try:
inventory.append(currentRoom['Item'])
del currentRoom['Item']
except KeyError:
pass

del从字典中删除密钥


顺便说一句,在你的移动代码中,你也应该更改

except Exception:

except KeyError:

因此,如果有不同的异常(例如,您按下ctrl-C(,则它不会捕捉到它

就像这个命令

currentRoom = rooms[currentRoom][playerMove]

你可以尝试将房间里的物品附加到变量(库存(中,最好是一个列表(如果满足你的要求,可以是一组(

inventory = []
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])

现在它应该是这样的:

inventory = []
gameOver = False
rooms = {
'Lobby':{'East': 'Bar'},
'Roof':{'South': 'Bar', 'East': 'Stage', 'Item': 'Steel guitar'},
'Bar':{'West': 'Lobby', 'North': 'Roof', 'East': 'Bathroom', 'South': 'Basement', 'Item': 'Keyboard'},
'Basement':{'North': 'Bar', 'East': 'Studio', 'Item': 'Drums'},
'Stage':{'West': 'Roof', 'Item': 'Microphone'},
'Soundcheck':{'South': 'Bathroom', 'Item': 'Bass Guitar'},
'Bathroom':{'North': 'Soundcheck', 'West': 'Bar', 'Item': 'Electric Guitar'},
'Studio': {'West': 'Basement', 'Item': 'Record Executive'}
}

while not gameOver:
playerStats(currentRoom, inventory, rooms)
# currentRoom
playerMove = input('n Enter your move: ')
if playerMove == 'pick' or playerMove == 'acquire' or playerMove == 'get':
# add to inventory if exists
for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
else:
print('nothing to pick')
else:
try:
currentRoom = rooms[currentRoom][playerMove]
except Exception:
print('Invalid move')
continue

编辑:

此外,你现在应该从房间中删除该项目,因为它现在已经被获取了——

(正如@Addlestrop在回答中指出的那样(

for i in rooms:
for j in i:
if j == 'Item':
inventory.append(rooms[i][j])
del rooms[i][j]
# copy item to inventory and delete from the room
else:
print('nothing to pick')

最新更新