如何保存棋盘游戏?蟒蛇

时间:2016-07-20 06:25:40

标签: python python-3.x save pygame

我已经使用python编写了Connect 4,我想创建一个Save选项,虽然我不确定如何保存所有用户输入。主要是所有已放置在电路板上的计数器。该板是一个多维数组:

board = []
for row in range(6):
    board.append([])
    for column in range(7):
        board[row].append(0) 

有人会知道我如何存储这些数据吗?我正在考虑将它写入文件,打开保存时它可以读取它,虽然我不确定如何将文本重新解释为电路板位置。

2 个答案:

答案 0 :(得分:4)

如果你只关心用Python阅读这个文件,那么readline module它!

import pickle

fp = '/path/to/saved/file.pkl'
with open(fp, 'wb') as f:
    pickle.dump(board, f)

答案 1 :(得分:1)

如果你的游戏状态保存在一个简单的对象中,比如整数列表列表,如下所示:

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给出的答案基本相同,用json取代了pickle。 pickle的优点是你可以存储几乎所有(不太奇怪)的Python对象,而json的优点是这种格式也可以被其他程序读取。此外,如果保存的游戏文件可以来自任意位置,那么从pickle反对中加载游戏状态会让您面临在pickle中恶意构造代码的风险。

如果您还想保存用户到达目录的历史记录,您必须实现一些其他数据结构来保存该历史记录,但您可以以类似的方式保存该其他数据对象。