温和的长问题,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()代码一样,可以正常工作。
答案 0 :(得分:0)
我没有使用items.CellKey()本身,而是访问了它的name属性(一个字符串)并且它有效。谢谢大家的帮助!