• 个人简介

    副作用:药丸轮盘赌

    1.12 Beta更新公告
    增加商城中心(测试中)
    增加难度选择(测试中)
    增加联机大厅(测试中)
    增加存档功能(测试中)
    
    1.12正式版更新预告
    增加难度选择
    增加商城和兑换码
    增加存档功能
    增加双人模式
    丰富剧情
    
    根据用户反馈药剂师太强势了,所以将在1.12正式版削弱
    
    如有编译问题请洛谷私信或线下找我
    
    //1.12 Beta(未完成)(测试版)(QZ计划)
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <windows.h>
    
    using namespace std;
    
    // 游戏常量
    const int INITIAL_HEALTH = 6;
    const int MAX_PILLS = 8;
    const int MAX_ITEMS = 20;
    
    // 药丸类型
    enum PillType {
    RED,        // 红色药丸 - 剧毒
    BLUE,       // 蓝色药丸 - 治疗
    YELLOW,     // 黄色药丸 - 伤害+特殊
    GREEN,      // 绿色药丸 - 强力治疗
    PURPLE,     // 紫色药丸 - 特殊效果
    BLACK,      // 黑色药丸 - 剧毒
    WHITE,      // 白色药丸 - 治疗
    RAINBOW,    // 彩虹药丸 - 特殊
    GOLDEN,     // 金色药丸 - 无尽模式钥匙
    COUNT       // 药丸类型总数
    };
    // 道具类型
    enum ItemType {
    ANTIDOTE,       // 解毒剂 - 免疫下一次毒药
    EMETIC,         // 催吐药 - 吐出一颗已服药丸
    MICROSCOPE,     // 显微镜 - 查看所有药丸
    MAGNIFIER,      // 放大镜 - 查看下一颗药丸
    FILTER,         // 过滤器 - 移除当前药丸
    STABILIZER,     // 稳定剂 - 将下一颗变为治疗
    SHIELD,         // 护盾 - 抵挡下一次伤害
    MIRROR,         // 镜子 - 反弹效果给对手
    DILUTER,        // 稀释剂 - 减半药效
    AMPLIFIER,      // 放大器 - 加倍药效
    REVERSER,       // 逆转剂 - 反转药效
    DUPLICATOR,     // 复制器 - 复制当前药丸
    SHUFFLER,       // 洗牌器 - 重新洗牌
    TRANSMUTER,     // 转化器 - 改变药丸类型
    SYRINGE,        // 注射器 - 跳过当前药丸
    HOLSTER,        // 枪套 - 跳过对手回合
    LUCKY_CHARM,    // 幸运符 - 增加好药几率
    CURSED_ITEM,    // 诅咒物 - 增加毒药几率
    TIME_WARP,      // 时间扭曲 - 重做回合
    PULVERIZER      // 粉碎器 - 摧毁同类型药丸
    };
    
    // 药丸结构体
    struct Pill {
    PillType type;
    string name;
    string description;
    int healthEffect;
    bool isSpecial;
    bool isPoisonous;
    };
    
    // 道具结构体
    struct Item {
    ItemType type;
    string name;
    string description;
    };
    
    // 玩家结构体
    struct Player {
    string name;
    int health;
    vector<Item> items;
    int specialEffect; // 特殊效果标记
    };
    
    // 游戏状态
    struct GameState {
    int round;
    vector<Pill> pillBottle;
    int currentPillIndex;
    Player player;
    Player opponent;
    bool endlessMode;
    bool goldenPillUsed;
    int poisonCount; // 毒药计数
    };
    
    // 初始化药丸
    vector<Pill> initializePills() {
    vector<Pill> pills = {
    {RED,    "红色药丸", "鲜红如血,散发着甜腻气味", -3, false, true},
    {BLUE,   "蓝色药丸", "晶莹剔透,表面有细微裂纹", 1, false, false},
    {YELLOW, "黄色药丸", "发出微弱荧光,触感油腻", -2, true, true},
    {GREEN,  "绿色药丸", "薄荷香气,表面有螺旋纹路", 3, false, false},
    {PURPLE, "紫色药丸", "不规则形状,偶尔轻微震动", 0, true, false},
    {BLACK,  "黑色药丸", "吸收周围光线,摸起来冰凉", -4, false, true},
    {WHITE,  "白色药丸", "纯白无瑕,散发着牛奶香气", 2, false, false},
    {RAINBOW,"彩虹药丸", "色彩不断变化,温度忽冷忽热", 0, true, false},
    {GOLDEN, "金色药丸", "散发着神秘光芒,表面有奇异纹路", 0, true, false}
    };
    return pills;
    }
    
    // 初始化道具
    vector<Item> initializeItems() {
    vector<Item> items = {
    {ANTIDOTE,    "解毒剂",    "免疫下一次毒药效果"},
    {EMETIC,      "催吐药",    "吐出一颗已服用的药丸"},
    {MICROSCOPE,  "显微镜",    "查看药瓶中所有药丸"},
    {MAGNIFIER,   "放大镜",    "查看下一颗药丸"},
    {FILTER,      "过滤器",    "移除当前药丸"},
    {STABILIZER,  "稳定剂",    "将下一颗药丸变为治疗药"},
    {SHIELD,      "护盾",      "抵挡下一次伤害"},
    {MIRROR,      "镜子",      "将效果反弹给对手"},
    {DILUTER,     "稀释剂",    "减半下一颗药丸的效果"},
    {AMPLIFIER,   "放大器",    "加倍下一颗药丸的效果"},
    {REVERSER,    "逆转剂",    "反转下一颗药丸的效果"},
    {DUPLICATOR,  "复制器",    "复制当前药丸放入药瓶"},
    {SHUFFLER,    "洗牌器",    "重新随机药丸顺序"},
    {TRANSMUTER,  "转化器",    "改变当前药丸的类型"},
    {SYRINGE,     "注射器",    "跳过当前药丸"},
    {HOLSTER,     "枪套",      "跳过对手的下回合"},
    {LUCKY_CHARM, "幸运符",    "增加好药丸的几率"},
    {CURSED_ITEM, "诅咒物",    "增加毒药的几率"},
    {TIME_WARP,   "时间扭曲",  "重新开始当前回合"},
    {PULVERIZER,  "粉碎器",    "摧毁所有同类型药丸"}
    };
    return items;
    }
    
    // 随机获取道具
    Item getRandomItem() {
    static vector<Item> allItems = initializeItems();
    int index = rand() % allItems.size();
    return allItems[index];
    }
    
    // 初始化游戏
    GameState initializeGame(bool endless) {
    GameState game;
    game.round = 1;
    game.endlessMode = endless;
    game.goldenPillUsed = false;
    game.poisonCount = 0;
    
    // 初始化玩家
    game.player.name = "玩家";
    game.player.health = INITIAL_HEALTH;
    game.player.specialEffect = 0;
    
    // 初始化对手
    game.opponent.name = "药剂师";
    game.opponent.health = INITIAL_HEALTH;
    game.opponent.specialEffect = 0;
    
    // 初始化药瓶
    vector<Pill> allPills = initializePills();
    for (int i = 0; i < MAX_PILLS; i++) {
    int index = rand() % (allPills.size() - 1); // 不包括金色药丸
    game.pillBottle.push_back(allPills[index]);
    if (allPills[index].isPoisonous) {
    game.poisonCount++;
    }
    }
    
    // 无尽模式开始时加入金色药丸
    if (endless) {
    game.pillBottle.push_back(allPills[GOLDEN]);
    random_shuffle(game.pillBottle.begin(), game.pillBottle.end());
    }
    
    game.currentPillIndex = 0;
    
    // 给玩家初始道具
    for (int i = 0; i < 3; i++) {
    game.player.items.push_back(getRandomItem());
    }
    
    // 给对手初始道具
    for (int i = 0; i < 2; i++) {
    game.opponent.items.push_back(getRandomItem());
    }
    
    return game;
    
    }
    
    // 显示游戏状态
    void displayGameState(const GameState& game) {
    system("cls");
    cout << "=== 副作用 - 第 " << game.round << " 回合 ===" << endl;
    cout << "[" << game.player.name << "] 生命: ";
    for (int i = 0; i < game.player.health; i++) cout << "O";
    cout << endl;
    
    cout << "[" << game.opponent.name << "] 生命: ";
    for (int i = 0; i < game.opponent.health; i++) cout << "O";
    cout << endl << endl;
    
    cout << "药瓶中剩余药丸: " << game.pillBottle.size() - game.currentPillIndex << endl;
    cout << "其中有毒药丸: " << game.poisonCount << "颗" << endl;
    
    }
    
    // 显示道具
    void displayItems(const vector<Item>& items) {
    cout << "\n道具列表:" << endl;
    for (size_t i = 0; i < items.size(); i++) {
    cout << i+1 << ". " << items[i].name << " - " << items[i].description << endl;
    }
    }
    
    // 处理药丸效果
    void applyPillEffect(GameState& game, Pill pill, bool isPlayer) {
    Player& target = isPlayer ? game.player : game.opponent;
    Player& other = isPlayer ? game.opponent : game.player;
    
    cout << "\n>>> " << (isPlayer ? "你" : "药剂师") << "服用了: " << pill.name << endl;
    cout << pill.description << endl;
    Sleep(2000);
    
    // 更新毒药计数
    if (pill.isPoisonous) {
    game.poisonCount--;
    }
    
    // 检查护盾效果
    if (target.specialEffect & (1 << SHIELD)) {
    if (pill.healthEffect < 0) {
    cout << (isPlayer ? "你的护盾" : "药剂师的护盾") << "抵挡了伤害!" << endl;
    target.specialEffect &= ~(1 << SHIELD);
    Sleep(1500);
    return;
    }
    }
    
    // 检查解毒剂效果
    if (target.specialEffect & (1 << ANTIDOTE)) {
    if (pill.healthEffect < 0) {
    cout << (isPlayer ? "你的解毒剂" : "药剂师的解毒剂") << "中和了毒素!" << endl;
    pill.healthEffect /= 2;
    target.specialEffect &= ~(1 << ANTIDOTE);
    }
    }
    
    // 检查镜子效果
    if (target.specialEffect & (1 << MIRROR)) {
    cout << (isPlayer ? "你的镜子" : "药剂师的镜子") << "反弹了效果!" << endl;
    target.specialEffect &= ~(1 << MIRROR);
    applyPillEffect(game, pill, !isPlayer);
    return;
    }
    
    // 应用药丸基础效果
    if (pill.healthEffect != 0) {
    target.health += pill.healthEffect;
    if (pill.healthEffect > 0) {
    cout << (isPlayer ? "你" : "药剂师") << "恢复了 " << pill.healthEffect << " 点生命!" << endl;
    } else {
    cout << (isPlayer ? "你" : "药剂师") << "受到了 " << -pill.healthEffect << " 点伤害!" << endl;
    }
    }
    
    // 处理特殊药丸效果
    if (pill.isSpecial) {
    switch(pill.type) {
    case YELLOW:
    cout << "你感到一阵眩晕,视线开始模糊..." << endl;
    target.specialEffect |= (1 << (rand() % 5 + 5)); // 随机负面效果
    break;
    case PURPLE:
    cout << "周围的空间似乎扭曲了..." << endl;
    swap(target.health, other.health);
    cout << "你和药剂师的生命值交换了!" << endl;
    break;
    case RAINBOW:
    cout << "你看到了无数色彩在眼前旋转..." << endl;
    target.specialEffect = (1 << LUCKY_CHARM) | (1 << AMPLIFIER);
    cout << "你获得了幸运和强化的效果!" << endl;
    break;
    case GOLDEN:
    cout << "一股强大的能量流遍全身!" << endl;
    game.goldenPillUsed = true;
    game.endlessMode = true;
    cout << "无尽模式已激活!游戏将继续直到一方倒下!" << endl;
    break;
    default:
    break;
    }
    }
    
    // 确保生命值不会超过上限或低于0
    target.health = min(max(target.health, 0), INITIAL_HEALTH * (game.endlessMode ? 2 : 1));
    Sleep(2000);
    
    }
    
    // 使用道具
    bool useItem(Player& user, Player& target, vector<Pill>& pillBottle, int& currentPillIndex, int& poisonCount) {
    if (user.items.empty()) {
    cout << user.name << "没有可用的道具!" << endl;
    return false;
    }
    
    cout << user.name << "选择使用道具:" << endl;
    displayItems(user.items);
    
    int choice;
    if (user.name == "玩家") {
    cin >> choice;
    } else {
    // AI简单逻辑:优先使用防御性道具
    for (size_t i = 0; i < user.items.size(); i++) {
    if (user.items[i].type == ANTIDOTE || user.items[i].type == SHIELD) {
    choice = i + 1;
    break;
    }
    }
    if (choice < 1 || choice > static_cast<int>(user.items.size())) {
    choice = rand() % user.items.size() + 1;
    }
    Sleep(1500);
    }
    
    if (choice < 1 || choice > static_cast<int>(user.items.size())) {
    cout << "无效选择!" << endl;
    return false;
    }
    
    Item usedItem = user.items[choice-1];
    user.items.erase(user.items.begin() + choice - 1);
    
    cout << user.name << "使用了: " << usedItem.name << endl;
    cout << usedItem.description << endl;
    Sleep(1500);
    
    switch(usedItem.type) {
    case ANTIDOTE:
    user.specialEffect |= (1 << ANTIDOTE);
    break;
    case EMETIC:
    if (user.health < INITIAL_HEALTH) {
    user.health += 1;
    cout << user.name << "吐出了一颗药丸,感觉好多了!" << endl;
    } else {
    cout << user.name << "想吐但吐不出来!" << endl;
    }
    break;
    case MICROSCOPE:
    cout << "药瓶中的药丸:" << endl;
    for (size_t i = currentPillIndex; i < pillBottle.size(); i++) {
    cout << i+1 << ". " << pillBottle[i].name << endl;
    }
    return false; // 不消耗回合
    case MAGNIFIER:
    if (currentPillIndex + 1 < static_cast<int>(pillBottle.size())) {
    cout << "下一颗药丸是: " << pillBottle[currentPillIndex+1].name << endl;
    } else {
    cout << "这是最后一颗药丸了!" << endl;
    }
    break;
    case FILTER:
    if (currentPillIndex < static_cast<int>(pillBottle.size())) {
    cout << "移除了: " << pillBottle[currentPillIndex].name << endl;
    if (pillBottle[currentPillIndex].isPoisonous) {
    poisonCount--;
    }
    pillBottle.erase(pillBottle.begin() + currentPillIndex);
    }
    break;
    case STABILIZER:
    user.specialEffect |= (1 << STABILIZER);
    break;
    case SHIELD:
    user.specialEffect |= (1 << SHIELD);
    break;
    case MIRROR:
    user.specialEffect |= (1 << MIRROR);
    break;
    case DILUTER:
    user.specialEffect |= (1 << DILUTER);
    break;
    case AMPLIFIER:
    user.specialEffect |= (1 << AMPLIFIER);
    break;
    case REVERSER:
    user.specialEffect |= (1 << REVERSER);
    break;
    case DUPLICATOR:
    if (currentPillIndex < static_cast<int>(pillBottle.size())) {
    pillBottle.insert(pillBottle.begin() + currentPillIndex, pillBottle[currentPillIndex]);
    if (pillBottle[currentPillIndex].isPoisonous) {
    poisonCount++;
    }
    cout << "复制了: " << pillBottle[currentPillIndex].name << endl;
    }
    break;
    case SHUFFLER:
    random_shuffle(pillBottle.begin() + currentPillIndex, pillBottle.end());
    cout << "药丸顺序被打乱了!" << endl;
    break;
    case TRANSMUTER:
    if (currentPillIndex < static_cast<int>(pillBottle.size())) {
    vector<Pill> allPills = initializePills();
    bool wasPoisonous = pillBottle[currentPillIndex].isPoisonous;
    pillBottle[currentPillIndex] = allPills[rand() % allPills.size()];
    if (wasPoisonous && !pillBottle[currentPillIndex].isPoisonous) {
    poisonCount--;
    } else if (!wasPoisonous && pillBottle[currentPillIndex].isPoisonous) {
    poisonCount++;
    }
    cout << "药丸变成了: " << pillBottle[currentPillIndex].name << endl;
    }
    break;
    case SYRINGE:
    cout << "跳过了当前药丸!" << endl;
    currentPillIndex++;
    break;
    case HOLSTER:
    cout << target.name << "的下回合将被跳过!" << endl;
    target.specialEffect |= (1 << HOLSTER);
    break;
    case LUCKY_CHARM:
    user.specialEffect |= (1 << LUCKY_CHARM);
    break;
    case CURSED_ITEM:
    target.specialEffect |= (1 << CURSED_ITEM);
    break;
    case TIME_WARP:
    cout << "时间倒流了!" << endl;
    return false; // 重新开始回合
    case PULVERIZER:
    if (currentPillIndex < static_cast<int>(pillBottle.size())) {
    PillType typeToDestroy = pillBottle[currentPillIndex].type;
    int destroyedPoisons = 0;
    for (auto it = pillBottle.begin() + currentPillIndex; it != pillBottle.end(); ) {
    if (it->type == typeToDestroy) {
    if (it->isPoisonous) destroyedPoisons++;
    cout << "摧毁了: " << it->name << endl;
    it = pillBottle.erase(it);
    } else {
    ++it;
    }
    }
    poisonCount -= destroyedPoisons;
    }
    break;
    }
    
    return true;
    
    }
    
    // 玩家回合
    void playerTurn(GameState& game) {
    bool turnEnded = false;
    
    while (!turnEnded) {
    displayGameState(game);
    
    if (game.currentPillIndex >= static_cast<int>(game.pillBottle.size())) {
    cout << "药瓶已经空了!" << endl;
    break;
    }
    
    cout << "\n当前药丸: " << game.pillBottle[game.currentPillIndex].name << endl;
    cout << "描述: " << game.pillBottle[game.currentPillIndex].description << endl;
    cout << "1. 服用这颗药丸" << endl;
    cout << "2. 使用道具(按0退出)" << endl;
    cout << "3. 查看道具说明" << endl;
    
    int choice;
    cin >> choice;
    
    if (choice == 1) {
    // 服用当前药丸
    Pill currentPill = game.pillBottle[game.currentPillIndex];
    applyPillEffect(game, currentPill, true);
    game.currentPillIndex++;
    turnEnded = true;
    }
    else if (choice == 2) {
    // 使用道具
    if (useItem(game.player, game.opponent, game.pillBottle, game.currentPillIndex, game.poisonCount)) {
    turnEnded = true;
    }
    Sleep(1500);
    }
    else if (choice == 3) {
    displayItems(game.player.items);
    system("pause");
    }
    else {
    cout << "无效选择!" << endl;
    Sleep(1000);
    }
    
    }
    
    // 回合结束时获得新道具
    if (turnEnded && game.player.items.size() < 5) {
    game.player.items.push_back(getRandomItem());
    }
    
    }
    
    // 对手回合
    void opponentTurn(GameState& game) {
    displayGameState(game);
    
    // 检查是否被跳过回合
    if (game.opponent.specialEffect & (1 << HOLSTER)) {
    cout << "\n药剂师被跳过回合!" << endl;
    game.opponent.specialEffect &= ~(1 << HOLSTER);
    Sleep(1500);
    return;
    }
    
    cout << "\n药剂师的回合..." << endl;
    Sleep(1500);
    
    // 简单AI逻辑
    bool usedItem = false;
    
    // 有道具且随机决定使用道具
    if (!game.opponent.items.empty() && rand() % 3 != 0) {
    usedItem = useItem(game.opponent, game.player, game.pillBottle, game.currentPillIndex, game.poisonCount);
    }
    
    // 如果没用道具且药瓶不为空,服药
    if (!usedItem && game.currentPillIndex < static_cast<int>(game.pillBottle.size())) {
    Pill currentPill = game.pillBottle[game.currentPillIndex];
    applyPillEffect(game, currentPill, false);
    game.currentPillIndex++;
    }
    
    // 对手回合结束时获得新道具
    if (game.opponent.items.size() < 3) {
    game.opponent.items.push_back(getRandomItem());
    }
    
    }
    
    // 主游戏循环
    void gameLoop(bool endlessMode) {
    GameState game = initializeGame(endlessMode);
    
    // 开场剧情
    cout << "=== 副作用 - 剧情===" << endl;
    cout << "你走进一家昏暗的药店,柜台后站着一位穿着白大褂的古怪药剂师。\n";
    cout << "'啊,新来的病人!'他咯咯笑着,'让我们玩个游戏吧...'\n";
    cout << "他拿出一个装满各色药丸的瓶子,'每人轮流服药,看看谁的运气更好!'\n";
    if (endlessMode) {
    cout << "'不过这次...我们玩个更大的!'药剂师神秘地笑着,放入一颗金色药丸...\n";
    }
    system("pause");
    
    while (true) {
    // 检查游戏结束条件
    if (game.player.health <= 0 && game.opponent.health <= 0) {
    cout << "你们双双倒下...平局!\n";
    break;
    } else if (game.player.health <= 0) {
    cout << "你倒下了...药剂师站在你面前咯咯笑。'看来我的药方更有效!'\n";
    break;
    } else if (game.opponent.health <= 0) {
    if (game.endlessMode && !game.goldenPillUsed) {
    cout << "药剂师瘫倒在地!但就在你以为胜利时...\n";
    cout << "他突然狂笑起来,掏出一颗金色药丸吞下!'游戏才刚开始!'\n";
    game.opponent.health = INITIAL_HEALTH * 2;
    game.round++;
    game.goldenPillUsed = true;
    continue;
    } else {
    cout << "药剂师瘫倒在地!你赢得了这场危险的游戏!\n";
    break;
    }
    }
    
    // 检查是否需要重新装填药瓶
    if (game.currentPillIndex >= static_cast<int>(game.pillBottle.size())) {
    cout << "药瓶空了...重新装填!" << endl;
    vector<Pill> allPills = initializePills();
    game.pillBottle.clear();
    game.poisonCount = 0;
    

    for (int i = 0; i < MAX_PILLS; i++) { int index = rand() % (allPills.size() - 1); // 不包括金色药丸 game.pillBottle.push_back(allPills[index]); if (allPills[index].isPoisonous) { game.poisonCount++; } }

    // 无尽模式每3轮加入一颗金色药丸 if (game.endlessMode && game.round % 3 == 0) { game.pillBottle.push_back(allPills[GOLDEN]); }

    random_shuffle(game.pillBottle.begin(), game.pillBottle.end()); game.currentPillIndex = 0; Sleep(2000);

    }
    
    // 玩家回合
    playerTurn(game);
    
    // 对手回合
    if (game.opponent.health > 0 && game.currentPillIndex < static_cast<int>(game.pillBottle.size())) {
    opponentTurn(game);
    }
    
    game.round++;
    
    // 无尽模式难度提升
    if (game.endlessMode && game.round % 5 == 0) {
    cout << "\n你感觉药剂变得更加强烈了...\n";
    game.opponent.health += 1;
    Sleep(1500);
    }
    
    }
    
    }
    
    // 主菜单
    void mainMenu() {
    while (true) {
    system("cls");
    cout << "=== 副作用 - 药丸轮盘赌 1.12 Beta===" << endl;
    cout << "1. 开始游戏" << endl;
    cout << "2. 无尽模式" << endl;
    cout << "3. 游戏说明" << endl;
    cout << "4. 商城中心" << endl;
    cout << "5. 难度选择" << endl;
    cout << "6. 联机大厅" << endl;
    cout << "7. 退出" << endl;
    
    int choice;
    cin >> choice;
    
    if (choice == 1) {
    gameLoop(false);
    system("pause");
    }
    else if (choice == 2) {
    cout << "\n警告: 无尽模式会越来越难,直到你倒下!\n";
    cout << "药剂师会强化,道具也会随着游戏进度越来越少!\n";
    cout << "确定要开始吗? (y/n): ";
    char confirm;
    cin >> confirm;
    if (confirm == 'y' || confirm == 'Y') {
    gameLoop(true);
    system("pause");
    }
    }
    else if (choice == 3) {
    cout << "\n=== 副作用 - 游戏说明 ===" << endl;
    cout << "1. 轮流服用药瓶中的药丸,有些治疗,有些有毒" << endl;
    cout << "2. 界面会显示剩余毒药数量,但不会告诉你具体哪颗" << endl;
    cout << "3. 使用道具来获得优势,每回合会获得新道具" << endl;
    cout << "4. 无尽模式中,找到金色药丸可解锁真正挑战" << endl;
    cout << "5. 合理使用道具组合是获胜关键" << endl;
    cout << "6. @bjlqz_leo出品/. @qfcwyh2运营/. @bjzzr审核/." << endl;
    cout << "7. 每周更新/." << endl;
    system("pause");
    }
    else if (choice == 4){
    int leo;
    cout << "欢迎来到leo的商城" << endl;
    cout << "当前可购买:" << endl;
    cout << "1. 幸运星\n" << "类型:" << "游戏内道具\n" << "效果:" << "幸运值+100%" << "\n" << "免费获得" << endl;
    cout << "2. 手机\n" << "类型:" << "游戏内道具\n" << "效果:" << "买通裁判使对手受伤+50%" << "\n" << "一键三连获得" << endl;
    cout << "买什么?" << endl;
    cin >> leo;
    if (leo == 1 || leo == 2){
    cout << "购买成功!\n" << "正在返回主页..." << endl;
    }
    else{
    cout << "无效选择!" << endl;
    }
    system("pause");
    }
    else if (choice == 5){
    cout << "由于此版本为测试阶段,尚未完善该功能!"<< endl;
    cout << "正在返回主页..." << endl;
    system("pause");	
    }
    else if (choice == 6){
    int baocuo;
    cout << "公告:" << endl << "欢迎来到联机大厅!" << endl;
    cout << "由于此服务器非常小(只有一个房间),断连是常有的事,请耐心等待!" << endl;
    cout << "正在连接房间..." << endl;
    Sleep(10000);
    srand(time(NULL));
    baocuo = (rand() % 2) + 1;
    if (baocuo == 1){
    cout << "连接成功!" << endl;
    Sleep(5000);
    cout << "正在加入!" << endl;
    Sleep(5000);
    cout << "Error:无法加入房间1" << endl;
    Sleep(5000);
    cout << "正在上报错误" << endl;
    Sleep(5000);
    cout << "正在返回主页..." << endl;	
    }
    else if (baocuo == 2){
    cout << "找不到服务器IP地址,请检查是否有误" << endl;
    Sleep(5000);
    cout << "正在上报错误" << endl;
    Sleep(5000);
    cout << "正在返回主页..." << endl;	
    }
    system("pause");
    }
    else if (choice == 7)
    {
    break;
    }
    
    }
    
    }
    string lianjigongneng(string lianji,string room){
    ;
    }
    int main() {
    srand(static_cast<unsigned>(time(0)));
    mainMenu();
    return 0;
    }
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <map>
    #include <random>
    #include <ctime>
    #include <algorithm>
    
    // 兼容C++11,关闭安全警告(Windows平台)
    #pragma warning(disable: 4996)
    
    using namespace std;
    
    // 游戏核心属性结构体(隐藏属性,影响结局判定)
    struct GameAttributes {
    int sanity;     // 理智(0-10):过度消耗会触发精神类结局
    int courage;    // 勇气(0-10):过低会触发逃避类结局,过高会触发鲁莽类结局
    int caution;    // 谨慎(0-10):影响线索收集和危险规避
    int empathy;    // 共情(0-10):影响与NPC的关系走向
    int clue;       // 线索(0-10):决定解谜完整度,直接影响真相类结局
    

    // C++11 构造函数初始化 GameAttributes() : sanity(5), courage(5), caution(5), empathy(5), clue(5) {}

    };
    
    // 关键选择标记结构体(记录核心选择,影响结局分支)
    struct ChoiceFlags {
    bool trust_npc;         // 是否信任神秘NPC(flag1)
    bool check_trap;        // 是否检查可疑陷阱(flag2)
    bool save_stranger;     // 是否拯救陌生幸存者(flag3)
    bool burn_evidence;     // 是否烧毁关键证据(flag4)
    

    ChoiceFlags() : trust_npc(false), check_trap(false), save_stranger(false), burn_evidence(false) {}

    };
    
    // 游戏全局状态
    GameAttributes player_attr;
    ChoiceFlags choice_flags;
    int story_stage = 0;       // 剧情阶段(0-4,对应4个核心选择节点)
    bool game_running = true;
    
    // C++11 随机数生成(替代rand(),更均匀)
    int get_random_int(int min, int max) {
    static mt19937 rng(static_cast<unsigned int>(time(nullptr)));
    uniform_int_distribution<int> dist(min, max);
    return dist(rng);
    }
    
    // 属性修改函数
    void modify_attribute(string attr_name, int value) {
    if (attr_name == "sanity") {
    player_attr.sanity += value;
    player_attr.sanity = max(0, min(10, player_attr.sanity)); // 限制在0-10
    } else if (attr_name == "courage") {
    player_attr.courage += value;
    player_attr.courage = max(0, min(10, player_attr.courage));
    } else if (attr_name == "caution") {
    player_attr.caution += value;
    player_attr.caution = max(0, min(10, player_attr.caution));
    } else if (attr_name == "empathy") {
    player_attr.empathy += value;
    player_attr.empathy = max(0, min(10, player_attr.empathy));
    } else if (attr_name == "clue") {
    player_attr.clue += value;
    player_attr.clue = max(0, min(10, player_attr.clue));
    }
    }
    
    // 剧情打印函数(模拟文字叙事节奏)
    void print_story(const string& content) {
    for (char c : content) { // C++11 范围for循环
    cout << c;
    // 简单延时,营造阅读氛围
    if (c == '.' || c == '!' || c == '?') {
    for (int i = 0; i < 100000000; i++);
    }
    }
    cout << endl << endl;
    }
    
    // 阶段0:游戏开局 + 第一个核心选择
    void story_stage_0() {
    print_story("【悬疑游戏:雾影山庄】");
    print_story("你在一辆破旧的出租车上醒来,头痛欲裂。司机告诉你,你是受雇来雾影山庄调查一桩失踪案的侦探。");
    print_story("3天前,山庄主人林老爷离奇失踪,家中只留下一封残缺的遗书和满地的诡异符号。");
    print_story("出租车停在山庄大门前,大门虚掩着,里面弥漫着一股潮湿的霉味。司机催促你下车:\"我可不敢在这门口多待,天黑前一定要离开!\"");
    print_story("此时,你面前有三个选择:");
    cout << "1. 直接推开大门进入山庄,不做任何准备" << endl;
    cout << "2. 先在山庄门口观察10分钟,检查周围是否有异常痕迹" << endl;
    cout << "3. 回头询问司机更多关于山庄的传闻,收集额外信息" << endl;
    cout << "请输入你的选择(1/2/3):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你深吸一口气,直接推开大门。木门发出"吱呀"的刺耳声响,仿佛在控诉你的闯入。"); modify_attribute("courage", 2); modify_attribute("caution", -1); choice_flags.check_trap = false; break; case 2: print_story("你蹲在山庄围墙边,仔细观察四周。你发现墙角有一串新鲜的脚印,还有一根带有血迹的银针,这让你对山庄的危险有了初步认知。"); modify_attribute("caution", 2); modify_attribute("clue", 1); choice_flags.check_trap = true; break; case 3: print_story("你回头拉住司机,司机犹豫片刻,告诉你:"这山庄十年前就死过人,说是女主人被林老爷害死在阁楼里,从此就常有怪事发生!"说完便匆忙开车离去。"); modify_attribute("sanity", -1); modify_attribute("clue", 2); modify_attribute("empathy", 1); choice_flags.check_trap = false; break; default: print_story("你犹豫不决,浪费了几分钟时间,最终还是硬着头皮推开了大门。"); modify_attribute("courage", 1); modify_attribute("caution", -1); choice_flags.check_trap = false; break; }

    story_stage = 1;

    }
    
    // 阶段1:山庄大厅 + 第二个核心选择
    void story_stage_1() {
    print_story("你进入山庄大厅,光线昏暗,只有屋顶的一盏煤油灯在随风晃动,映得墙上的影子忽明忽暗。");
    print_story("大厅中央站着一个身穿黑色风衣的男人,他背对着你,听到脚步声后缓缓转身。他的脸上有一道长长的刀疤,眼神锐利如鹰。");
    print_story("\"你就是来调查林老爷失踪案的侦探?\"男人开口,声音沙哑,\"我是林老爷的私人保镖,赵武。这山庄里不安全,你最好尽快离开。\"");
    print_story("此时,你注意到他的袖口沾着一丝泥土,而大厅的地板却是干净的。同时,你看到楼梯口有一个女人的身影一闪而过。");
    print_story("你有四个选择:");
    cout << "1. 完全信任赵武,听从他的建议,立刻离开山庄" << endl;
    cout << "2. 质疑赵武的身份,要求他出示身份证明,并追问女人的去向" << endl;
    cout << "3. 假装信任赵武,向他打听林老爷的日常行踪,暗中观察他的反应" << endl;
    cout << "4. 无视赵武,直接冲向楼梯口,去寻找那个女人的踪迹" << endl;
    cout << "请输入你的选择(1/2/3/4):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你觉得赵武虽然外表凶悍,但语气诚恳,便选择相信他。你跟着他走出山庄大门,回头望去,山庄仿佛一头蛰伏的巨兽,在雾气中若隐若现。"); modify_attribute("empathy", 2); modify_attribute("courage", -1); choice_flags.trust_npc = true; break; case 2: print_story("你盯着赵武的袖口,冷声质问道:"你袖口的泥土是哪里来的?楼梯口的女人是谁?请出示你的身份证明!"赵武的眼神瞬间变得冰冷,身体紧绷,似乎在戒备什么。"); modify_attribute("caution", 2); modify_attribute("courage", 1); modify_attribute("clue", 1); choice_flags.trust_npc = false; break; case 3: print_story("你露出微笑,对赵武说:"赵先生,麻烦你跟我说说林老爷失踪前的日常,这样我能更快找到他。"在赵武讲述的过程中,你注意到他在提到"阁楼"二字时,眼神躲闪了一下。"); modify_attribute("caution", 1); modify_attribute("empathy", 1); modify_attribute("clue", 2); choice_flags.trust_npc = false; break; case 4: print_story("你没有理会赵武的话,猛地冲向楼梯口。赵武大喊一声:"别去!"想要阻拦你,却被你巧妙躲开。你冲上楼梯,只看到一扇紧闭的房门,门上挂着一把生锈的锁。"); modify_attribute("courage", 2); modify_attribute("caution", -1); modify_attribute("clue", 1); choice_flags.trust_npc = false; break; default: print_story("你愣在原地,不知道该如何抉择。赵武见状,再次催促你离开,你最终还是半信半疑地跟着他走到了大厅门口。"); modify_attribute("empathy", 1); modify_attribute("courage", 0); choice_flags.trust_npc = true; break; }

    story_stage = 2;

    }
    
    // 阶段2:阁楼线索 + 第三个核心选择
    void story_stage_2() {
    print_story("无论你是否信任赵武,最终你还是找到了进入阁楼的方法。阁楼里布满灰尘,堆放着许多旧物,墙角放着一个破旧的木箱,上面贴着一张泛黄的照片。");
    print_story("照片上是林老爷和一个女人的合影,女人笑容温婉,正是十年前失踪的山庄女主人。木箱旁边,躺着一个浑身是伤的陌生女人,她气息微弱,看到你后,艰难地伸出手:\"救...救我...林老爷...他还活着...\"");
    print_story("此时,你听到阁楼楼下传来脚步声,赵武的声音越来越近:\"我看你往哪里跑!\"");
    print_story("你发现木箱里有林老爷的完整遗书,还有一把手枪和一瓶解药(可以救活女人)。你有三个选择:");
    cout << "1. 优先拯救陌生女人,给她注射解药,再想办法带她逃离阁楼" << endl;
    cout << "2. 优先拿走木箱里的遗书和手枪,放弃拯救女人,独自逃离阁楼" << endl;
    cout << "3. 既拿走遗书和手枪,又尝试带着女人一起逃离阁楼" << endl;
    cout << "请输入你的选择(1/2/3):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你毫不犹豫地拿起解药,给女人注射进去。女人的气息逐渐平稳,她告诉你:"赵武想要霸占山庄的财产,把林老爷囚禁在了地下室!"就在此时,赵武冲上了阁楼。"); modify_attribute("empathy", 3); modify_attribute("courage", 1); modify_attribute("clue", 1); choice_flags.save_stranger = true; break; case 2: print_story("你看了一眼奄奄一息的女人,咬了咬牙,拿起遗书和手枪,从阁楼的后窗跳了下去。你落地时崴了脚,但好在成功摆脱了赵武的追捕,女人的呼救声在你身后渐渐消失。"); modify_attribute("caution", 1); modify_attribute("courage", 1); modify_attribute("empathy", -2); choice_flags.save_stranger = false; break; case 3: print_story("你快速拿起遗书和手枪,然后背起女人,试图从后窗逃离。女人的体重超出了你的预期,你落地时动作迟缓,被赶来的赵武发现,他举着一把砍刀,挡住了你的去路。"); modify_attribute("courage", 2); modify_attribute("empathy", 2); modify_attribute("caution", -1); choice_flags.save_stranger = true; break; default: print_story("你犹豫不决,既想救女人,又想拿走线索。就在你纠结的时候,赵武已经冲上阁楼,将你和女人团团围住。"); modify_attribute("empathy", 1); modify_attribute("courage", -1); choice_flags.save_stranger = true; break; }

    story_stage = 3;

    }
    
    // 阶段3:地下室真相 + 第四个核心选择
    void story_stage_3() {
    print_story("根据线索(或女人的指引),你找到了山庄的地下室。地下室里阴暗潮湿,散发着一股刺鼻的消毒水味。");
    print_story("你看到林老爷被铁链锁在墙壁上,脸色苍白,神情萎靡。他的面前放着一个燃烧的火盆,里面烧着一些纸张,正是山庄的财产转让协议。");
    print_story("赵武站在火盆旁,看到你后,疯狂地大笑起来:\"既然你都找到了这里,那就别想活着离开!这山庄的财产,以后就是我的了!\"");
    print_story("此时,你发现火盆旁边有一个煤气罐,手枪里只有3发子弹,女人(若存活)可以帮你牵制赵武。你有三个选择:");
    cout << "1. 烧毁火盆旁的所有证据(包括遗书),假装妥协,趁机偷袭赵武" << endl;
    cout << "2. 用手枪威慑赵武,要求他释放林老爷,然后带着林老爷和女人(若存活)安全离开" << endl;
    cout << "3. 引爆煤气罐,与赵武同归于尽,保护林老爷和遗书(真相不被掩盖)" << endl;
    cout << "请输入你的选择(1/2/3):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你当着赵武的面,将遗书扔进火盆里,假装害怕地说:"我不会泄露这里的秘密,求你放我走。"赵武放松警惕的瞬间,你突然掏出藏好的武器(或发动女人牵制),偷袭了他。"); modify_attribute("caution", 2); modify_attribute("sanity", -1); choice_flags.burn_evidence = true; break; case 2: print_story("你举起手枪,对准赵武的胸口,厉声说道:"放了林老爷,否则我开枪了!"赵武看着你坚定的眼神,又看了看手枪,犹豫片刻后,缓缓解开了林老爷身上的铁链。"); modify_attribute("courage", 2); modify_attribute("clue", 1); choice_flags.burn_evidence = false; break; case 3: print_story("你知道自己不一定能打过赵武,也不一定能带着所有人安全离开。你悄悄打开煤气罐的阀门,然后将一根燃烧的火柴扔向煤气罐。"我就算死,也要揭露你的罪行!""); modify_attribute("courage", 3); modify_attribute("sanity", -2); modify_attribute("empathy", 1); choice_flags.burn_evidence = false; break; default: print_story("你紧张得手忙脚乱,手枪不慎掉在地上。赵武见状,立刻冲了上来,与你扭打在一起。混乱中,你不知道该如何是好。"); modify_attribute("courage", -1); modify_attribute("sanity", -1); choice_flags.burn_evidence = true; break; }

    story_stage = 4;

    }
    
    // 核心函数:计算结局编号(1-100)
    int calculate_end_number() {
    // 1. 计算属性总分(0-50),映射为0-69(70个档位)
    int total_attr = player_attr.sanity + player_attr.courage + player_attr.caution +
    player_attr.empathy + player_attr.clue;
    int attr_grade = min(69, max(0, total_attr * 69 / 50)); // 归一化到0-69
    

    // 2. 计算关键选择标记得分(0-19),4个flag组合出16种,扩展为0-19 int flag_grade = 0; if (choice_flags.trust_npc) flag_grade += 5; if (choice_flags.check_trap) flag_grade += 5; if (choice_flags.save_stranger) flag_grade += 5; if (choice_flags.burn_evidence) flag_grade += 5; flag_grade = min(19, max(0, flag_grade)); // 归一化到0-19

    // 3. 随机因子(0-9),10个档位 int random_grade = get_random_int(0, 9);

    // 4. 计算最终结局编号(1-100):attr_grade(0-69) + flag_grade(0-19) + random_grade(0-9) + 1 int end_number = attr_grade + flag_grade + random_grade + 1; // 确保结局编号在1-100之间 end_number = min(100, max(1, end_number));

    return end_number;

    }
    
    // 结局描述函数:返回100种结局的详细描述
    string get_end_description(int end_num) {
    // 按结局类型分类,确保100种结局各有差异
    vector<string> end_descriptions(101); // 索引1-100
    

    // 1-20:逃生类结局(成功逃离山庄,结果不同) end_descriptions[1] = "【结局1:狼狈逃生】你独自逃离雾影山庄,什么线索都没带走,也没救任何人。从此你再也不敢提及这个山庄,夜夜被噩梦缠身。"; end_descriptions[2] = "【结局2:侥幸逃生】你带着残缺的线索逃离山庄,赵武没有追来。你将线索交给警方,但因证据不足,赵武逍遥法外。"; end_descriptions[3] = "【结局3:带人行生】你带着陌生女人逃离山庄,林老爷不幸遇害。你帮女人养好伤,她告诉你部分真相,你们一起过上了隐姓埋名的生活。"; end_descriptions[4] = "【结局4:全员逃生】你成功带着林老爷和女人逃离山庄,警方根据你的线索,将赵武抓捕归案,正义得到伸张。"; end_descriptions[5] = "【结局5:负伤逃生】你在逃离过程中被赵武砍伤,落下终身残疾。但你成功将真相公之于众,成为了人们口中的英雄。"; end_descriptions[6] = "【结局6:懦弱逃生】你在赵武的威胁下,跪地求饶,赵武不屑于杀你,将你赶出山庄。你从此声名狼藉,再也无法从事侦探行业。"; end_descriptions[7] = "【结局7:机智逃生】你利用阁楼的陷阱,将赵武困住,然后从容逃离山庄,还带走了全部线索,成功协助警方破案。"; end_descriptions[8] = "【结局8:惊险逃生】你从山庄后窗跳下,摔断了腿,被路过的村民救下。你在医院躺了三个月,醒来后,雾影山庄已经被大火烧毁。"; end_descriptions[9] = "【结局9:遗忘逃生】你逃离山庄后,因过度惊吓失去了关于山庄的所有记忆,过上了平淡无奇的普通人生活,再也没有想起过那段经历。"; end_descriptions[10] = "【结局10:愧疚逃生】你独自逃离山庄,女人和林老爷都被赵武杀害。你余生都活在愧疚中,不断捐款行善,试图弥补自己的过错。"; end_descriptions[11] = "【结局11:结伴逃生】你和赵武达成协议,平分林老爷的财产,然后一起逃离山庄。你们从此分道扬镳,再也没有联系。"; end_descriptions[12] = "【结局12:秘密逃生】你发现林老爷才是幕后真凶,赵武只是被利用。你带着这个秘密逃离山庄,林老爷和赵武最终自相残杀,同归于尽。"; end_descriptions[13] = "【结局13:带证逃生】你带着完整的遗书和财产协议逃离山庄,将林老爷和赵武的罪行一并揭露,两人都被警方抓捕。"; end_descriptions[14] = "【结局14:被迫逃生】你被女人胁迫,带着她逃离山庄。后来你发现,女人是山庄女主人的妹妹,她的目标是为姐姐复仇。"; end_descriptions[15] = "【结局15:幸运逃生】你在逃离过程中,遇到了前来巡查的警察,赵武当场被抓获。你因协助破案,获得了一笔丰厚的奖金。"; end_descriptions[16] = "【结局16:遗憾逃生】你成功逃离山庄,但林老爷在逃离过程中因伤势过重去世。你将他的遗体带回,帮他举办了一场简单的葬礼。"; end_descriptions[17] = "【结局17:恐惧逃生】你逃离山庄后,患上了严重的恐惧症,不敢再进入任何老旧的建筑,甚至不敢在晚上出门。"; end_descriptions[18] = "【结局18:荣耀逃生】你成功破获案件,成为了当地有名的侦探,许多人慕名而来,请你帮忙调查各种悬案。"; end_descriptions[19] = "【结局19:低调逃生】你成功破案后,拒绝了所有采访和奖励,选择低调地离开当地,继续过着漂泊的侦探生活。"; end_descriptions[20] = "【结局20:意外逃生】山庄突然发生地震,墙体坍塌,赵武被埋在废墟下。你趁机带着林老爷和女人逃离,山庄从此被埋在地下,成为永恒的秘密。";

    // 21-40:牺牲类结局(自身或他人牺牲,结果不同) end_descriptions[21] = "【结局21:自我牺牲】你为了保护林老爷和女人,主动吸引赵武的注意力,最终被赵武杀害。他们两人成功逃离,将你的事迹流传后世。"; end_descriptions[22] = "【结局22:女人牺牲】女人为了保护你和林老爷,主动与赵武同归于尽。你带着林老爷逃离,余生都在缅怀这个勇敢的女人。"; end_descriptions[23] = "【结局23:林老爷牺牲】林老爷为了让你和女人逃离,引爆了随身携带的炸药,与赵武同归于尽。你带着女人,帮林老爷完成了遗愿。"; end_descriptions[24] = "【结局24:无意义牺牲】你冲动地与赵武正面硬刚,最终被赵武杀害,林老爷和女人也没能逃脱,所有人都死在了山庄里。"; end_descriptions[25] = "【结局25:壮烈牺牲】你引爆煤气罐,与赵武同归于尽。警方后来在废墟中发现了遗书,揭露了所有真相,你被追认为烈士。"; end_descriptions[26] = "【结局26:遗憾牺牲】你在与赵武的搏斗中,身受重伤,临终前将线索交给女人,让她带着林老爷逃离。你在山庄里闭上了眼睛,再也没有醒来。"; end_descriptions[27] = "【结局27:被迫牺牲】你被赵武抓住,他以林老爷和女人的性命要挟你,让你自行了断。为了保护他们,你选择了自杀。"; end_descriptions[28] = "【结局28:误杀牺牲】你在混乱中,不慎被女人误伤,最终不治身亡。女人和林老爷成功逃离,却永远活在误杀你的愧疚中。"; end_descriptions[29] = "【结局29:交换牺牲】你与赵武达成交换协议,用自己的性命换取林老爷和女人的自由。赵武遵守承诺,放他们离开,你则被赵武杀害。"; end_descriptions[30] = "【结局30:意外牺牲】山庄的阁楼突然坍塌,你为了保护遗书,被埋在废墟下。林老爷和女人成功逃离,遗书最终被公之于众。"; end_descriptions[31] = "【结局31:懦弱牺牲】你在赵武的威胁下,选择出卖林老爷和女人,试图换取自己的性命。但赵武出尔反尔,最终将你也一并杀害。"; end_descriptions[32] = "【结局32:勇敢牺牲】你手持手枪,与赵武展开殊死搏斗,虽然最终不敌赵武,但为林老爷和女人争取了足够的逃生时间。"; end_descriptions[33] = "【结局33:理智牺牲】你知道自己无法战胜赵武,便选择将线索藏在身上,然后故意被赵武杀害。警方后来在你的尸体上发现了线索,破获了案件。"; end_descriptions[34] = "【结局34:共情牺牲】你看到女人和林老爷的悲惨遭遇,决定牺牲自己,帮他们报仇。你设计将赵武引入陷阱,与他同归于尽。"; end_descriptions[35] = "【结局35:谨慎牺牲】你提前在山庄布置了陷阱,但在触发陷阱时,不慎被波及,最终与赵武一起死于陷阱之中。"; end_descriptions[36] = "【结局36:鲁莽牺牲】你没有做好任何准备,就直接冲向赵武,想要与他硬拼,最终被赵武轻松杀害,毫无价值。"; end_descriptions[37] = "【结局37:神秘牺牲】你在与赵武的搏斗中,突然被一股神秘力量带走,从此消失得无影无踪。林老爷和女人成功逃离,再也没有你的消息。"; end_descriptions[38] = "【结局38:荣誉牺牲】你成功保护了林老爷和所有线索,自己却因伤势过重去世。林老爷为你修建了一座墓碑,每年都会去祭拜你。"; end_descriptions[39] = "【结局39:无名牺牲】你死后,没有人知道你的事迹,林老爷和女人为了躲避追杀,选择隐姓埋名,你的名字从此被遗忘在历史的长河中。"; end_descriptions[40] = "【结局40:双重牺牲】你和赵武都身受重伤,在临死前,你们互相道出了自己的苦衷。最终,两人都死在了山庄的地下室里,成为了永恒的秘密。";

    // 41-60:真相类结局(揭露不同程度的真相,结果不同) end_descriptions[41] = "【结局41:揭露全部真相】你带着完整的线索和证人,将林老爷和赵武的罪行全部揭露,两人都受到了法律的严惩,山庄的秘密也公之于众。"; end_descriptions[42] = "【结局42:揭露部分真相】你只找到了部分线索,只能揭露赵武的罪行,林老爷的秘密则永远被掩盖,他从此过上了逍遥自在的生活。"; end_descriptions[43] = "【结局43:揭露虚假真相】你被林老爷欺骗,将虚假的线索交给警方,赵武成为了替罪羊,林老爷则霸占了山庄的所有财产。"; end_descriptions[44] = "【结局44:自我揭露真相】你在临死前,将自己记录的真相刻在墙上。多年后,有人发现了这面墙,山庄的秘密才得以重见天日。"; end_descriptions[45] = "【结局45:通过媒体揭露真相】你将真相告诉了媒体,媒体对其进行了大肆报道。赵武和林老爷成为了人人喊打的过街老鼠,最终被迫自首。"; end_descriptions[46] = "【结局46:私下揭露真相】你没有将真相公之于众,而是私下告诉了林老爷的家人。林老爷的家人为他举办了葬礼,然后将赵武告上了法庭。"; end_descriptions[47] = "【结局47:遗憾揭露真相】你成功揭露了所有真相,但林老爷和女人都已经去世,再也无法看到正义得到伸张的那一刻。"; end_descriptions[48] = "【结局48:惊险揭露真相】你在赵武的追杀下,一路逃亡,最终在警局门口将真相和盘托出。赵武当场被警方抓获,无法再对你下手。"; end_descriptions[49] = "【结局49:机智揭露真相】你将真相藏在一本小说中,以小说的形式将其公之于众。人们都以为是虚构的故事,只有你知道,这是真实发生的事情。"; end_descriptions[50] = "【结局50:被迫揭露真相】你被赵武抓住,在严刑拷打下,被迫说出了真相。但赵武担心你泄露更多信息,最终还是将你杀害。"; end_descriptions[51] = "【结局51:荣耀揭露真相】你因揭露山庄的秘密,成为了当地的名人,被邀请参加各种访谈节目,你的侦探事业也达到了顶峰。"; end_descriptions[52] = "【结局52:低调揭露真相】你揭露真相后,拒绝了所有的荣誉和奖励,选择默默离开,继续过着自己的平淡生活。"; end_descriptions[53] = "【结局53:恐惧揭露真相】你虽然揭露了真相,但也因此受到了赵武同伙的威胁。你从此过上了提心吊胆的生活,不敢再轻易相信任何人。"; end_descriptions[54] = "【结局54:愧疚揭露真相】你为了揭露真相,不惜牺牲了女人的性命。虽然最终正义得到了伸张,但你余生都活在愧疚之中。"; end_descriptions[55] = "【结局55:理智揭露真相】你冷静地分析所有线索,制定了详细的计划,最终一步步将真相揭露,没有造成任何人员伤亡。"; end_descriptions[56] = "【结局56:鲁莽揭露真相】你没有制定任何计划,就直接上门找赵武对质,最终被赵武杀害,真相也随之被掩盖。"; end_descriptions[57] = "【结局57:共情揭露真相】你因为同情女人的遭遇,下定决心揭露所有真相。你花费了数年时间,终于将赵武和林老爷绳之以法。"; end_descriptions[58] = "【结局58:谨慎揭露真相】你提前收集了所有证据,并联系了警方。在警方的协助下,你成功揭露了真相,将赵武和林老爷一网打尽。"; end_descriptions[59] = "【结局59:神秘揭露真相】一股神秘力量帮助你找到了所有线索,你轻松地揭露了真相。但这股神秘力量的身份,你永远也无法得知。"; end_descriptions[60] = "【结局60:永恒揭露真相】你将真相刻在一块石碑上,埋在山庄的门口。多年后,山庄被开发成旅游景点,石碑被人发现,真相从此永远流传。";

    // 61-80:黑化/堕落类结局(自身或他人黑化,结果不同) end_descriptions[61] = "【结局61:侦探黑化】你发现山庄的财产数额巨大,便动了贪念。你杀害了赵武、林老爷和女人,霸占了所有财产,从此成为了一名黑道大佬。"; end_descriptions[62] = "【结局62:被迫黑化】你被警方诬陷,成为了山庄案件的替罪羊。你被迫走上犯罪道路,从此开始了对警方的报复。"; end_descriptions[63] = "【结局63:愧疚黑化】你因为没能保护好女人和林老爷,内心充满了愧疚。你开始变得极端,只要是有罪的人,你都会毫不犹豫地将其杀害。"; end_descriptions[64] = "【结局64:权力黑化】你利用山庄的秘密,威胁林老爷和赵武,成为了他们的幕后操控者。你从此掌握了巨大的权力,呼风唤雨。"; end_descriptions[65] = "【结局65:金钱黑化】你接受了林老爷的贿赂,帮他掩盖了所有真相。你拿着这笔钱,过上了奢侈的生活,但永远也无法心安理得。"; end_descriptions[66] = "【结局66:恐惧黑化】你被山庄的恐怖经历吓破了胆,开始变得冷血无情。你不再相信任何人,只要有人威胁到你,你就会将其除掉。"; end_descriptions[67] = "【结局67:女人黑化】女人为了给姐姐复仇,变得极端疯狂。她杀害了林老爷和赵武,然后也将你杀害,最终自己也选择了自杀。"; end_descriptions[68] = "【结局68:林老爷黑化】林老爷其实没有被囚禁,他才是幕后真凶。他利用你和赵武的争斗,坐收渔翁之利,最终霸占了所有财产。"; end_descriptions[69] = "【结局69:赵武黑化】赵武没有被抓获,他逃了出去,然后开始疯狂报复你。你从此过上了颠沛流离的生活,永远无法摆脱他的追杀。"; end_descriptions[70] = "【结局70:全员黑化】你、赵武、林老爷和女人,都因为山庄的秘密而变得黑化。你们互相算计,互相残杀,最终没有一个人能活下来。"; end_descriptions[71] = "【结局71:轻度黑化】你为了生存,说了一些善意的谎言,掩盖了部分真相。你虽然活了下来,但内心始终有一道无法抹去的伤疤。"; end_descriptions[72] = "【结局72:重度黑化】你彻底抛弃了自己的良知,为了达到目的,不择手段。你杀害了所有知道真相的人,从此成为了一个冷血的杀手。"; end_descriptions[73] = "【结局73:短暂黑化】你在一时冲动下,黑化杀害了赵武。但事后你非常后悔,选择了向警方自首,接受法律的制裁。"; end_descriptions[74] = "【结局74:伪装黑化】你假装黑化,加入赵武的团伙,然后暗中收集证据,最终将他们一网打尽。你也因此付出了巨大的代价。"; end_descriptions[75] = "【结局75:被逼黑化】你和你的家人被赵武威胁,为了保护家人,你不得不选择黑化,帮赵武掩盖真相,做一些伤天害理的事情。"; end_descriptions[76] = "【结局76:利益黑化】你和赵武达成合作,一起霸占山庄的财产。你们表面上是合作伙伴,暗地里却互相提防,最终还是会自相残杀。"; end_descriptions[77] = "【结局77:情感黑化】你爱上了女人,但女人却被赵武杀害。你为了给女人报仇,变得极端疯狂,开始了无差别的报复行动。"; end_descriptions[78] = "【结局78:理智黑化】你冷静地分析了所有利弊,认为黑化是唯一的生存之道。你从此变得冷酷无情,但却能在残酷的世界中活得很好。"; end_descriptions[79] = "【结局79:神秘黑化】一股神秘力量控制了你的心智,让你变得黑化。你杀害了所有知道真相的人,然后成为了这股神秘力量的傀儡。"; end_descriptions[80] = "【结局80:永恒黑化】你永远活在山庄的阴影中,内心充满了黑暗。你再也无法找回曾经的自己,只能在黑暗中不断沉沦,直到生命的尽头。";

    // 81-100:神秘/超自然类结局(涉及超自然力量,结果不同) end_descriptions[81] = "【结局81:山庄诅咒】你发现雾影山庄被下了诅咒,所有进入山庄的人都无法活着离开。你最终也被诅咒吞噬,成为了山庄的一部分。"; end_descriptions[82] = "【结局82:女鬼救赎】山庄女主人的鬼魂出现,她没有伤害你,反而帮你逃离了山庄,并消除了你关于山庄的所有痛苦记忆。"; end_descriptions[83] = "【结局83:女鬼索命】山庄女主人的鬼魂认为你是赵武的同伙,对你展开了追杀。你最终被女鬼杀害,成为了她的又一个牺牲品。"; end_descriptions[84] = "【结局84:时空穿越】你在山庄的阁楼里,意外触发了时空穿越装置,回到了十年前。你试图阻止女主人的死亡,却发现一切都是命中注定。"; end_descriptions[85] = "【结局85:平行世界】你逃离山庄后,发现自己来到了一个平行世界。在这个世界里,林老爷没有失踪,女主人也没有死亡,一切都是那么美好。"; end_descriptions[86] = "【结局86:神秘救援】在你即将被赵武杀害的时候,一群神秘人出现,将你救走。他们告诉你,他们是专门处理超自然事件的组织。"; end_descriptions[87] = "【结局87:获得超能力】你在山庄里,意外获得了预知未来的超能力。你利用这个能力,成功逃离山庄,并成为了一名拯救世界的英雄。"; end_descriptions[88] = "【结局88:变成鬼魂】你被赵武杀害后,灵魂无法离开山庄,只能成为一名孤魂野鬼,永远徘徊在山庄的各个角落。"; end_descriptions[89] = "【结局89:解除诅咒】你找到了解除山庄诅咒的方法,成功将女主人的鬼魂超度。山庄从此恢复平静,再也没有怪事发生。"; end_descriptions[90] = "【结局90:被诅咒附身】你被山庄的诅咒附身,从此变得半人半鬼。你既无法活着离开山庄,也无法彻底死去,只能永远被困在这里。"; end_descriptions[91] = "【结局91:神秘契约】你与山庄的女主人签订了契约,用自己的十年寿命换取逃离山庄的机会。你成功逃离,但十年后,你还是会被召回山庄。"; end_descriptions[92] = "【结局92:超自然目击】你在山庄里,目击了一场超自然事件,看到了外星人造访地球的证据。你试图将这个证据公之于众,却没有人相信你。"; end_descriptions[93] = "【结局93:神秘消失】你在调查山庄的过程中,突然神秘消失。警方对你展开了大规模的搜索,却始终没有找到你的任何踪迹。"; end_descriptions[94] = "【结局94:鬼魂合作】你与山庄女主人的鬼魂达成合作,帮她复仇,她则帮你获得山庄的财产。你们联手将赵武和林老爷杀害,达成了各自的目的。"; end_descriptions[95] = "【结局95:时空循环】你被困在了一个时空循环中,每天都在重复进入山庄的那一天。你尝试了各种方法,却始终无法打破这个循环。"; end_descriptions[96] = "【结局96:超自然保护】一股超自然力量一直在暗中保护你,帮你化解了各种危险。你成功逃离山庄,却永远不知道这股力量的来源。"; end_descriptions[97] = "【结局97:成为新的山庄主人】你解除了山庄的诅咒,成为了新的山庄主人。你在这里过上了平静的生活,守护着山庄的秘密。"; end_descriptions[98] = "【结局98:与鬼魂为伴】你选择留在山庄,与女主人的鬼魂为伴。你们互相陪伴,不再感到孤独,山庄也从此变得温暖起来。"; end_descriptions[99] = "【结局99:超自然真相】你发现山庄的失踪案其实是外星人人为的,他们将林老爷抓走,进行外星实验。你最终也被外星人抓走,再也没有回来。"; end_descriptions[100] = "【结局100:终极解脱】你在山庄里,找到了人生的真谛,放下了所有的执念。你选择自我了断,灵魂得到了终极解脱,再也不受世俗的束缚。";

    return end_descriptions[end_num];

    }
    
    // 游戏结束流程
    void game_over() {
    print_story("======================================= 剧情结束 =======================================");
    int end_num = calculate_end_number();
    string end_desc = get_end_description(end_num);
    print_story(end_desc);
    print_story("你的结局编号:" + to_string(end_num) + "/100");
    print_story("=======================================================================================");
    game_running = false;
    }
    
    // 游戏主循环
    void game_loop() {
    print_story("欢迎进入悬疑剧情选择类游戏【雾影山庄】");
    print_story("游戏规则:在每个剧情节点做出你的选择,你的选择将影响隐藏属性和最终结局");
    print_story("游戏共有100种不同结局,看看你能触发哪一种!");
    print_story("======================================= 游戏开始 =======================================");
    cout << endl;
    

    while (game_running) { switch (story_stage) { case 0: story_stage_0(); break; case 1: story_stage_1(); break; case 2: story_stage_2(); break; case 3: story_stage_3(); break; case 4: game_over(); break; default: game_over(); break; } }

    }
    
    // 主函数
    int main() {
    game_loop();
    return 0;
    }
    
    #include <iostream>
    #include <string>
    #include <vector>
    #include <algorithm>
    
    // 兼容C++11,关闭Windows安全警告
    #pragma warning(disable: 4996)
    
    using namespace std;
    
    // 简化版游戏核心属性(仅保留2个关键隐藏属性)
    struct GameAttributes {
    int sanity;  // 理智(0-10):影响精神状态和结局走向
    int clue;    // 线索(0-10):决定解谜完整度,影响真相类结局
    

    // C++11 构造函数初始化 GameAttributes() : sanity(5), clue(5) {}

    };
    
    // 简化版关键选择标记(仅保留2个核心标记)
    struct ChoiceFlags {
    bool trust_npc;      // 是否信任神秘保镖赵武
    bool save_stranger;  // 是否拯救陌生受伤女人
    

    ChoiceFlags() : trust_npc(false), save_stranger(false) {}

    };
    
    // 游戏全局状态
    GameAttributes player_attr;
    ChoiceFlags choice_flags;
    int story_stage = 0;       // 剧情阶段(0-3,对应3个核心选择节点+结局阶段)
    bool game_running = true;
    
    // 属性修改函数(限制数值在0-10之间)
    void modify_attribute(string attr_name, int value) {
    if (attr_name == "sanity") {
    player_attr.sanity += value;
    player_attr.sanity = max(0, min(10, player_attr.sanity));
    } else if (attr_name == "clue") {
    player_attr.clue += value;
    player_attr.clue = max(0, min(10, player_attr.clue));
    }
    }
    
    // 剧情打印函数(营造阅读节奏)
    void print_story(const string& content) {
    for (char c : content) { // C++11 范围for循环
    cout << c;
    // 句末标点简单延时,增强沉浸感
    if (c == '.' || c == '!' || c == '?') {
    for (int i = 0; i < 50000000; i++);
    }
    }
    cout << endl << endl;
    }
    
    // 阶段0:游戏开局 + 第一个核心选择(山庄入口)
    void story_stage_0() {
    print_story("【悬疑游戏:雾影山庄(精简版)】");
    print_story("你是一名私家侦探,受雇调查雾影山庄林老爷离奇失踪案。");
    print_story("出租车停在山庄大门前,门虚掩着,弥漫着潮湿霉味,司机催促你尽快下车,不愿多待。");
    print_story("你的第一个选择:");
    cout << "1. 直接推门进入山庄,快速展开调查" << endl;
    cout << "2. 在门口观察片刻,收集周边痕迹后再进入" << endl;
    cout << "请输入你的选择(1/2):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你直接推开大门,木门发出刺耳的“吱呀”声,山庄内一片昏暗,寒意扑面而来。"); modify_attribute("sanity", -1); // 贸然进入降低理智 break; case 2: print_story("你蹲在围墙边观察,发现墙角有新鲜脚印和带血银针,提前知晓山庄暗藏危险。"); modify_attribute("clue", 2); // 观察收集线索 modify_attribute("sanity", 1); // 谨慎行为提升理智 break; default: print_story("你犹豫不决,最终还是硬着头皮推开大门,浪费了些许时间。"); modify_attribute("sanity", 0); break; }

    story_stage = 1;

    }
    
    // 阶段1:山庄大厅 + 第二个核心选择(面对神秘保镖)
    void story_stage_1() {
    print_story("你进入山庄大厅,煤油灯随风晃动,墙上影子忽明忽暗。");
    print_story("一名脸上带刀疤的黑衣男人转身看来,自称林老爷的保镖赵武,劝你尽快离开,说山庄不安全。");
    print_story("你注意到他袖口沾着泥土,而大厅地板一尘不染,楼梯口有女人身影一闪而过。");
    print_story("你的第二个选择:");
    cout << "1. 信任赵武,听从建议立刻离开山庄" << endl;
    cout << "2. 质疑赵武,追问泥土来源和女人去向" << endl;
    cout << "3. 假装信任,暗中打听林老爷行踪" << endl;
    cout << "请输入你的选择(1/2/3):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你选择信任赵武,跟着他走出山庄。回头望去,山庄在雾气中像一头蛰伏的巨兽。"); choice_flags.trust_npc = true; modify_attribute("sanity", 1); modify_attribute("clue", -1); // 提前离开丢失线索 break; case 2: print_story("你冷声质疑赵武的疑点,他眼神瞬间冰冷,身体紧绷,显然有所隐瞒。"); choice_flags.trust_npc = false; modify_attribute("clue", 2); modify_attribute("sanity", 0); break; case 3: print_story("你假装信任赵武,在他讲述时,发现他提到“阁楼”二字时眼神躲闪,暗藏玄机。"); choice_flags.trust_npc = false; modify_attribute("clue", 3); modify_attribute("sanity", 1); break; default: print_story("你愣在原地,赵武再次催促,你半信半疑地走到大厅门口,最终还是决定留下调查。"); choice_flags.trust_npc = true; modify_attribute("clue", 1); break; }

    story_stage = 2;

    }
    
    // 阶段2:阁楼线索 + 第三个核心选择(是否拯救陌生女人)
    void story_stage_2() {
    print_story("无论你是否信任赵武,最终都找到了进入阁楼的方法。");
    print_story("阁楼里布满灰尘,木箱上贴着林老爷和十年前失踪女主人的合影,木箱旁躺着一名浑身是伤的陌生女人,气息微弱地向你求救。");
    print_story("楼下传来赵武的脚步声,越来越近,你发现木箱里有林老爷的完整遗书和一瓶解药。");
    print_story("你的第三个选择:");
    cout << "1. 优先拯救女人,给她注射解药后再想办法逃离" << endl;
    cout << "2. 放弃女人,拿走遗书独自逃离阁楼" << endl;
    cout << "请输入你的选择(1/2):";
    

    int choice; cin >> choice; cout << endl;

    switch (choice) { case 1: print_story("你立刻给女人注射解药,她气息平稳后告诉你:赵武想霸占财产,林老爷被囚禁在地下室!此时,赵武冲上了阁楼。"); choice_flags.save_stranger = true; modify_attribute("sanity", 2); // 救人提升理智 modify_attribute("clue", 1); // 女人提供线索 break; case 2: print_story("你咬咬牙,拿起遗书从后窗跳下,落地崴脚但成功脱身,女人的呼救声在你身后渐渐消失。"); choice_flags.save_stranger = false; modify_attribute("sanity", -2); // 见死不救降低理智 modify_attribute("clue", 1); // 拿到遗书获得线索 break; default: print_story("你犹豫不决,赵武已冲上阁楼,将你和女人团团围住,陷入绝境。"); choice_flags.save_stranger = true; modify_attribute("sanity", -1); break; }

    story_stage = 3;

    }
    
    // 核心函数:计算结局编号(1-10)
    int calculate_end_number() {
    // 1. 属性总分(0-20)映射为0-5(6个档位)
    int total_attr = player_attr.sanity + player_attr.clue;
    int attr_grade = min(5, max(0, total_attr * 5 / 20));
    

    // 2. 选择标记得分(0-3)(2个flag组合4种情况,映射0-3) int flag_grade = 0; if (choice_flags.trust_npc) flag_grade += 2; if (choice_flags.save_stranger) flag_grade += 1; flag_grade = min(3, max(0, flag_grade));

    // 3. 计算结局编号(1-10),确保不超出范围 int end_number = attr_grade + flag_grade + 1; end_number = min(10, max(1, end_number));

    return end_number;

    }
    
    // 结局描述函数:返回10种精简版结局
    string get_end_description(int end_num) {
    vector<string> end_descriptions(11); // 索引1-10
    

    // 逃生类结局(1-3) end_descriptions[1] = "【结局1:狼狈逃生(最差)】你独自逃离山庄,线索丢失,也未救人,从此夜夜被噩梦缠身,不敢再提雾影山庄。"; end_descriptions[2] = "【结局2:普通逃生】你带着残缺线索逃离,赵武逍遥法外,你因证据不足,无法为林老爷伸冤,侦探声名受损。"; end_descriptions[3] = "【结局3:圆满逃生(最佳)】你带着女人和林老爷成功逃离,警方根据线索抓捕赵武,正义得到伸张,你成为知名侦探。";

    // 真相类结局(4-6) end_descriptions[4] = "【结局4:部分真相】你只揭露了赵武的罪行,林老爷的隐秘(杀害女主人)被掩盖,他从此隐姓埋名,安享晚年。"; end_descriptions[5] = "【结局5:完整真相】你带着遗书和女人的证词,将林老爷(杀妻)和赵武(谋财)的罪行全部揭露,两人均被严惩。"; end_descriptions[6] = "【结局6:虚假真相】你被林老爷欺骗,将虚假线索交给警方,赵武成为替罪羊,林老爷霸占山庄财产,逍遥法外。";

    // 牺牲类结局(7-8) end_descriptions[7] = "【结局7:自我牺牲】你为保护女人和林老爷,主动吸引赵武注意力,最终被杀害,他们成功逃生,你的事迹被流传后世。"; end_descriptions[8] = "【结局8:他人牺牲】女人为掩护你和林老爷,与赵武同归于尽,你带着林老爷逃离,余生都在缅怀这个勇敢的女人。";

    // 超自然类结局(9-10) end_descriptions[9] = "【结局9:女鬼救赎】山庄女主人鬼魂出现,帮你击退赵武,消除了你关于山庄的痛苦记忆,你从此过上平淡生活。"; end_descriptions[10] = "【结局10:山庄诅咒】你发现山庄被女主人诅咒,所有知晓真相的人都无法离开,你最终被诅咒吞噬,成为山庄的一部分。";

    return end_descriptions[end_num];

    }
    
    // 游戏结束流程
    void game_over() {
    print_story("======================================= 剧情结束 =======================================");
    int end_num = calculate_end_number();
    string end_desc = get_end_description(end_num);
    print_story(end_desc);
    print_story("你的结局编号:" + to_string(end_num) + "/10");
    print_story("=======================================================================================");
    game_running = false;
    }
    
    // 游戏主循环
    void game_loop() {
    print_story("欢迎进入悬疑剧情选择类游戏【雾影山庄(精简版)】");
    print_story("游戏规则:每个剧情节点做出选择,影响隐藏属性和最终结局(共10种)");
    print_story("======================================= 游戏开始 =======================================");
    cout << endl;
    

    while (game_running) { switch (story_stage) { case 0: story_stage_0(); break; case 1: story_stage_1(); break; case 2: story_stage_2(); break; case 3: game_over(); break; default: game_over(); break; } }

    }
    
    // 主函数(程序入口)
    int main() {
    game_loop();
    return 0;
    }
    

    鼠标放在这里,会有好事情发生哦

    my洛谷团队

    TM的这人抄我主页,一模一样,连我名字都没改!!!

    
    
  • 通过的题目

  • 最近活动

    This person is lazy and didn't join any contests or homework.
  • 最近编写的题解

题目标签

聪明人游戏
2
贪心
1
深搜 广搜
1
广搜
1
大沥2021
1