Python文本冒险 - 与游戏世界交互的项目

时间:2016-11-08 00:22:14

标签: python python-3.x

温和的长问题,tl;博士在底部。

这里有蟒蛇初学者。我正在这样这是一个令人沮丧的时间,试图在这个文本冒险中让物品与世界互动。我可以让玩家拿起物品和交易物品,但是我无法获得与世界互动的物品。我的目标:为一个房间需要一个项目,以便玩家继续。截至目前,我不需要比显示不同文本更复杂的东西,即“单元格被锁定。找到密钥!”没有库存中的钥匙,“你解锁了牢房!”用库存中的钥匙。最终我会要求玩家输入。我知道这可以通过一个简单的“库存中的项目”声明来完成,但它似乎不起作用。

我的房间代码:

class GoalCell(MapTile):

    def __init__(self, x, y):
        self.item = items.CellKey()
        self.have_key = False
        super().__init__(x, y)

    def modify_player(self, player):
        if self.item in player.inventory:
            self.have_key = True
            player.inventory.remove(self.item)
            print("Key used.") #I tried using this to see if this function was even running. Alas, it is not, and the statement does not show up.

    def intro_text(self):
        if self.have_key:
            return "\nYou unlock the cell with your key. Congratulations, you freed your uncle and won the game!"
        else:
            return "\nYou enter the cell of your derelict uncle. 'Hey, kid,' he rasps, 'you gotta get me out of here.' The key has to be here somewhere..."

(编辑)我很抱歉,上面的代码没有返回错误 - 它根本不起作用。即使钥匙在玩家的库存中,所有显示的内容都是“你进入被遗弃的叔叔的牢房......”。引用的Player类:

class Player:
    def __init__(self):
            self.inventory = [items.Fists(),
                              items.CellKey()]
            self.x = world.start_tile_location[0]
            self.y = world.start_tile_location[1]
            self.hp = 100
            self.money = 0
            self.victory = False

我在主游戏代码中有这一行,所以大写不是问题:

player = Player()

我有其他房间使用'player.inventory'调用(附加项目,删除项目等),这些工作正常,如下面非常相似的代码:

class FindWeaponTile(MapTile):
    def __init__(self, x, y):
        self.item = items.BrassKnuckles()
        self.item_claimed = False
        super().__init__(x, y)

    def modify_player(self, player):
        if not self.item_claimed:
            self.item_claimed = True
            player.inventory.append(self.item)
            print("Weapon added.")

    def intro_text(self):
        if self.item_claimed:
            return "\nAn empty area of the rec yard. Nowhere to turn but back the way you came."
        else:
            return "\nYou spot some brass knuckles on the ground!"

该代码在拾取物品之前/之后显示正确的文字,并将该物品附加到玩家的库存中,没有任何问题。

最终我想用更复杂的“锁定和关键”谜题制作游戏,让我感到烦恼的是我不能做这个简单的例子。任何和所有的帮助将不胜感激。

Tl; dr 我的房间显示的内容类似于“监狱牢房被锁定。钥匙必须在某个地方......”而玩家没有钥匙。当玩家拥有钥匙时,我希望它显示“你解锁了牢房!”管他呢。尝试“如果库存中的项目”无济于事。失意。请。帮助

修改 对不起,这可能有所帮助。主要游戏功能:

def play():
    print("Welcome to the Delaware County Correctional Facility!")
    world.parse_world_dsl()
    player = Player()
    while player.is_alive() and not player.victory:
        room = world.tile_at(player.x, player.y)
        print(room.intro_text())
        room.modify_player(player)
        if player.is_alive() and not player.victory:
            choose_action(room, player)
        elif not player.is_alive():
            print("The inmates got the best of you! Game over!")

修改 我很抱歉,我编辑了原来的问题,因为我上面显示的代码没有给我一个错误。对我来说是明确的错误。这个错误得到了解决。我的问题是,代码完全不符合我的要求。它返回的只是玩家没有钥匙时的介绍文本(即使他们这样做)。它与FindWeaponTile()代码一样,可以正常工作。

1 个答案:

答案 0 :(得分:0)

我没有使用items.CellKey()本身,而是访问了它的name属性(一个字符串)并且它有效。谢谢大家的帮助!