首页 > 解决方案 > 编写文字冒险游戏

问题描述

我正在自学 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”的代码?如,“move == s or south”。我用谷歌搜索了“或 python”,但结果只是谈到了布尔值。

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

3)我如何做到这一点,如果玩家离开该位置,他们可以回到它,而无需在代码中重新输入描述?

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

5) 一般来说,我如何让它重复一些事情,这样我就不必为游戏中的每个位置写代码了?

6)我应该为此使用模块吗?如果是这样,我该如何寻找合适的模块?

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

我看了一些用 Python 制作文本冒险游戏的教程,但它们是用于制作简单的短游戏,或者它们是用 C# 或其他东西编写的。

谢谢!!!

标签: python

解决方案


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

  1. 我如何编写相当于“if move == this OR that”的代码?如,“move == s or south”。我用谷歌搜索了“或 python”,但结果只是谈到了布尔值。

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

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运算符(分别为||and|&&and &)。您可能会注意到在其他语言中有两种方法可以执行 OR 和 AND 检查,它们的功能略有不同。对于初学者来说,这是一个有趣的话题,我会推荐它!这看起来像这样:

if(moves == "North" or moves == "n" or moves == "North" or moves == "N"):
    ...
  1. 如何创建“库存”?我应该以某种方式使用列表吗?我对如何做到这一点有所了解,但我还没有想到。

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

  1. 我如何做到这一点,如果玩家离开该位置,他们可以回到该位置,而无需在代码中重新输入描述?

也许跟踪玩家在列表中访问的位置,然后如果当前位置已经存在于此访问项目列表中,则您知道不需要显示文本。这将需要一个二维数组(列表列表)来跟踪网格中的 x 和 y 坐标。Moves=[[]]然后,您将使用索引访问 (0,1) 处的正方形,moves[0][1].获取第 0 行,然后访问第 1 列内的元素。

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

我将定义一个用于获取玩家移动的函数,该函数在移动玩家之前处理输入验证。我将再次使用in具有列表功能的关键字,但我会将所有可接受的输入添加到一个列表中。

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
  1. 一般来说,我如何让它重复一些事情,这样我就不必为游戏中的每个位置编写代码了?

这就是发明函数的确切原因!要记住的一个好主意是,如果您在整个程序中反复复制和粘贴相同的代码,则应该将其转换为函数。这就是def关键字的作用,您绝对应该研究和使用函数,因为它们将来对您非常有用。也许从定义一个接受两个 int 参数并将它们相加的函数开始。

  1. 我应该为此使用模块吗?如果是这样,我该如何寻找合适的模块?

这完全取决于您要完成的工作。您可以为此使用模块,但由于您仍在学习,因此不这样做可能会更容易理解正在发生的事情。当你转向像 C 或 C++ 之类的语言(你有一个头文件,然后是一个类文件)时,这个模块将很容易理解。在我看来,一只手有 6 个,另一只手有 6 个。我肯定会推荐使用函数而不是将其分成模块。

欢迎

另外,欢迎来到 Stack Overflow!以后尽量不要一次发布一系列问题,而是一次将自己限制在一个(或两个)问题上。通常,此站点对于诸如“我有此代码,我认为它会执行 X,但它正在执行 y。我如何使它执行 X 或为什么执行 y?”之类的事情更有用。问题。

如果这篇文章满足您的问题,那么一定不要忘记点击否决选项下的复选标记!如果您对我写的内容有任何歧义,请随时发表评论。我在周一至周五到美国东部标准时间下午 5:00,但在这些时间之外,您可能必须等待回复。


推荐阅读