如何保存棋盘游戏? 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的主要内容,如果未能解决你的问题,请参考以下文章

Python - 向用户显示游戏保存文件的推荐方式

如何保存属性也是对象并且在多个级别上的python对象?

如何在pygame中保存/加载游戏功能?

保存多个精灵的游戏进度

关于QT信号和槽机制的重复绑定错误及改正

Python 或 Pygame 可以创建单独的文件以保存游戏进度吗?