编写文字冒险游戏

时间:2019-08-09 20:05:24

标签: python

我正在自学Python,为了进行实践,我决定尝试编写一款文字冒险游戏。

这是我到目前为止所拥有的:

print("Darkness surrounds you.  You are likely to be eaten by a grue.")
move = input("Above you, you see some light breaking through the rock ceiling. ")

if move == "up":
    print("You climb out of the cave.  You are in a dense forest.")
    print("Below you is the hole in the ground you climbed out of.")
    print("To the north you see a footpath.")
    print("To the south and west there is a dense growth of trees and blackberry bushes.")
    move = input("To the east there is a wooden cabin. ")
else if move == "l"
    print("Darkness surrounds you.  You are likely to be eaten by a grue.")
else if move == "look"
    print("Darkness surrounds you.  You are likely to be eaten by a grue.")
else if move == "i":
    print("You are empty-handed.")
else if move == "inventory":
    print("You are empty-handed.")
elif move == "quit":
    print("Bah humbug! Quitters never win, and winners never quit.")
else:
    print("You have been eaten by a grue.")

if move == "pick blackberries"
    print("They are quite tasty.")
if move == "eat blackberries"
    print("They are quite tasty.")
if move == "take blackberries"
    print("You take a handful of blackberries")
if move == "take blackberry branch"
    print("You scrape yourself badly on the blackberry brambles.")

以此类推。

我有几个问题:

1)我该如何编码“ if move == this or that”的等价形式?如“移动== s或向南”。我用Google搜索“或python”,但结果只是讨论布尔值。

2)如何创建“库存”?我应该以某种方式使用列表吗?我对如何做有一些了解,但我还没有想到。

3)如何做到这一点,以便玩家离开该位置时可以回到该位置,而无需再次在代码中重新输入描述?

4)如何做到这一点,以便在游戏的每个位置中,“ else”都是“我不明白你在说什么”,而无需在每次“ input”语句之后将其键入代码中

5)总的来说,我如何使它重复出现,所以我不必为游戏中的每个位置编写代码?

6)我应该为此使用模块吗?如果是这样,我该如何找到正确的模块?

我计划添加一些其他内容,例如.lower以使其不区分大小写。

我看过一些用Python制作文字冒险游戏的教程,但它们只是用于制作简单的短篇游戏,或者是用C#编写的。

谢谢!

3 个答案:

答案 0 :(得分:1)

哇,这是很多问题。通常,我会将此帖子标记为过于宽泛,但是我会在这里尝试回答其中的一些内容。

  1.   

    如何编码“ if move == this or that”的等效代码?如“移动== s或向南”。我用Google搜索“或python”,但结果只是讨论布尔值。

嗯,有几种方法可以做到这一点。一种方法是在python中使用in运算符并使用可接受值的列表。看起来像

movesNorth = ["north","North","N","n"]
movesSouth=["south","South","S","s"]
movesEast=["east","East","E","e"]
movesWest=["west","West","W","w"]
if(move in movesNorth):
    ...
elif(move in movesSouth):
    ...

另一种方法是对每个输入使用or关键字。在python和大多数语言中,这是不同的,因为其他语言通常使用按位orand运算符(|||以及&&和{{1 }} 分别)。您可能会注意到,有两种方法可以执行其他语言的“或”和“与”检查,并且它们的功能略有不同。对于初学者来说,这是一个有趣的话题,我会推荐它! 看起来像这样:

&
  1.   

    如何创建“库存”?我应该以某种方式使用列表吗?我对如何做有一些了解,但我还没有想到。

这个问题有点广泛,更多的是个人喜好。我个人将创建一个播放器和库存对象/类。播放器对象会将清单作为属性,清单类可能使用某种列表或地图来存储其包含的信息。我想说,您最好尝试实现一些问题,然后在遇到困难时发布新问题,才能最好地回答这个问题。

  1.   

    我如何做到这一点,以便玩家离开该位置时可以回到该位置,而无需再次在代码中重新输入说明?

也许可以在列表中跟踪玩家访问的位置,然后,如果当前位置已存在于此访问项列表中,则您无需显示文本。这将需要2d数组(列表列表)来跟踪整个网格上的x和y坐标。 if(moves == "North" or moves == "n" or moves == "North" or moves == "N"): ... 然后您将使用索引Moves=[[]]访问(0,1)处的平方。这将获得第0行,然后访问第1列内的元素。

  1.   

    我如何做到这一点,以便在游戏的每个位置中,“ else”都是“我不明白你在说什么”,而无需在每次“ input” if语句之后将其键入代码中。 / p>

我将定义一个使玩家移动的函数,该函数在移动玩家之前处理输入验证。再次使用带有列表功能的moves[0][1].关键字,但我会将所有可接受的输入添加到一个列表中。

in
  1.   

    通常,我如何使它重复出现,所以我不必为游戏中的每个位置编写代码?

这就是发明功能的确切原因!要记住的一个好主意是,如果您要在整个程序中重复复制和粘贴相同的代码,则应将其变成一个函数。这就是def getInput(): acceptedInputs = ["n","s","e","w","inv","etc..."] userInput = "NULL" while(userInput not in acceptedInputs): userInput = input("Whatever text you want displayed asking for input: ") return userInput 关键字的作用,您绝对应该研究和尝试使用函数,因为它们将来对您非常有用。也许从定义一个接受两个int参数并将它们加在一起的函数开始。

  1.   

    我应该为此使用模块吗?如果是这样,我该如何找到正确的模块?

这都取决于您要完成的工作。您可以为此使用模块,但是由于您仍在学习中,不这样做可能更容易理解正在发生的事情。当您转入C或C ++之类的语言(在那里您有头文件然后是类文件)时,此模块将很容易理解。我认为一方面是6点,另一方面是6点。我绝对建议您使用函数,而不是将其分成模块。

欢迎

另外,欢迎您使用Stack Overflow!尽量不要在以后一次发布大量问题,但一次只能将自己限制为一个(或两个)问题。通常,此站点对于诸如“我有此代码,我以为它会X,但它在做y。如何使它在X或为什么在做Y?”这样的事情更有用。问题。

如果此帖子满足您的问题,那么一定不要忘记单击“否决”选项下的该对勾!如果您对我写的内容有任何歧义,请随时发表评论。我正好在周一至周五的美国东部标准时间下午5:00,但是在这些时间之外,您可能必须等待响应。

答案 1 :(得分:0)

您需要研究数据结构。即使是简单的文字冒险游戏也需要高度组织化的数据。

项目清单可以保存在列表中,该列表是大多数高级计算机语言中的基本数据结构。 Python有列表。

保存地图的数据结构更加复杂。地图上的每个位置至少需要一张其邻居的列表,以及每个邻居要走的路线。当您具有匹配的对象对(例如方向列表和邻居列表)时,“映射”数据结构通常是组织该信息的便捷方法。在Python中,映射数据结构称为字典。

您可以使用索引值在列表和词典中查找项目。对于列表,索引值为整数,从零开始。对于字典,索引值也称为“键”,它们不必是从零开始的整数。您可以将字符串用作字典键。

因此,假设您正走在25号位置的悬崖边上。如果向北移动,则会到达30号位置。如果向南移动,则会到达22号位置。不能向东或向西移动(嗯,您可以,但是在那些方向之一上,您会从悬崖上掉下来,关于您是否要允许自己的游戏中的自杀行为,我将交给您。因此,您在Python中位置25的运动字典可以如下所示:{“北”:30,“南”:22}。如果用户尝试向东或向西移动,则没有定义的结果,因此您的代码将不得不处理这种情况。您可能有更多的方向选项,例如“上”或“下”。不可能不可能从每个位置向各个方向移动,并且字典可以很好地处理可变性。

语言处理是另一个有趣且复杂的领域。祝你好运!

答案 2 :(得分:0)

  1. 您可以使用:

    if move in ['i', 'inventory']
    
  2. 如果您的清单是一个简单的单词列表,则维护一个常规列表会更简单。

  3. 您可以使用函数尝试而不重复代码。

  4. 由于您是初学者,因此建议您每次添加else语句。但是,您可以使用装饰器(稍微高级的概念),在其中可以检查“如果移动不在可接受的移动范围内:print(“ error”)“。

  5. 为此,您需要了解图形的工作方式,或者对于较小的游戏,您可以尝试使用字典。键将是位置,值将再次是字典。例如:

    {"cave": {"up":"dense_forest"}, 
     "dense_forest": {"north": "footpath"}}
    

    这样,您可以将位置传递给函数并相应地打印语句。内部字典的值(例如,行人路)将是主字典的键。

  6. 到目前为止,您无需使用任何外部模块。尝试尝试您所知道的!

相关问题