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”的代码?如,“move == s or south”。我用谷歌搜索了“或 python”,但结果只是谈到了布尔值。
2)我如何创建“库存”?我应该以某种方式使用列表吗?我对如何做到这一点有所了解,但我还没有想到。
3)我如何做到这一点,如果玩家离开该位置,他们可以回到它,而无需在代码中重新输入描述?
4)我如何做到这一点,以便在游戏中的每个位置,“else”都是“我不明白你在说什么”,而无需在每个“input” if then 语句之后将其输入代码中。
5) 一般来说,我如何让它重复一些事情,这样我就不必为游戏中的每个位置写代码了?
6)我应该为此使用模块吗?如果是这样,我该如何寻找合适的模块?
我计划添加一些其他内容,例如 .lower 以使其不区分大小写。
我看了一些用 Python 制作文本冒险游戏的教程,但它们是用于制作简单的短游戏,或者它们是用 C# 或其他东西编写的。
谢谢!!!
解决方案
哇,这是很多问题。通常我会将这篇文章标记为过于宽泛,但我会尝试在这里回答其中的一些问题。
我如何编写相当于“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 中与大多数语言不同,因为其他语言通常使用按位or
和and
运算符(分别为||
and|
和&&
and &
)。您可能会注意到在其他语言中有两种方法可以执行 OR 和 AND 检查,它们的功能略有不同。对于初学者来说,这是一个有趣的话题,我会推荐它!这看起来像这样:
if(moves == "North" or moves == "n" or moves == "North" or moves == "N"):
...
如何创建“库存”?我应该以某种方式使用列表吗?我对如何做到这一点有所了解,但我还没有想到。
这个问题有点宽泛,更多的是个人喜好。我个人会创建一个播放器和库存对象/类。播放器对象将有一个库存作为属性,并且库存类可能会使用某种列表或地图来存储它所包含的信息。我想说这个问题最好由您尝试实现某些东西来回答,然后在遇到困难时发布一个新问题。
我如何做到这一点,如果玩家离开该位置,他们可以回到该位置,而无需在代码中重新输入描述?
也许跟踪玩家在列表中访问的位置,然后如果当前位置已经存在于此访问项目列表中,则您知道不需要显示文本。这将需要一个二维数组(列表列表)来跟踪网格中的 x 和 y 坐标。Moves=[[]]
然后,您将使用索引访问 (0,1) 处的正方形,moves[0][1].
获取第 0 行,然后访问第 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
一般来说,我如何让它重复一些事情,这样我就不必为游戏中的每个位置编写代码了?
这就是发明函数的确切原因!要记住的一个好主意是,如果您在整个程序中反复复制和粘贴相同的代码,则应该将其转换为函数。这就是def
关键字的作用,您绝对应该研究和使用函数,因为它们将来对您非常有用。也许从定义一个接受两个 int 参数并将它们相加的函数开始。
我应该为此使用模块吗?如果是这样,我该如何寻找合适的模块?
这完全取决于您要完成的工作。您可以为此使用模块,但由于您仍在学习,因此不这样做可能会更容易理解正在发生的事情。当你转向像 C 或 C++ 之类的语言(你有一个头文件,然后是一个类文件)时,这个模块将很容易理解。在我看来,一只手有 6 个,另一只手有 6 个。我肯定会推荐使用函数而不是将其分成模块。
欢迎
另外,欢迎来到 Stack Overflow!以后尽量不要一次发布一系列问题,而是一次将自己限制在一个(或两个)问题上。通常,此站点对于诸如“我有此代码,我认为它会执行 X,但它正在执行 y。我如何使它执行 X 或为什么执行 y?”之类的事情更有用。问题。
如果这篇文章满足您的问题,那么一定不要忘记点击否决选项下的复选标记!如果您对我写的内容有任何歧义,请随时发表评论。我在周一至周五到美国东部标准时间下午 5:00,但在这些时间之外,您可能必须等待回复。
推荐阅读
- bash - while 循环在附加文件 bash 中中断到早期
- python - 将对象设置为 None 不会更新所有引用
- tensorflow - TensorFlow 概率采样需要很长时间
- python - 未正确旋转图像
- ruby-on-rails - 如何处理 URL 中以“x”模式开头的 Rails 重定向
- ios - UITableviewcell 内的 UITextField。可编辑但键盘未显示
- java - 得到错误方法排序(列表
) 类型中的 Collections 不适用于参数 (List ) - python-3.x - 无论事件如何,如何使用 discord.py?
- python - 如何阻止特定代码运行?在 pygame 中
- assembly - 将英特尔代码与反汇编输出相匹配