当前位置: 首页 > 知识库问答 >
问题:

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

伊锦
2023-03-14

嘿,大家好,我正在为一个班级构建一个基于文本的游戏,在那里我在房间之间移动,并试图收集所有的物品,而不必进入房间,在这种情况下,记录执行人员,我只是有问题直接访问该项目,以便我可以把它加在我的库存清单上...

这是我的字典:

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

我从大堂向东移动,我现在的房间像它应该的那样变成了酒吧,但是我不知道如何去里面的“项目”属性,这样我就可以把“键盘”添加到我的库存清单中...任何帮助都将不胜感激!!谢谢你们

共有2个答案

戚建德
2023-03-14

就像这个命令

##################################################################################################

您可以尝试将文件室中的项目附加到变量(库存)中,最好是一个列表(或一个集合,如果满足您的要求)

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')

子车凌龙
2023-03-14

索引你想要的字典

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),则它不会捕获它。

 类似资料:
  • 我对编程游戏相当陌生;我已经3/4完成了,我有一个关于我制作的一个基于文本的小游戏的问题。。。所以在这个游戏中,我的

  • 我想解析一个。属性文件的键和值放入python字典。这个我正在解析的属性文件使用以下语法(键和值是示例): 因此,每个值对应一个键,该键由一个或多个级别除以周期组成。目标是创建一个Python字典,其中每个键都是一个包含其值和子键的字典。字典应该是递归可写的,因此每个级别都应该遵循相同的结构。 上一个示例应生成以下类型的词典: 我用python中的以下算法循环它: 生成的字典(outputDket

  • 我试图在webGL中构建我的游戏,但我得到了这个错误 找不到文件“C:\users----\OneDrive\Documents\Endless\Runner\Temp\StagingArea\Data\Native\Build.bc” 我对unity和stackoverflow很陌生,所以不要对我太苛刻。

  • 我试图制作一个简单的基于文本的游戏,在这个游戏中,你在一个由“#”组成的网格周围移动“@”,并试图找到出口。我已经改变了代码,使我更容易使网格更大或更小,而无需添加或删除大量代码,它一直给我这样的输出: 我不知道这是怎么回事!只有一个“@”应该出现:(我只是python的新手,所以如果您有任何改进的建议,请不要犹豫,然后发布它们!提前感谢,

  • 我需要一个基于文本的python游戏的帮助,我已经完成了大部分工作,我可以在所有3个房间之间移动,顶部有“大厅”,然后往南走“卧室”往东走“地窖”我可以往回走,所以往西走“卧室”向北走,最后回到大厅。 问题是,如果我在大厅里输入东,它会跳到地窖,而不是说无效移动,那里有一面墙。我想做的是 显示玩家当前所在房间的输出。决策分支告诉游戏如何处理不同的命令。命令可以是在房间之间移动(如向北、向南、向东或

  • 您好,我是新来的编码和创建一个基于文本的游戏在python中。我正在写代码从一个房间搬到另一个房间。我需要一些人帮我清理目前为止所做的事情。我运行了一个即时反馈程序,得到了以下提示,但不确定如何纠正: 大厅字符串是主字典中的一个关键字。修改代码,使其不是主字典中的关键字。 它说它不能分类我的代码(不确定那是什么意思) 将多个打印命令合并到一个函数中 使用非复杂条件使条件更简单 更好地练习在True