我在python 3.4中编写了一个文本游戏,当我想制作一个保存游戏时,问题出现了:
我怎样才能跳到玩家停止的地方?
我正在制作一个简单的游戏,我和我的朋友们,所以我只想跳到代码的某个部分,我不能这样做而不必制作大约15份代码,所以我也可以跳到一条线?
答案 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" }
然后使用函数显示一些选项,收集用户响应并解析该数据,返回单个值;下一个位置。然后,您有一个新密钥来引用数据文件中的下一个元素。
如果您的游戏就像这样简单,那么您的保存文件只需要包含一个参考,即玩家的位置!简单。
如果你有玩家可以操纵的物体,那么你需要找到一种方法来跟踪这些物体,它们的位置或状态值 - 这一切都取决于你的游戏做什么,以及它是如何玩的。
你应该考虑这些程序与数据线,因为它会使游戏更容易设计,后来扩展,因为所有你必须做的就是创建一个新的冒险或级别,提供一个新的数据文件。