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

如何在C++(Visual Studio)环境下实现游戏进度保存功能

C++ 控制台游戏退出时保存进度实现方案

核心实现逻辑是把需要持久化的游戏数据写入本地文件,下次程序启动时再从文件读取恢复即可,不需要引入复杂第三方库,非常适合初学者实现。

1. 先定义要存储的游戏数据结构

首先把你要保存的玩家数据整理成结构体,方便统一读写:

#include <fstream>
#include <vector>
#include <string>

// 示例:道具结构体,可根据你的实际需求修改字段
struct Item {
    std::string name;
    int count;
    int buyPrice;
};

// 全局游戏存档数据实例
struct GameSave {
    int money;
    std::vector<Item> ownedItems;
} currentGameData;

2. 实现存档写入函数

程序退出前调用该函数即可把数据写入本地存档文件,新手推荐先使用文本格式存储,调试起来更直观:

void saveGameData() {
    // 打开存档文件,不存在会自动创建,存在则覆盖旧内容
    std::ofstream outFile("game_save.txt");
    if (!outFile.is_open()) {
        // 文件打开失败可加错误提示,不影响程序正常退出
        return;
    }
    // 第一行写入玩家金钱
    outFile << currentGameData.money << "\n";
    // 第二行写入道具总数,方便读取时确定遍历次数
    outFile << currentGameData.ownedItems.size() << "\n";
    // 逐行写入每个道具的属性
    for (const auto& item : currentGameData.ownedItems) {
        outFile << item.name << " " << item.count << " " << item.buyPrice << "\n";
    }
    outFile.close();
}

3. 绑定到程序退出时机

两种方案任选其一即可:

  • 你自己写的退出逻辑中(比如玩家输入退出指令、选择退出菜单时),先调用saveGameData()再执行退出逻辑
  • 怕遗漏调用的话,可以用标准库的atexit()注册自动存档,程序正常退出时会自动执行:
#include <cstdlib> // 包含atexit所需头文件

int main() {
    // 程序启动时就注册存档函数,正常退出时自动触发
    atexit(saveGameData);

    // 下方是你原有的游戏逻辑
    // ...
    return 0;
}

4. 可选:启动时读取存档实现

附赠读档函数,程序启动时调用即可恢复上次进度:

void loadGameData() {
    std::ifstream inFile("game_save.txt");
    // 没有存档文件就使用初始默认值即可
    if (!inFile.is_open()) {
        currentGameData.money = 100; // 初始金钱可自行修改
        return;
    }
    // 读取金钱
    inFile >> currentGameData.money;
    // 读取道具数量
    int itemCount;
    inFile >> itemCount;
    currentGameData.ownedItems.clear();
    // 循环读取所有道具
    for (int i = 0; i < itemCount; i++) {
        Item temp;
        inFile >> temp.name >> temp.count >> temp.buyPrice;
        currentGameData.ownedItems.push_back(temp);
    }
    inFile.close();
}

注意事项

  • 如果你的道具名称带空格,不要用上述文本存储方案,换成二进制写入或者用特殊符号分隔字段即可
  • 怕玩家随便修改存档的话,可以给存储的数值加个固定偏移量加密,读取的时候再减回去,实现简单的防篡改
  • 以上实现不需要引入任何第三方依赖,兼容所有C++标准编译环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:09:04