请求开发骰子游戏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
相关产品推荐
相关产品推荐

