GASTER特别版——第二部分(没完!)
2025-09-13 17:25:33
发布于:上海
                Sleep(2000);
                return false;
            }
            
            Sleep(1000);
        }
        else if (action == 4) {
            system("cls");
            Color(10);
            print_slow("--- " + p.Name + " 的状态 ---\n\n");
            Color(7);
            
            print_slow("HP: ");
            Color(12);
            print_slow(int_to_string(p.Health) + "/" + int_to_string(p.maxHealth) + "\n");
            
            Color(7);
            print_slow("攻击力: ");
            Color(12);
            print_slow(int_to_string(p.Damage + gaster_absorbed_attack) + 
                      (is_gaster ? " (基础: " + int_to_string(p.Damage) + " + 吸收: " + int_to_string(gaster_absorbed_attack) + ")" : "") + "\n");
            
            Color(7);
            print_slow("等级: ");
            Color(14);
            print_slow(int_to_string(p.level) + "\n");
            
            Color(7);
            print_slow("金币: ");
            Color(14);
            print_slow(int_to_string(p.Money) + "\n");
            
            Color(7);
            print_slow("闪避率: ");
            Color(12);
            print_slow(int_to_string(p.dodge) + "%\n");
            
            // Gaster显示吸收的怪物
            if (is_gaster && !absorbed_monsters.empty()) {
                Color(13);
                print_slow("吸收的灵魂: ");
                for (size_t i = 0; i < absorbed_monsters.size(); ++i) {
                    if (i > 0) print_slow(", ");
                    print_slow(absorbed_monsters[i]);
                }
                print_slow("\n");
                Color(7);
            }
            
            print_slow("\n输入任意键继续...");
            string temp;
            cin >> temp;
        }
        
        for (size_t i = 0; i < p.skills.size(); ++i) {
            if (p.skills[i].current_cool > 0) {
                p.skills[i].current_cool--;
            }
        }
        
        Sleep(1000);
    }
}
// 结局处理
void ending(Player& p) {
    if (game_complete) return;
    
    // Gaster专属结局
    if (is_gaster) {
        show_area_title();
        Color(13);
        print_slow("--- 虚空结局 ---\n\n");
        Color(7);
        
        print_slow("* 你吞噬了足够多的灵魂和力量...\n");
        print_slow("* 世界线在你手中开始扭曲...\n\n");
        
        print_slow("* 你的追随者们在一旁观望着...\n");
        print_slow("神秘声音: 一切都如你所愿,主人...\n");
        print_slow("神秘声音: 但要小心...力量越大,空虚就越深...\n\n");
        
        print_slow("* 你成为了时间线的掌控者...\n");
        print_slow("* 但永恒的孤独也将伴随你...\n\n");
        
        game_complete = true;
        
        print_slow("游戏结束。输入R重置游戏,其他键退出: ");
        char choice;
        cin >> choice;
        if (choice == 'R' || choice == 'r') {
            resets++;
            reset_used = true;
            game_complete = false;
            current_area = UNDERGROUND;
            
            // 重置Gaster相关状态
            is_gaster = (player_name == "GASTER" || player_name == "gaster" || player_name == "Gaster");
            absorbed_souls.clear();
            absorbed_monsters.clear();
            gaster_absorbed_attack = 0;
            gaster_followers_met = false;
            
            // 重置其他状态
            met_toriel = false;
            toriel_killed = false;
            toriel_spared = false;
            met_sans = false;
            met_papyrus = false;
            papyrus_killed = false;
            papyrus_spared = false;
            met_undyne = false;
            undyne_killed = false;
            undyne_spared = false;
            undyne_determined = false;
            sent_undyne_letter = false;
            met_alphys = false;
            alphys_neutral_ending = false;
            met_mtt = false;
            mtt_killed = false;
            mtt_spared = false;
            met_asgore = false;
            asgore_killed = false;
            asgore_spared = false;
            freed_monsters = false;
            true_lab_unlocked = is_gaster; // Gaster仍保持真实验室解锁
            entered_true_lab = false;
            seen_alphys_memories = false;
            fought_sans = false;
            sans_killed = false;
            met_flowey = false;
            flowey_betrayed = false;
            flowey_omega_fought = false;
            asriel_restored = false;
            chara_awakened = false;
            seen_asriel_memory = false;
            
            kill_count = 0;
            memset(area_kills, 0, sizeof(area_kills));
            true_pacifist = false;
            has_souls = false;
            route = 0;
            genocide_route = false;
            
            init_player(p, player_name);
        }
        else {
            exit(0);
        }
        return;
    }
    
    if (route == 4) {
        show_area_title();
        Color(10);
        print_slow("--- 真和平结局 ---\n\n");
        Color(7);
        
        print_slow("* 地下世界的屏障消失了...\n");
        print_slow("* 怪物们第一次看到了天空和太阳...\n\n");
        
        print_slow("Toriel: 孩子,谢谢你...为我们带来了自由...\n");
        print_slow("Papyrus: 人类!我们一起去看星星吧!\n");
        print_slow("Undyne: 哼...别以为这样我就承认你比我强了!\n");
        print_slow("Alphys: 我...我终于可以和大家一起...\n");
        print_slow("Mettaton: 是时候让地表世界见证我的魅力了!\n");
        print_slow("Asgore: 和平...终于到来了...\n");
        print_slow("Sans: 嘿,恭喜你啊,孩子...\n");
        
        print_slow("\n* 你看到一朵金色的小花在风中摇曳...\n");
        print_slow("* 仿佛在向你告别...\n\n");
        
        print_slow("'无论你选择留下还是回到人类世界...'\n");
        print_slow("'这段记忆将永远伴随着你...'\n");
        print_slow("'因为重要的不是你来自哪里...'\n");
        print_slow("'而是你选择成为什么样的人...'\n\n");
        
        game_complete = true;
    }
    else if (route == 2 && sans_killed && asgore_killed) {
        show_area_title();
        Color(12);
        print_slow("--- 屠杀结局 ---\n\n");
        Color(7);
        
        print_slow("* 你杀死了所有的怪物...\n");
        print_slow("* 地下世界只剩下尘埃和寂静...\n\n");
        
        print_slow("* 查拉的意识开始占据你的身体...\n");
        print_slow("Chara: 做得好...这才是真正的力量...\n");
        print_slow("Chara: 但这还不够...还有更多的世界需要净化...\n\n");
        
        print_slow("* 你感到灵魂正在被侵蚀...\n");
        print_slow("* 这就是你选择的道路...\n\n");
        
        chara_awakened = true;
        game_complete = true;
    }
    else if (route == 1) {
        show_area_title();
        Color(10);
        print_slow("--- 和平结局 ---\n\n");
        Color(7);
        
        print_slow("* 你和怪物们成为了朋友...\n");
        print_slow("* 虽然屏障还在,但你们找到了共存的方式...\n\n");
        
        print_slow("'和平需要不断的努力和理解...'\n");
        print_slow("'但只要大家心中有爱...'\n");
        print_slow("'总有一天,人类和怪物能够真正和平共处...'\n\n");
        
        game_complete = true;
    }
    else if (route == 3) {
        show_area_title();
        Color(13);
        print_slow("--- 伪善结局 ---\n\n");
        Color(7);
        
        print_slow("* 你假装饶恕了所有怪物...\n");
        print_slow("* 但他们不知道你曾经犯下的罪行...\n\n");
        
        print_slow("Sans: ...你以为我看不出吗...\n");
        print_slow("Sans: 你的笑容背后...藏着和那个孩子一样的眼神...\n\n");
        
        print_slow("* 怪物们庆祝着和平,却不知道这只是暂时的...\n");
        print_slow("* 你的决心中,藏着黑暗的秘密...\n\n");
        
        game_complete = true;
    }
    else if (route == 0 && met_asgore) {
        show_area_title();
        Color(14);
        print_slow("--- 中立结局 ---\n\n");
        Color(7);
        
        print_slow("* 你离开了地下世界...\n");
        print_slow("* 但有些事情,永远改变了...\n\n");
        
        if (toriel_killed) print_slow("* Toriel不在了,废墟变得寂静...\n");
        if (papyrus_killed) print_slow("* Sans总是独自坐在哨站旁,似乎在等待什么...\n");
        if (undyne_killed) print_slow("* 皇家守卫失去了他们的队长...\n");
        if (mtt_killed) print_slow("* 地下世界失去了他们的超级明星...\n");
        if (asgore_killed) print_slow("* 怪物们失去了他们的国王...\n");
        
        print_slow("\n'你的选择,塑造了这个世界的未来...'\n");
        print_slow("'也许有一天,你会回来改变这一切...'\n\n");
        
        game_complete = true;
    }
    
    if (game_complete) {
        print_slow("游戏结束。输入R重置游戏,其他键退出: ");
        char choice;
        cin >> choice;
        if (choice == 'R' || choice == 'r') {
            resets++;
            reset_used = true;
            game_complete = false;
            current_area = UNDERGROUND;
            
            bool prev_genocide = genocide_route;
            
            // 重置时清空状态
            met_toriel = false;
            toriel_killed = false;
            toriel_spared = false;
            met_sans = false;
            met_papyrus = false;
            papyrus_killed = false;
            papyrus_spared = false;
            met_undyne = false;
            undyne_killed = false;
            undyne_spared = false;
            undyne_determined = false;
            sent_undyne_letter = false;
            met_alphys = false;
            alphys_neutral_ending = false;
            met_mtt = false;
            mtt_killed = false;
            mtt_spared = false;
            met_asgore = false;
            asgore_killed = false;
            asgore_spared = false;
            freed_monsters = false;
            true_lab_unlocked = false;
            entered_true_lab = false;
            seen_alphys_memories = false;
            fought_sans = false;
            sans_killed = false;
            met_flowey = false;
            flowey_betrayed = false;
            flowey_omega_fought = false;
            asriel_restored = false;
            chara_awakened = false;
            seen_asriel_memory = false;
            
            kill_count = 0;
            memset(area_kills, 0, sizeof(area_kills));
            true_pacifist = false;
            has_souls = false;
            route = 0;
            
            init_player(p, player_name);
            
            if (prev_genocide) {
                genocide_route = true;
            } else {
                genocide_route = false;
            }
        }
        else {
            exit(0);
        }
    }
}
// 战斗选择菜单
void battle_selector_menu(Player& p) {
    system("cls");
    Color(13);
    print_slow("--- 战斗选择器 ---\n\n");
    Color(7);
    
    // 筛选所有可选择的战斗(包括BOSS战和普通战斗)
    vector<Monster> selectable_battles;
    for (const auto& monster : all_monsters) {
        // 排除重复的战斗ID
        bool is_duplicate = false;
        for (const auto& battle : selectable_battles) {
            if (battle.battle_id == monster.battle_id) {
                is_duplicate = true;
                break;
            }
        }
        if (!is_duplicate) {
            selectable_battles.push_back(monster);
        }
    }
    
    // 显示战斗列表
    print_slow("请选择要触发的战斗:\n");
    for (size_t i = 0; i < selectable_battles.size(); ++i) {
        const auto& battle = selectable_battles[i];
        string boss_label = battle.is_boss ? " [BOSS]" : "";
        print_slow(int_to_string(i + 1) + ". " + battle.name + boss_label + "\n");
    }
    print_slow("\n0. 返回\n");
    print_slow("请选择: ");
    
    int choice;
    cin >> choice;
    
    if (choice == 0) {
        return;
    }
    
    if (choice < 1 || choice > (int)selectable_battles.size()) {
        print_slow("无效的选择!\n");
        Sleep(1000);
        return;
    }
    
    // 复制选中的怪物(避免修改原数据)
    Monster selected_battle = selectable_battles[choice - 1];
    
    // 特殊处理:如果是Sans战,自动切换到审判长廊
    if (selected_battle.name == "审判者Sans") {
        current_area = JUDGMENT_HALL;
        fought_sans = true;
    }
    // 特殊处理:如果是Asriel战,自动切换到绝对领域
    else if (selected_battle.name == "真神艾斯利而") {
        current_area = ASRIEL_AREA;
        asriel_restored = true;
    }
    // 其他战斗自动切换到对应区域
    else {
        current_area = selected_battle.area;
    }
    
    print_slow("即将开始与 " + selected_battle.name + " 的战斗...\n");
    Sleep(1000);
    
    // 开始战斗
    battle(p, selected_battle);
}
// 作者模式菜单
void developer_mode_menu(Player& p) {
    while (true) {
        system("cls");
        Color(13);
        print_slow("--- 作者模式 (调试菜单) ---\n\n");
        Color(7);
        
        print_slow("1. 修改玩家属性\n");
        print_slow("2. 快速移动到指定区域\n");
        print_slow("3. 解锁所有物品\n");
        print_slow("4. 解锁所有技能\n");
        print_slow("5. 触发指定剧情\n");
        print_slow("6. 选择任意战斗\n");
        print_slow("7. 直接解锁指定结局\n");
        print_slow("8. 切换作者模式状态 (当前: 开启)\n");
        print_slow("9. 返回游戏\n");
        print_slow("请选择功能: ");
        
        int choice;
        cin >> choice;
        
        switch (choice) {
            case 1: {
                system("cls");
                print_slow("--- 修改玩家属性 ---\n\n");
                print_slow("当前属性:\n");
                print_slow("HP: " + int_to_string(p.Health) + "/" + int_to_string(p.maxHealth) + "\n");
                print_slow("攻击力: " + int_to_string(p.Damage) + "\n");
                print_slow("等级: " + int_to_string(p.level) + "\n");
                print_slow("金币: " + int_to_string(p.Money) + "\n");
                print_slow("闪避率: " + int_to_string(p.dodge) + "%\n\n");
                
                print_slow("1. 修改HP\n");
                print_slow("2. 修改攻击力\n");
                print_slow("3. 修改等级\n");
                print_slow("4. 修改金币\n");
                print_slow("5. 修改闪避率\n");
                print_slow("6. 返回\n");
                print_slow("请选择: ");
                
                int prop_choice;
                cin >> prop_choice;
                int value;
                
                if (prop_choice == 6) break;
                
                print_slow("输入新值: ");
                cin >> value;
                
                switch (prop_choice) {
                    case 1:
                        p.Health = value;
                        p.maxHealth = value;
                        print_slow("HP已修改!\n");
                        break;
                    case 2:
                        p.Damage = value;
                        print_slow("攻击力已修改!\n");
                        break;
                    case 3:
                        p.level = value;
                        check_level_up(p);
                        print_slow("等级已修改!\n");
                        break;
                    case 4:
                        p.Money = value;
                        print_slow("金币已修改!\n");
                        break;
                    case 5:
                        p.dodge = value;
                        print_slow("闪避率已修改!\n");
                        break;
                    default:
                        print_slow("无效选择!\n");
                }
                Sleep(1000);
                break;
            }
            case 2: {
                system("cls");
                print_slow("--- 快速移动 ---\n\n");
                print_slow("1. 废墟\n");
                print_slow("2. 雪町\n");
                print_slow("3. 瀑布\n");
                print_slow("4. 热域\n");
                print_slow("5. 核心\n");
                print_slow("6. 新家\n");
                print_slow("7. 审判长廊\n");
                print_slow("8. 真实验室\n");
                print_slow("9. 绝对领域\n");
                print_slow("请选择区域: ");
                
                int area_choice;
                cin >> area_choice;
                
                switch (area_choice) {
                    case 1: current_area = UNDERGROUND; break;
                    case 2: current_area = SNOWDIN; break;
                    case 3: current_area = WATERFALL; break;
                    case 4: current_area = HOTLAND; break;
                    case 5: current_area = CORE; break;
                    case 6: current_area = NEW_HOME; break;
                    case 7: current_area = JUDGMENT_HALL; break;
                    case 8: current_area = TRUE_LAB; break;
                    case 9: current_area = ASRIEL_AREA; break;
                    default: print_slow("无效区域!\n"); Sleep(1000); return;
                }
                
                // 自动满足区域进入条件
                if (area_choice >= 2) met_toriel = true;
                if (area_choice >= 3) met_papyrus = true;
                if (area_choice >= 4) met_undyne = true;
                if (area_choice >= 5) met_mtt = true;
                if (area_choice >= 6) met_asgore = true;
                
                print_slow("已移动到指定区域!\n");
                Sleep(1000);
                break;
            }
            case 3: {
                p.inventory.clear();
                for (size_t i = 0; i < item_lib.size(); ++i) {
                    p.inventory.push_back(item_lib[i]);
                }
                print_slow("已解锁所有物品!\n");
                Sleep(1000);
                break;
            }
            case 4: {
                for (size_t i = 0; i < p.skills.size(); ++i) {
                    p.skills[i].is_unlocked = true;
                    p.skills[i].current_cool = 0;
                }
                print_slow("已解锁所有技能!\n");
                Sleep(1000);
                break;
            }
            case 5: {
                system("cls");
                print_slow("--- 触发剧情 ---\n\n");
                print_slow("1. 遇见Toriel\n");
                print_slow("2. 遇见Sans\n");
                print_slow("3. 遇见Papyrus\n");
                print_slow("4. 遇见Undyne\n");
                print_slow("5. 遇见Alphys\n");
                print_slow("6. 遇见Mettaton\n");
                print_slow("7. 遇见Asgore\n");
                print_slow("8. 触发Flowey背叛\n");
                print_slow("请选择剧情: ");
                
                int event_choice;
                cin >> event_choice;
                
                switch (event_choice) {
                    case 1: met_toriel = true; print_slow("已触发遇见Toriel剧情!\n"); break;
                    case 2: met_sans = true; print_slow("已触发遇见Sans剧情!\n"); break;
                    case 3: met_papyrus = true; print_slow("已触发遇见Papyrus剧情!\n"); break;
                    case 4: met_undyne = true; print_slow("已触发遇见Undyne剧情!\n"); break;
                    case 5: met_alphys = true; print_slow("已触发遇见Alphys剧情!\n"); break;
                    case 6: met_mtt = true; print_slow("已触发遇见Mettaton剧情!\n"); break;
                    case 7: met_asgore = true; print_slow("已触发遇见Asgore剧情!\n"); break;
                    case 8: flowey_betrayed = true; print_slow("已触发Flowey背叛剧情!\n"); break;
                    default: print_slow("无效剧情!\n");
                }
                Sleep(1000);
                break;
            }
            case 6:
                battle_selector_menu(p);
                return;
            case 7: {
                system("cls");
                print_slow("--- 解锁结局 ---\n\n");
                print_slow("1. 中立结局\n");
                print_slow("2. 和平结局\n");
                print_slow("3. 屠杀结局\n");
                print_slow("4. 伪善结局\n");
                print_slow("5. 真和平结局\n");
                if (is_gaster) {
                    print_slow("6. 虚空结局\n");
                }
                print_slow("请选择结局: ");
                
                int ending_choice;
                cin >> ending_choice;
                
                // 满足对应结局的必要条件
                met_asgore = true;
                switch (ending_choice) {
                    case 1:
                        route = 0;
                        break;
                    case 2:
                        route = 1;
                        toriel_spared = papyrus_spared = undyne_spared = mtt_spared = asgore_spared = true;
                        break;
                    case 3:
                        route = 2;
                        toriel_killed = papyrus_killed = undyne_killed = mtt_killed = asgore_killed = sans_killed = true;
                        kill_count = 150;
                        genocide_route = true;
                        break;
                    case 4:
                        route = 3;
                        toriel_spared = papyrus_spared = undyne_spared = mtt_spared = asgore_spared = true;
                        reset_used = true;
                        genocide_route = true;
                        break;
                    case 5:
                        route = 4;
                        toriel_spared = papyrus_spared = undyne_spared = mtt_spared = asgore_spared = true;
                        true_lab_unlocked = entered_true_lab = seen_alphys_memories = true;
                        freed_monsters = asriel_restored = true;
                        true_pacifist = true;
                        break;
                    case 6:
                        if (is_gaster) {
                            game_complete = true;
                            ending(p);
                            return;
                        }
                        // 否则继续到default
                    default:
                        print_slow("无效结局!\n");
                        Sleep(1000);
                        return;
                }
                
                print_slow("已解锁指定结局!\n");
                Sleep(1000);
                return;
            }
            case 8:
                developer_mode = false;
                print_slow("已关闭作者模式!\n");
                Sleep(1000);
                return;
            case 9:
                return;
            default:
                print_slow("无效选择!\n");
                Sleep(1000);
        }
    }
}
void start_one(string rest){
    system("cls");
    Color(13);
    print_slow("          开始界面");
    cout<<endl<<endl;
    Color(15);
    print_slow("按1重置              按2继续游戏");
    cout<<endl;
    print_slow(">>>>>>>>>>>>>");
    cin >> rest;
    
    if(rest=="1"){
        // 重置全局游戏状态变量(回到初始状态)
        game_complete = false;
        game_over = false;
        route = 0;  // 重置为中立路线
        genocide_route = false;
        true_pacifist = false;
        chara_awakened = false;
        asriel_restored = false;
        seen_asriel_memory = false;
        reset_used = true;  // 标记已使用重置
        resets++;  // 重置次数+1
        current_area = UNDERGROUND;  // 回到初始区域“废墟”
        
        // 重置Gaster相关状态
        absorbed_souls.clear();
        absorbed_monsters.clear();
        gaster_absorbed_attack = 0;
        gaster_followers_met = false;
        
        // 重置角色剧情标记(所有NPC相关状态清零)
        met_toriel = false;
        toriel_killed = false;
        toriel_spared = false;
        met_sans = false;
        met_papyrus = false;
        papyrus_killed = false;
        papyrus_spared = false;
        met_undyne = false;
        undyne_killed = false;
        undyne_spared = false;
        undyne_determined = false;
        sent_undyne_letter = false;
        met_alphys = false;
        alphys_neutral_ending = false;
        met_mtt = false;
        mtt_killed = false;
        mtt_spared = false;
        met_asgore = false;
        asgore_killed = false;
        asgore_spared = false;
        freed_monsters = false;
        true_lab_unlocked = is_gaster; // Gaster仍保持真实验室解锁
        entered_true_lab = false;
        seen_alphys_memories = false;
        fought_sans = false;
        sans_killed = false;
        met_flowey = false;
        flowey_betrayed = false;
        flowey_omega_fought = false;
        
        // 重置战斗与击杀计数(所有区域击杀数清零)
        kill_count = 0;
        memset(area_kills, 0, sizeof(area_kills));  // 每个区域的击杀数重置为0
        
        // 提示重置完成并返回主游戏循环
        system("cls");
        Color(10);
        print_slow("游戏已重置!回到初始状态...\n");
        Color(7);
        Sleep(1500);  // 等待1.5秒让玩家看到提示
        
    }else if(rest=="2"){
        // 继续游戏:直接返回主循环
        system("cls");
        Color(10);
        print_slow("继续当前游戏...\n");
        Color(7);
        Sleep(1000);
    }else{
        // 无效输入:提示并重新调用开始界面
        system("cls");
        Color(12);
        print_slow("无效选择!请重新输入...\n");
        Color(7);
        Sleep(1000);
        start_one(rest); 
    }
}
// 地图导航
void navigate_map(Player& p) {
    show_area_title();
    
    // Gaster角色特殊处理:一开始就能进入真实验室
    if (is_gaster && current_area == HOTLAND && !entered_true_lab) {
        current_area = TRUE_LAB;
        entered_true_lab = true;
    }
    
    flowey_event(p);
    undyne_letter_event(p);
    alphys_lab_event(p);
    mtt_hotel_event(p);
    trigger_judgment_hall(p);
    true_lab_event(p);
    string start;
    if (met_asgore && (asgore_killed || asgore_spared) && !game_complete) {
        ending(p);
        return;
    }
    
    // Gaster在雪町遇到Sans的特殊对话
    if (current_area == SNOWDIN && !met_sans) {
        show_area_title();
        print_slow("一个骷髅突然从灯柱后面跳了出来!\n\n");
        
        if (is_gaster) {
            Color(11);
            print_slow("Sans: 你...你是...\n");
            print_slow("Sans: 不...不可能...你应该已经...咳...消失了...\n");
            print_slow("Sans: 你怎么会...回到这里...\n\n");
            print_slow("Sans: 我...我以为你已经被...咳...抹去了存在...\n");
            print_slow("Sans: 时间线...开始不稳定了...\n\n");
            Color(7);
        } else {
            print_slow("Sans: heya. 你是人类,对吧?\n");
            print_slow("Sans: 我是Sans,骷髅Sans。那边那个是我兄弟Papyrus。\n");
            print_slow("Sans: 他一直想抓住一个人类...不过别担心,我不会告诉你在哪里可以找到他的。\n\n");
        }
        
        met_sans = true;
        
        print_slow("输入任意键继续...");
        string temp;
        cin >> temp;
        show_area_title();
    }
    
    print_slow("当前路线: ");
    if (route == 0) print_slow("中立\n\n");
    else if (route == 1) { Color(10); print_slow("和平\n\n"); Color(7); }
    else if (route == 2) { Color(12); print_slow("屠杀\n\n"); Color(7); }
    else if (route == 3) { Color(13); print_slow("伪善\n\n"); Color(7); }
    else if (route == 4) { Color(11); print_slow("真和平\n\n"); Color(7); }
    else if (is_gaster) { Color(13); print_slow("虚空\n\n"); Color(7); }
    
    print_slow("你想做什么?\n\n");
    print_slow("1. 探索区域 (可能遇到怪物)\n");
    print_slow("2. 前往商店\n");
    print_slow("3. 查看状态\n");
    print_slow("4. 使用物品\n");
    print_slow("5. 前往下一个区域\n");
    print_slow("6. 返回主菜单\n");
    // 作者模式:显示额外选项
    if (developer_mode) {
        Color(13);
        print_slow("7. 作者模式 (调试菜单)\n");
        Color(7);
        print_slow("8. 退出游戏\n");
    } else {
        print_slow("7. 退出游戏\n");
        // 添加作者模式密码输入
        print_slow("8. 输入密码 (开发者选项)\n");
    }
    
    print_slow("请选择: ");
    
    int choice;
    cin >> choice;
    
    // 处理作者模式相关选择
    if (developer_mode) {
        if (choice == 7) {
            developer_mode_menu(p);
            return;
        } else if (choice == 8) {
            print_slow("感谢游玩!\n");
            exit(0);
        }
    } else {
        if (choice == 8) {
            print_slow("请输入密码: ");
            string password;
            cin >> password;
            if (password == dev_password) {
                developer_mode = true;
                Color(13);
                print_slow("作者模式已开启!\n");
                Color(7);
                Sleep(1000);
                return;
            } else {
                print_slow("密码错误!\n");
                Sleep(1000);
                return;
            }
        } else if (choice == 7) {
            print_slow("感谢游玩!\n");
            exit(0);
        } else if(choice==6){
            start_one(start);
        } 
    }
    
    switch (choice) {
        case 1: {
            vector<Monster> possible_monsters;
            for (size_t i = 0; i < all_monsters.size(); ++i) {
                if (all_monsters[i].area == current_area) {
                    if (all_monsters[i].is_unique) {
                        if (all_monsters[i].name == "Toriel" && !met_toriel)
                            possible_monsters.push_back(all_monsters[i]);
                        else if (all_monsters[i].name == "Papyrus" && met_sans && !met_papyrus)
                            possible_monsters.push_back(all_monsters[i]);
                        else if (all_monsters[i].name == "Undyne" && met_papyrus && !met_undyne)
                            possible_monsters.push_back(all_monsters[i]);
                        else if (all_monsters[i].name == "Asgore" && current_area == NEW_HOME && !met_asgore)
                            possible_monsters.push_back(all_monsters[i]);
                    } else {
                        possible_monsters.push_back(all_monsters[i]);
                    }
                }
            }
            
            if (possible_monsters.empty()) {
                print_slow("这个区域已经没有怪物了...\n");
                Sleep(1000);
                return;
            }
            
            // 特殊处理:Gaster角色会遇到特殊怪物
            if (is_gaster && rand() % 3 == 0) {
                Monster gaster_follower = Monster("Gaster追随者", 300, 30, 0, 0, 20, 
                    "* 我们一直在等待您的回归,主人...\n* 请吸收我们的力量...", 
                    false, false, current_area, 999);
                battle(p, gaster_follower);
                return;
            }
            
            // 随机选择一个怪物进行战斗
            int random_index = rand() % possible_monsters.size();
            Monster encountered = possible_monsters[random_index];
            
            // 如果是唯一怪物,战斗后标记为已遇到
            if (encountered.is_unique) {
                if (encountered.name == "Toriel") met_toriel = true;
                else if (encountered.name == "Papyrus") met_papyrus = true;
                else if (encountered.name == "Undyne") met_undyne = true;
                else if (encountered.name == "Asgore") met_asgore = true;
            }
            
            battle(p, encountered);
            break;
        }
        case 2:
            shop_menu(p);
            break;
        case 3: {
            system("cls");
            Color(10);
            print_slow("--- " + p.Name + " 的状态 ---\n\n");
            Color(7);
            
            print_slow("HP: ");
            Color(12);
            print_slow(int_to_string(p.Health) + "/" + int_to_string(p.maxHealth) + "\n");
            
            Color(7);
            print_slow("攻击力: ");
            Color(12);
            print_slow(int_to_string(p.Damage + gaster_absorbed_attack) + 
                      (is_gaster ? " (基础: " + int_to_string(p.Damage) + " + 吸收: " + int_to_string(gaster_absorbed_attack) + ")" : "") + "\n");
            
            Color(7);
            print_slow("等级: ");
            Color(14);
            print_slow(int_to_string(p.level) + "\n");
全部评论 2
是粘贴错误
2025-09-13 来自 上海
0所以开了第三部分
2025-09-13 来自 上海
0
6
2025-09-12 来自 广东
0













有帮助,赞一个