我是python的新手,我正在尝试在python中创建一个基本的文本冒险。基本上,它的工作方式是有一个声明,然后是两个或三个选择,每个选择导致不同的东西。我的问题是:如何将2个语句链接在一起,以便当它们位于不同的层时它们会产生相同的结果?我想做的是这样的事情(这只是我所拥有的简化版本):
>>> choice1 = input("Will you drink the potion?")
>>> if choice1 == "A":
>>> choice2 = input("You drink it, and when you do, you start to see strange visions. But, to your right, you see another bottle marked 'antidote'\nDrink it?")
>>> if choice2 == "B":
>>> print("You die")
>>> elif choice2 == "A":
>>> elif choice1 == "B":
>>> #etc, etc.
在这里,我想要choice2,如果给出输入A,则返回同一位置choice1,如果给定输入B,将导致(choice3)。
答案 0 :(得分:8)
您正在寻找的是所谓的“状态机”(更具体地说是有限状态机)。你有一个状态为A
的玩家。然后,他们会获得许多选项,可以将其移至州B
或C
。从B
开始,他们会有更多选择,可以将他们带到其他州 - 例如,状态C
。
实现状态机的方法有很多种。例如,您可以简单地使用字典,其中键是状态,值是选择列表和结果状态:
{'A': {'prompt': 'Will you drink the potion?',
'choices': ['B', 'C']}
'B': {'prompt': 'You drink it and when you do, ...',
'choices': ['C']}
'C': {'prompt': 'You die'}}
这显然可以变得更加复杂,使用这样的词典不能很好地扩展到更复杂的选择集,但它应该给你一个想法。你可以像这样构建一个完整的游戏世界,然后简单地编写一个函数来解释它:
world = {...}
def play(state):
print world[state]['prompt']
if 'choices' in world[state]:
# print the users choices
return input('So which do you choose?')
return None
state = 'A'
while state is not None:
state = play(state)
这个例子非常原始 - 你需要错误检查和各种其他的花里胡哨 - 但它应该给你它的要点。
另外,在开始编码之前,可能有助于绘制状态机。我至少会画一小部分。您可以通过快速图像搜索来查看简单状态机的示例:https://www.google.com/search?q=state+machine&source=lnms&tbm=isch
编辑:感谢@steveha在我的代码中指出一个明显愚蠢的错误!
答案 1 :(得分:2)
正如@dave mankoff建议的那样,你应该使用“状态机”。这里有更多细节。
对于基本状态机,您需要一个“状态变量”,一个跟踪当前状态的变量。然后,当用户做出选择时,状态变量会更新以反映新状态。
您可以调用状态变量,但我建议将其称为state
。这是传统的,非常简单。
只要您可以将唯一值映射到所需的状态,就可以使用任何一组唯一值来跟踪状态。在大多数语言中,您将使用“枚举”,枚举常量,但Python历史上没有枚举。 (它们是从Python 3.4开始添加的,目前处于alpha版本中。)
一种简单的方法是使用字符串表示状态,并让字符串描述状态。因此,对于您的游戏,大多数状态将是玩家可以去的地方:"library"
,"kitchen"
,"potion_storage_room"
或其他。但是你也可能有没有严格映射到单个地方的州,例如:"wandering_around"
(喝了错误的药水后发呆?)。
你也可以使用这样的整数:
LIBRARY, KITCHEN, POTION_STORAGE_ROOM, WANDERING_AROUND = range(4)
现在LIBRARY
设置为整数0,KITCHEN
设置为整数1,依此类推。我认为字符串可能更容易,但是如果你搜索状态机的例子,你可能会看到上面的技巧被用于状态机的整数状态。
您可能想要学习本书/网站以艰难的方式学习Python 。练习43显示了简单的文本游戏。它使用带有字符串的状态机来表示状态。有一个简单游戏的示例代码,您可以运行代码并玩游戏,看看它是如何工作的。 (它看起来不是一个非常有趣的游戏,但我认为该书的作者希望鼓励你做一个更好的游戏!)
答案 2 :(得分:0)
您可以执行类似
的操作def start():
choice1 = input("Will you drink the potion?")
if choice1 == "A":
choice2 = input("You drink it, and when you do, you start to see strange visions. But, to your right, you see another bottle marked 'antidote'\nDrink it?")
if choice2 == "B":
print("You die")
elif choice2 == "A"
start()
start()
答案 3 :(得分:0)
您可以使用功能
if choice2 == 'A':
function()
If choice1 == 'B':
function()