0

ここには、「pickle」モジュールを使用する python 3 コードがあります。ゲームのハイスコアを保存することになっています。プログラムを再度開くと、代わりにデフォルトの「A : 100...」のハイスコアが表示されます。

def __init__(self):
    self.filename = "highscores.dat"
    self.numScores = 5

    if not os.path.isfile(self.filename):
        self.file = open(self.filename, "wb")
        self.scores = [100 for i in range(self.numScores)]
        self.names = ["A", "B", "C", "D", "E"]
        self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
        self.updateFile()
    else:
        file = open(self.filename, "rb")
        self.highscores = pickle.load(file)
        file.close()
        self.file = open(self.filename, "wb")

        self.names = [highscore[0] for highscore in self.highscores]
        self.scores = [highscore[1] for highscore in self.highscores]

 def addScore(self, name, score):
    self.scores.append(score) #Add new score 
    self.scores.sort(reverse = True) #Sort
    self.names.insert(self.scores.index(score), name)
    self.names = self.names[:self.numScores] # Top 5
    self.scores = self.scores[:self.numScores]
    self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
    self.updateFile()

def updateFile(self):
    pickle.dump(self.highscores, self.file)

これは、問題があると思われるコードの部分にすぎません。必要に応じてさらに投稿します。ご質問にお答えいたします。ありがとうございました。

4

1 に答える 1

1

毎回書き込みのためにファイルを再度開く必要があります。現在、スコアが変更されるたびに新しいレコードを順番にファイルに書き込んでいます。ファイルには複数のピクルスが含まれていますが、最初のピクルスのみが読み取られています。

コードを次のように変更します。

def __init__(self):
    self.filename = "highscores.dat"
    self.numScores = 5

    if not os.path.isfile(self.filename):
        self.scores = [100 for i in range(self.numScores)]
        self.names = ["A", "B", "C", "D", "E"]
        self.highscores = [(self.names[i], self.scores[i]) for i in range(self.numScores)]
    else:
        with open(self.filename, "rb") as f:
            self.highscores = pickle.load(f)
        self.names = [highscore[0] for highscore in self.highscores]
        self.scores = [highscore[1] for highscore in self.highscores]

def updateFile(self):
    with open(self.filename, 'wb') as f:
        pickle.dump(self.highscores, f)

addScore変わらず。

ハイスコ​​ア ファイルは、スコアが変更されるたびにゼロから書き込まれるようになりました。

于 2012-12-16T17:27:57.243 に答える