GASTER特别版——第二部分(完)
2025-09-10 19:31:32
发布于:上海
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");
null Player player;
init_player(player, player_name);
while (!game_over) {
navigate_map(player);
}
return 0;
}
这里空空如也
有帮助,赞一个