我正在做一个选择你自己的冒险项目,它的主要功能是接受3个参数。
举例说明。
text1 = 'This is the scenario'
text2 = 'These are the choices'
dict2 = {'1':[text2, text1, dict1]}
dict1 = {'1':[text1, text2, dict2]}
def mainloop(scenario, choice, consequence):
print scenario
print choice
answer = raw_input('Please input 1, 2 or 3>>> ')
if answer in consequence.keys():
mainloop(*consequence[answer])
mainloop(text3, text2, dict1) 我认为这将是设计我的项目的一个很好的方法,但是我遇到了字典参数的问题。因为字典值包含一个参数列表,其中包括其他字典,所以我一直收到错误:
NameError: name 'dict1' is not defined翻翻我定义字典的顺序会导致同样的错误,只是没有定义'dict2‘。关于如何让这个概念发挥作用,有什么建议吗?还是该采取完全不同的方法了?
发布于 2013-11-13 18:44:45
有几件事,我建议重新考虑的方法作为一个整体。
正如其他人指出的那样,mainloop()实际上不是一个循环;它是一个递归函数。理想情况下,如果这是一个游戏循环,您会希望它更像…
def myGameLoop():
gameRunning = True
while gameRunning:
# code that displays your rooms, gets user input,
#and checks to make sure that gameRunning is not False.
#for an example, something like:
if somethingAwfulHappened
gameRunning = False这样,您就不必不止一次地调用mainloop,也没有理由让它自己调用它。
另外,你的房间清单告诉你它们不存在的原因是,嗯,它们不存在:)这实际上是一个很好的例子,说明为什么把你的关注点分开是个好主意!
你可以这样想:为什么一个“房间”对象--不管它是一个迪克,一个列表,一个对象,等等--需要包含任何关于其他房间的数据?你的厨房可能通向你的浴室,当然--但你的厨房知道它通向浴室吗?它是否有一个新的用途,引导到浴室而不是你的卧室?就像你的厨房不关心它与你的浴室相连一样,你的老二也不需要通过在自己的数据中明确地命名彼此来“知道”它们之间的联系。
一个理想的方法可能是去定义您所有的房间,然后创建一个“地图”来描述您的房间之间的关系。例如:
kitchen = {
"name":"Kitchen",
"description": "This is the kitchen! It's nice and clean.",
"exits": "S", "E"
}
bathroom = {
"name":"Bathroom",
"description":"This is the bathroom. Someone left a towel on the floor.",
"exits":"W", "S"
}
#and so on, creating rooms现在,创建一个只保存所有这些信息并描述这些出口是如何工作的地图迪克。
mapOfHouse = {
"kitchen": kitchen,
"leadsTo": {
"S": bathroom,
"E": someOtherRoom ##some other place you've defined
},
"bathroom": bathroom,
"leadsTo": {
"S": otherAwesomePlaces,
"E": kitchen
},
#and so on for other rooms in the house/on the map/etc
}一旦你把所有这些都画出来,你就会设置你的游戏程序来获取玩家的输入,根据房间的出口来检查它,如果有匹配的话,只要循环仍然是True,它就会返回到顶部,显示更新的信息。
这似乎是更多的工作,但实际上,这给了你巨大的自由。它让你在设计房间的时候把注意力严格放在房间上,然后在你更新的时候把注意力放在地图上,然后让你设计一个游戏循环,它不太关心它正在循环的内容,只要它一直保持True,并从玩家那里得到好的指示。
发布于 2013-11-13 18:14:19
我不太清楚您为什么需要两个dicts,但假设需要使用循环引用来定义dicts是可能的:
text1 = 'This is the scenario'
text2 = 'These are the choices'
dict1, dict2 = {}, {}
dict2['1'] = [text2, text1, dict1]
dict1['1'] = [text1, text2, dict2]发布于 2013-11-13 18:11:17
您在dict2中引用了dict2,但是dict1还不存在。
https://stackoverflow.com/questions/19961202
复制相似问题