如何保存棋盘游戏? Python
Posted
技术标签:
【中文标题】如何保存棋盘游戏? Python【英文标题】:How to save board game? Python 【发布时间】:2016-07-20 06:25:40 【问题描述】:我已经使用 python 对 Connect 4 进行了编程,并且我想创建一个保存选项,尽管我不确定如何保存所有用户输入。这将主要是放置在板上的所有计数器。棋盘是一个多维数组:
board = []
for row in range(6):
board.append([])
for column in range(7):
board[row].append(0)
有人知道我将如何存储这些数据吗?我正在考虑将其写入文件,并在打开保存时可以读取它,尽管我不确定如何将文本重新解释为板位置。
【问题讨论】:
【参考方案1】:如果你只关心用 Python 读取这个文件,那么pickle吧!
import pickle
fp = '/path/to/saved/file.pkl'
with open(fp, 'wb') as f:
pickle.dump(board, f)
【讨论】:
是所有必要的编码吗?它究竟是做什么的?在游戏过程中保存所有输入,并在打开时导入旧用户输入? 这只是序列化列表board
并将其保存到文件中。您可以在答案中的链接或here 中阅读有关dump
方法的信息。【参考方案2】:
如果您的游戏状态保存在一个简单的对象中,例如整数列表,如下所示:
WIDTH = 7
HEIGHT = 6
board = [[0 for column in range(WIDTH)] for row in range(HEIGHT)]
那么你也可以使用 JSON 代替 pickle 将这个对象存储在一个文件中,像这样:
import json
fp = "/path/to/saved/file.txt"
with open(fp, "w") as savefile:
json.dump(board, savefile)
请注意,这与 Alex 给出的答案基本相同,只是将 pickle 替换为 json。 pickle 的优点是可以存储几乎所有(不太奇怪)的 Python 对象,而 json 的优点是这种格式也可以被其他程序读取。此外,如果保存的游戏文件可能来自任意位置,则从 pickle 对象加载游戏状态会使您面临在 pickle 中恶意构建代码的风险。
如果您还想保存用户如何到达那里的历史记录,则必须实现一些其他数据结构来保存该历史记录,但您可以以类似的方式保存该其他数据对象。
【讨论】:
以上是关于如何保存棋盘游戏? Python的主要内容,如果未能解决你的问题,请参考以下文章