编辑代码

#include <iostream>
#include <fstream>
#include <string>
#include <map>
using namespace std;

// 存储玩家的进度和成就
struct PlayerData {
    int currentChapter = 1; // 当前章节
    map<int, bool> achievements; // 成就系统
};

// 显示故事内容
void displayStory(int chapter) {
    if (chapter == 1) {
        cout << "你收到了一封神秘的邀请函,邀请你参加一个秘密聚会。\n";
        cout << "1. 接受邀请\n";
        cout << "2. 拒绝邀请\n";
    } else if (chapter == 2) {
        cout << "你来到了聚会地点,这里充满了奇怪的人和神秘的仪式。\n";
        cout << "1. 参与仪式\n";
        cout << "2. 悄悄观察\n";
    } else if (chapter == 3) {
        cout << "你决定参与仪式,但突然感到一阵眩晕。\n";
        cout << "结局:你被仪式的力量吞噬,成为了邪恶的魔法师。\n";
    } else if (chapter == 4) {
        cout << "你悄悄观察仪式,发现了背后的阴谋。\n";
        cout << "结局:你成功阻止了仪式,但被神秘组织追杀,成为了一个逃亡者。\n";
    } else if (chapter == 5) {
        cout << "你拒绝了邀请,回到宿舍,但晚上开始做奇怪的梦。\n";
        cout << "1. 探索梦境\n";
        cout << "2. 忽略梦境\n";
    } else if (chapter == 6) {
        cout << "你在梦境中发现了一个隐藏的线索,指向一个古老的秘密。\n";
        cout << "结局:你解开了秘密,发现邀请函背后隐藏的是一个古老的家族诅咒。\n";
    } else if (chapter == 7) {
        cout << "你决定探索地下室。\n";
        cout << "1. 打开宝箱\n";
        cout << "2. 忽略宝箱\n";
    } else if (chapter == 8) {
        cout << "你打开了宝箱,发现里面装满了金币和宝石。\n";
        cout << "结局:你成为了一名富翁,但地下室突然塌陷,将你困在了里面。\n";
    } else if (chapter == 9) {
        cout << "你忽略了宝箱,继续探索地下室。\n";
        cout << "结局:你发现了一个隐藏的通道,通往一个神秘的实验室。\n";
    } else if (chapter == 10) {
        cout << "你决定忽略地下室,继续日常生活。\n";
        cout << "结局:你的生活逐渐恢复正常,但偶尔还会听到地下室传来的奇怪声音。\n";
    } else if (chapter == 11) {
        cout << "你决定与神秘邻居交谈,了解他的故事。\n";
        cout << "1. 帮助老人\n";
        cout << "2. 忽略老人\n";
    } else if (chapter == 12) {
        cout << "你决定帮助老人寻找宝藏。\n";
        cout << "结局:你和老人找到了宝藏,两人平分,成为了富翁。\n";
    } else if (chapter == 13) {
        cout << "你决定忽略老人,继续日常生活。\n";
        cout << "结局:你的生活逐渐恢复正常,但偶尔还会听到老人的叹息声。\n";
    } else {
        cout << "未知章节。\n";
    }
}

// 显示成就
void displayAchievements(const map<int, bool>& achievements) {
    cout << "成就列表:\n";
    for (const auto& achievement : achievements) {
        if (achievement.second) {
            cout << "成就 " << achievement.first << ":已完成\n";
        } else {
            cout << "成就 " << achievement.first << ":未完成\n";
        }
    }
}

// 保存游戏进度
void saveGame(const PlayerData& playerData, const string& filename) {
    ofstream outFile(filename);
    if (outFile.is_open()) {
        outFile << playerData.currentChapter << "\n";
        for (const auto& achievement : playerData.achievements) {
            outFile << achievement.first << " " << achievement.second << "\n";
        }
        outFile.close();
        cout << "游戏进度已保存。\n";
    } else {
        cout << "无法保存游戏进度。\n";
    }
}

// 加载游戏进度
bool loadGame(PlayerData& playerData, const string& filename) {
    ifstream inFile(filename);
    if (inFile.is_open()) {
        inFile >> playerData.currentChapter;
        int id;
        bool completed;
        while (inFile >> id >> completed) {
            playerData.achievements[id] = completed;
        }
        inFile.close();
        cout << "游戏进度已加载。\n";
        return true;
    } else {
        cout << "无法加载游戏进度。\n";
        return false;
    }
}

// 游戏主逻辑
void playGame(PlayerData& playerData) {
    int choice;
    while (true) {
        displayStory(playerData.currentChapter);
        cin >> choice;

        if (playerData.currentChapter == 1) {
            if (choice == 1) {
                playerData.currentChapter = 2;
            } else if (choice == 2) {
                playerData.currentChapter = 5;
            } else {
                cout << "无效选择。\n";
                continue;
            }
        } else if (playerData.currentChapter == 2) {
            if (choice == 1) {
                playerData.currentChapter = 3;
            } else if (choice == 2) {
                playerData.currentChapter = 4;
            } else {
                cout << "无效选择。\n";
                continue;
            }
        } else if (playerData.currentChapter == 5) {
            if (choice == 1) {
                playerData.currentChapter = 6;
            } else if (choice == 2) {
                playerData.currentChapter = 10;
            } else {
                cout << "无效选择。\n";
                continue;
            }
        } else if (playerData.currentChapter == 7) {
            if (choice == 1) {
                playerData.currentChapter = 8;
            } else if (choice == 2) {
                playerData.currentChapter = 9;
            } else {
                cout << "无效选择。\n";
                continue;
            }
        } else if (playerData.currentChapter == 11) {
            if (choice == 1) {
                playerData.currentChapter = 12;
            } else if (choice == 2) {
                playerData.currentChapter = 13;
            } else {
                cout << "无效选择。\n";
                continue;
            }
        } else {
            break; // 结束游戏
        }

        // 更新成就
        if (playerData.currentChapter == 3) {
            playerData.achievements[1] = true; // 成就1:成为邪恶的魔法师
        } else if (playerData.currentChapter == 4) {
            playerData.achievements[2] = true; // 成就2:成为逃亡者
        } else if (playerData.currentChapter == 6) {
            playerData.achievements[3] = true; // 成就3:解开家族诅咒
        } else if (playerData.currentChapter == 8) {
            playerData.achievements[4] = true; // 成就4:成为富翁
        } else if (playerData.currentChapter == 9) {
            playerData.achievements[5] = true; // 成就5:发现隐藏通道
        } else if (playerData.currentChapter == 12) {
            playerData.achievements[6] = true; // 成就6:与老人平分宝藏
        } else if (playerData.currentChapter == 13) {
            playerData.achievements[7] = true; // 成就7:听到老人的叹息声
        }
    }

    displayAchievements(playerData.achievements);
}

int main() {
    PlayerData playerData;
    string filename = "savegame.txt";

    // 加载游戏进度
    if (!loadGame(playerData, filename)) {
        // 初始化成就
        playerData.achievements[1] = false;
        playerData.achievements[2] = false;
        playerData.achievements[3] = false;
        playerData.achievements[4] = false;
        playerData.achievements[5] = false;
        playerData.achievements[6] = false;
        playerData.achievements[7] = false;
    }

    playGame(playerData);

    // 保存游戏进度
    saveGame(playerData, filename);

    return 0;
}