#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;
} else if (playerData.currentChapter == 4) {
playerData.achievements[2] = true;
} else if (playerData.currentChapter == 6) {
playerData.achievements[3] = true;
} else if (playerData.currentChapter == 8) {
playerData.achievements[4] = true;
} else if (playerData.currentChapter == 9) {
playerData.achievements[5] = true;
} else if (playerData.currentChapter == 12) {
playerData.achievements[6] = true;
} else if (playerData.currentChapter == 13) {
playerData.achievements[7] = true;
}
}
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;
}