// 撤离点
void evacuation_point() {
stdcout << "\n----- 撤离点 -----\n";
stdcout << "你可以选择在此撤离,获得当前所有收益;或继续探索。\n";
stdcout << "当前收益:\n";
stdcout << "金钱:" << player.money << "\n";
stdcout << "变卖物价值:" << player.collectibles_value << "\n";
stdcout << "总收益:" << player.money + player.collectibles_value << "\n";
stdcout << "\n1. 撤离(胜利)\n";
stdcout << "2. 继续探索\n";
std::cout << "请选择: ";
}
// 根据总收益获取撤离评价
std::string get_evac_evaluation(long long total_earn)
{
if (total_earn >= 8000000) {
SetColor(4,0);
return "传奇收获!你带出了天文数字的物资,行动载入史册!";
}
else if (total_earn >= 5000000) {
SetColor(6,0);
return "史诗收获!巨额战利品,所有人都会记住你的战绩!";
}
else if (total_earn >= 2000000) {
SetColor(5,0);
return "优秀收获,高价值物资丰厚,是一次成功的行动。";
}
else if (total_earn >= 800000) {
SetColor(3,0);
return "不错的收获,小有盈利,平稳完成任务。";
}
else if (total_earn >= 200000){
SetColor(10,0);
return "基础收益,勉强回本,还有很大提升空间。";
}
else if (total_earn >= 100000) {
SetColor(8,0);
return "微薄收益,物资稀少,下次尽量搜寻更多容器。";
}
else {
SetColor(8,0);
return "空手而归,没有带出任何有价值的东西。";
}
}
// 丰富黑市商品,每次进入商店随机刷新商品(替换原有generate_shop_items)
void generate_shop_items() {
// 清空现有商品
for (Item* item : shop_items) {
delete item;
}
shop_items.clear();
}
// 显示商店
void show_shop() {
clear_screen();
stdcout << "----- 黑市商店 -----\n";
stdcout << "你的金钱:" << player.money << "\n";
stdcout << "\n商品列表:\n";
if (shop_items.empty()) {
generate_shop_items();
}
// 显示商品
for (size_t i = 0; i < shop_items.size(); ++i) {
Item* item = shop_items[i];
stdcout << i+1 << ". " << item->name << " - " << item->description << " (价格:" << item->value << ")\n";
}
}
// 处理商店输入
void handle_shop_input() {
int choice;
std::cin >> choice;
}
// 游戏结束
void game_over(bool victory) {
if (victory) {
//新增:胜利撤离,把红色变卖物存入本地仓库
SetColor(6,0);
stdcout << "\n===== 任务成功!=====\n";
SetColor(7,0);
Sleep(500);
stdcout << "你成功撤离,获得了总计 " << player.money + player.collectibles_value << " 的收益!\n";
Sleep(500);
stdcout << "行动评价:" << get_evac_evaluation(player.money + player.collectibles_value) << "\n";
Sleep(500);
SetColor(7,0);
store_player_red_to_vault();
} else {
stdcout << "\n===== 任务失败!=====\n";
Sleep(100);
stdcout << "你在战斗中倒下了,任务失败。\n";
Sleep(100);
stdcout << "行动评价:" << "时运不济" << "\n";
Sleep(100);
}
std::cout << "感谢游玩!\n";
}
// 清屏(跨平台简易实现)
void clear_screen() {
#ifdef _WIN32
system("cls");
#else
system("clear");
#endif
}
// 按任意键继续
void press_any_key() {
Sleep(100);
stdcout << "\n按任意键继续...";
stdcin.clear();
stdcin.ignore(stdnumeric_limitsstd::streamsizemax(), '\n');
(void)_getch(); // 真正读取键盘按键,不会被换行干扰
}
//void clear_save_file(const stdstring& filename) {
// // 方式 A:直接删除文件(最彻底)
// // stdremove(filename.c_str());
//
// // 方式 B:将文件清空为 0 字节(保留空文件,不容易因找不到文件报错)
// stdofstream outfile(filename, stdiostrunc);
//
// if (outfile.is_open()) {
// outfile.close();
// ShowCombatText("存档已成功清空!重新开始你的冒险吧。\n", 10); // 绿色提示
// } else {
// ShowCombatText("错误:未能成功清空存档。\n", 12); // 红色提示
// }
//}
// 主函数
int main() {
srand(time(0));
red_vault.load_from_file(VAULT_FILE);
player.health = 2000000000;
player.max_health = 2000000000;
player.money = 2000000000;
player.level = 1000;
player.exp = 9999999;
bool quit_game = false;
while (!quit_game) // 外层循环:反复玩多局
{
player.health = 2000000000;
player.max_health = 2000000000;
player.money = 2000000000;
player.level = 1000;
player.exp = 9999999;
current_state = GameState::MAIN_MENU;
game_loop(); // 运行完整一局游戏,结束后current_state是GAME_OVER/VICTORY
// clear_save_file(VAULT_FILE);
return 0;
}