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

Python保存游戏进度数据:非MySQL方案解决重启数据丢失问题咨询

嘿,完全理解你不想碰复杂数据库的心态!毕竟只是存几个游戏进度变量,犯不着折腾MySQL。下面给你几个轻量又好实现的文件存储方案,随便挑一个都能解决你的问题:

方案1:用JSON文件(最推荐,结构清晰)

JSON是一种结构化的格式,能直观地把变量和对应值存起来,后续扩展新变量也很方便。

实现代码

先写两个核心函数:保存进度和加载进度

import json

def save_game_progress(s1, s2, s3):
    # 把进度打包成字典,键名可以自定义,更易读
    progress_data = {
        "chapter_1_progress": s1,
        "chapter_2_progress": s2,
        "chapter_3_progress": s3
    }
    # 写入JSON文件,indent参数让文件内容更美观
    with open("game_progress.json", "w", encoding="utf-8") as f:
        json.dump(progress_data, f, indent=4)

def load_game_progress():
    try:
        # 读取JSON文件
        with open("game_progress.json", "r", encoding="utf-8") as f:
            progress_data = json.load(f)
        # 取出对应值,没有的话返回默认0
        return (
            progress_data.get("chapter_1_progress", 0),
            progress_data.get("chapter_2_progress", 0),
            progress_data.get("chapter_3_progress", 0)
        )
    except FileNotFoundError:
        # 第一次运行没有进度文件,返回初始值
        return 0, 0, 0

怎么用

  • 游戏启动时:先调用加载函数获取进度,赋值给你的变量
    s1, s2, s3 = load_game_progress()
    
  • 章节推进时:比如玩家完成第一章,修改s1后立刻保存
    s1 = 1  # 假设完成第一章后s1设为1
    save_game_progress(s1, s2, s3)
    
方案2:用纯文本文件(最简单,零依赖)

如果觉得JSON还是有点“重”,直接用纯文本存变量值也完全ok,用换行或者分隔符区分不同变量就行。

实现代码

def save_progress_txt(s1, s2, s3):
    # 每个变量占一行,写入文本文件
    with open("game_progress.txt", "w", encoding="utf-8") as f:
        f.write(f"{s1}\n{s2}\n{s3}")

def load_progress_txt():
    try:
        with open("game_progress.txt", "r", encoding="utf-8") as f:
            lines = f.readlines()
            # 读取每一行,处理空文件或不完整的情况
            s1 = int(lines[0].strip()) if len(lines) >= 1 else 0
            s2 = int(lines[1].strip()) if len(lines) >= 2 else 0
            s3 = int(lines[2].strip()) if len(lines) >= 3 else 0
            return s1, s2, s3
    except FileNotFoundError:
        return 0, 0, 0

使用方式和JSON方案完全一样,启动加载,章节更新后保存就行。

方案3:用CSV文件(适合后续扩展多组数据)

如果以后你想加更多进度变量,或者存多个玩家的进度,CSV会比纯文本更规整,Python自带的csv模块就能处理。

实现代码

import csv

def save_progress_csv(s1, s2, s3):
    with open("game_progress.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        # 先写表头,方便后续维护
        writer.writerow(["s1", "s2", "s3"])
        # 再写变量值
        writer.writerow([s1, s2, s3])

def load_progress_csv():
    try:
        with open("game_progress.csv", "r", encoding="utf-8") as f:
            reader = csv.DictReader(f)
            # 读取第一行数据
            progress_row = next(reader)
            return (
                int(progress_row["s1"]),
                int(progress_row["s2"]),
                int(progress_row["s3"])
            )
    except (FileNotFoundError, StopIteration):
        # 文件不存在或为空时返回初始值
        return 0, 0, 0

小提醒

不管用哪种方案,记得在玩家完成章节、主动保存、或者退出游戏前调用保存函数,这样进度就不会丢失啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:23