Goto \ Jump in Python

时间:2016-12-07 18:46:21

标签: python goto

我在python 3.4中编写了一个文本游戏,当我想制作一个保存游戏时,问题出现了:

我怎样才能跳到玩家停止的地方?

我正在制作一个简单的游戏,我和我的朋友们,所以我只想跳到代码的某个部分,我不能这样做而不必制作大约15份代码,所以我也可以跳到一条线?

3 个答案:

答案 0 :(得分:0)

你可以使用类似python-goto之类的东西来做到这一点,但这是一个非常糟糕的主意。

在python中,你没有任何理由去做goto。

更好的方法是使用类似pickle的内容保存包含数据的结构,并在用户想要重新启动游戏时将其加载回来。

例如:

import pickle

game_data = {'something': [1, 2, 3 ]}

pickle.dump(game_data, open('file.bin', 'wb')

然后,您可以加载数据:

import pickle

game_data = pickle.load(open('file.bin', 'rb'))

答案 1 :(得分:0)

Python中没有内置Dispose()。有办法有效地停止'在一个使用yield和创建生成器的方法中,这实际上是Python协同程序的工作方式(参见goto模块),但这并不适合您的需要。

为了保存游戏状态,保存和序列化状态,您需要以更一般的方式恢复游戏,这是一个更好的主意。您可以使用asyncio进行此序列化。

答案 2 :(得分:0)

您需要将游戏状态视为可以为其指定值(或值)的内容。如果这是一个非常简单的文本游戏,那么玩家将拥有一个位置,并且该位置可能是您可以通过使用引用“跳转”到的位置。

假设您的代码遵循此伪代码模式:

 start
     player_location = 0
     print_start_game_text()
     begin loop:
         display_text_for_location[player_location]
         display_options_for_location[player_location]
         player_location = parse_player_response(response_options_for_location[player_location])
         if isGameEndCondition(player_location):
             break;
     print_end_game_text()
 end

此模式将引用一些数据文件,为每个位置提供一些集合,例如1, "you are in a room, doors are [E]ast and [W]est. You can [S]ave your game, or [L]oad a previously saved one", { "E" : 3, "W" : 2, "S" : "savegame", "L" : "loadgame" }

然后使用函数显示一些选项,收集用户响应并解析该数据,返回单个值;下一个位置。然后,您有一个新密钥来引用数据文件中的下一个元素。

如果您的游戏就像这样简单,那么您的保存文件只需要包含一个参考,即玩家的位置!简单。

如果你有玩家可以操纵的物体,那么你需要找到一种方法来跟踪这些物体,它们的位置或状态值 - 这一切都取决于你的游戏做什么,以及它是如何玩的。

你应该考虑这些程序与数据线,因为它会使游戏更容易设计,后来扩展,因为所有你必须做的就是创建一个新的冒险或级别,提供一个新的数据文件。