使用python获得高分/保存10个高分并排序

2024-09-27 01:19:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个关于python和tkinter的游戏,我想保存游戏的高分。我有一个条目wich接受玩家的名字并将其分配给一个全局(Name1)和一个全局(Score1),在其中分数被保存。

问题是,我需要一个文件,存储最好的10个高分,显然显示他们从最大的分数到最低。

我的问题是:我该怎么做?

如何将姓名和分数保存到文件中? 我怎样才能用命令来保存分数呢?(包括与分数相关的名字)

我对使用.readline()和.write()和.seek()等方法感到困惑。

编辑:

我需要这样的东西:

全局是Name1,Wich让我们说是“John”和Score1,Wich在游戏结束时将有一个int对象。

所以在几场比赛之后,约翰的得分达到了3000,然后是3500,然后是2000。

highscores文件应该如下所示:

约翰3500

约翰3000

约翰2000

如果迈克上场并取得3200分,那么文件应该是这样的:

约翰3500

迈克3200

约翰3000

约翰2000

得分最高的球员人数必须是10人。所以,如果已经有10个高分被保存,并且有一个更大的高分出来,那么最低的分数必须被忽略或删除。(我需要文件,因为我需要在Tkinter窗口上显示)

警察:原谅我奇怪的英语!谢谢您!


Tags: 文件命令游戏tkinter玩家条目全局名字
2条回答

user2109788的答案基本上就是您所需要的全部,并且pickleshelve是序列化数据的最佳方式,因为该文件不需要人类可读。

今天感觉很大方,下面的代码应该很容易适应您使用tkinter的具体情况。

为了在high score表中只保留10个值,我只需向列表中添加一个新的high score,对其进行排序,并通过对排序后的列表进行切片来保留前10个值。对于10个值应该没问题,但是如果你的列表很大的话,这将是一个糟糕的主意。

from operator import itemgetter
import pickle

# pickle
high_scores = [
    ('Liz', 1800),
    ('Desi', 5000),
    ('Mike', 3200),
    ('John', 2000),
    ('Gabi', 3150),
    ('John', 3500),
    ('Gabi', 3100),
    ('John', 3000),
    ('Liz', 2800),
    ('Desi', 2800),
]

high_scores.append(('Dave', 3300))
high_scores = sorted(high_scores, key=itemgetter(1), reverse=True)[:10]

with open('highscores.txt', 'w') as f:
    pickle.dump(high_scores, f)


# unpickle
high_scores = []

with open('highscores.txt', 'r') as f:
    high_scores = pickle.load(f)

脚本中可以有一个元组列表,用于存储高分和sort高分,然后再将其显示给用户。可以使用shelvepickle存储python变量(存储高分)

元组列表如下: [(姓名1,分数1),(姓名2,分数2),…(姓名10,分数10)]

相关问题 更多 >

    热门问题