You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求开发骰子游戏Top5分数保存系统:替换旧分数留存前五

实现Top5高分保存系统的解决方案

核心思路

要满足需求,我们需要读取文件中的历史分数、合并本次新生成的两个分数、筛选出Top5后重新写入文件(覆盖原有内容),而非简单追加。这样既替换了旧的分数记录,又能始终保留最高的5条成绩。

完整代码实现

def update_top_scores(user, p1score, userr, p2score):
    scores_file = r'h:\scores.txt'
    all_scores = []
    
    # 读取现有分数,处理文件不存在的情况
    try:
        with open(scores_file, 'r') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                username, score_str = line.split(',', 1)
                try:
                    score = int(score_str)
                    all_scores.append((-score, username, score))  # 用负分实现升序排序等价于正分降序
                except ValueError:
                    # 跳过格式错误的无效行
                    continue
    except FileNotFoundError:
        pass  # 文件不存在则初始化为空列表
    
    # 添加本次游戏的两个新分数
    all_scores.append((-p1score, user, p1score))
    all_scores.append((-p2score, userr, p2score))
    
    # 排序并取Top5,分数相同则保留录入顺序
    all_scores.sort()
    top5 = [item[1:] for item in all_scores[:5]]  # 去掉负分,保留(用户名, 分数)
    
    # 写入Top5到文件,覆盖原有内容
    with open(scores_file, 'w') as f:
        for username, score in top5:
            f.write(f"{username},{score}\n")

# 调用示例,替换成你的实际变量
# update_top_scores(user="Player1", p1score=85, userr="Player2", p2score=92)

代码说明

  • 读取历史分数:用try-except处理文件不存在的场景,同时跳过格式错误的行,避免程序崩溃。
  • 排序技巧:存入负分数后按升序排列,等价于原分数的降序排序,确保高分排在前面。
  • 覆盖写入:使用'w'模式打开文件,会清空原有内容并写入新的Top5数据,正好满足“删除之前保存的分数并写入新内容”的需求。
  • 容错处理:对字符串拆分、分数类型转换做异常捕获,避免因文件内容异常导致报错。

效果验证

每次运行游戏后调用该函数,scores.txt中只会保留分数最高的前5条记录,包含本次游戏的两个新成绩,旧的低分会被自动淘汰。

内容的提问来源于stack exchange,提问作者sbr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 18:40:37