问题标题: 末日小游戏(土炮有bug)

0
0
王梓安
王梓安
修练者
修练者

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
int day = 1;
long long cnt;
bool sell1, sell2, sell3, sell4, sell5, sell6, sell7, sell8, sell9;
// ========== 自定义数字转字符串函数【放这里!!】==========
string to_string(int x)
{
    if(x == 0) return "0";
    string res;
    bool neg = false;
    if(x < 0){neg=true; x=-x;}
    while(x>0)
    {
        res = (char)('0' + x%10) + res;
        x /=10;
    }
    if(neg) res = "-"+res;
    return res;
}
// ==============================================
string my_to_string(long long x)
{
    if(x == 0) return "0";
    string res;
    bool neg = false;
    if(x < 0){neg=true; x=-x;}
    while(x>0)
    {
        res = (char)('0' + x%10) + res;
        x /=10;
    }
    if(neg) res = "-"+res;
    return res;
}
void f(string s);
void if_(string hd);
void yxzn();
void shop();
void show_bag();
void shoot();
void repair();
void eat_drink();
void explore();


string hd;

// 物资
int zhg,mb,fbm,bg;        // zhg自嗨锅,mb面包,fbm方便面,bg饼干
int ng_,zg_,yg_;          // ng_能量罐头,zg_主食罐头,yg_鱼罐头(_代表罐头)
int hn1,sh1,mz1,jou1;     // hn1河水,sh1矿泉水,mz1蒸馏水,jou1酒(后缀1代表水/液体)

int bz;
int xl,jk;
long long money;          // 金钱,开局3000

// ==========枪械(轻/中/重)耐久上限3000,打一发消耗1耐久==========
// 轻型:手枪
int st_ammo, st_dur;
// 中型:步枪
int bq_ammo, bq_dur;
// 重型:重机枪
int zjq_ammo, zjq_dur;
//自制土炮 重型
int tp_ammo;    //土炮弹数量
int tp_dur;     //土炮耐久,上限1200
bool has_tp;    //是否拥有土炮 
// 生存状态:饥饿、口渴,上限100
int **ger;
int thirst;

void gotoxy(int x,int y){
    printf("\033[%d;%df",y+1,x+1);
}

// 逐字打印函数
void f(string s){
    for(int i=0;i<s.size();i++){
        cout<<s[i];
        Sleep(5);
    }
    return ;
}
void f1(string s){
    for(int i=0;i<s.size();i++){
        cout<<s[i];
        Sleep(50);
    }
    return ;
}
void yxzn(){
    f1("====游戏指南====\n");
    f1("背景:物资危机爆发,你是一名**者。\n");
    f1("你身处安全屋,可以采购物资,准备外出探索。\n");
    f1("【基**规则】\n");
    f1("1.每次开枪:口渴-1,饥饿-2。\n");
    f1("2.饥饿、口渴上限100,数值归0直接**亡。\n");
    f1("3.枪械耐久上限3000,每开一枪耐久-1,耐久归零无法射击,可修理。\n");
    f1("4.商店随天数变化,天数越高,商店关门概率越高,商品更容易售罄!\n");
    f1("5.外出探索会遭遇随机事件,有可能碰到掠夺者、感染者、武装匪首。\n");
    f1("6.战斗时可手动选择枪械对抗敌人,弹药或耐久不足只能逃跑,消耗大量体力。\n");
    f1("7.合理规划金钱与物资,不要等到商店缺货、关门才临时囤货。\n");
    f1("8.你会被掠夺者报复的,因为任何活人都是他们的眼中钉\n");
    f1("目标:尽可能长时间在危机世界存活下去!\n");
    cout<<endl;
    f1("按回车返回主菜单");
    cin.get();cin.get();
    return ;
}

// 商店
void shop(){
    int p = day * 4 - 2;
    if(p > 80) p = 80; //最高80%封顶
    bool shop_close = (rand()%100) < p;
    if(shop_close){
        f("【警告:物资紧缺,临时商店关门!改天再来!】\n");
        return;
    }
    //===== 每次进店,刷新全部商品售罄状态 =====
    int lack_p = day * 3 - 2;
    if(lack_p >70) lack_p =70; //单品缺货最高70%
    sell1 = (rand()%100) < lack_p; //手枪弹
    sell2 = (rand()%100) < lack_p; //步枪弹
    sell3 = (rand()%100) < lack_p; //重机枪弹
    sell4 = (rand()%100) < lack_p; //自嗨锅
    sell5 = (rand()%100) < lack_p; //面包
    sell6 = (rand()%100) < lack_p; //方便面
    sell7 = (rand()%100) < lack_p; //饼干
    sell8 = (rand()%100) < lack_p; //矿泉水
    sell9 = (rand()%100) < lack_p; //酒

    system("cls");
    f("=====商店=====\n");
    //打印商品,售罄标记
    if(sell1) f("1.手枪弹  1元/发 【售罄】\n");
    else f("1.手枪弹  1元/发\n");

    if(sell2) f("2.步枪弹  3元/发 【售罄】\n");
    else f("2.步枪弹  3元/发\n");

    if(sell3) f("3.重机枪弹 8元/发 【售罄】\n");
    else f("3.重机枪弹 8元/发\n");

    if(sell4) f("4.自嗨锅 25元 【售罄】\n");
    else f("4.自嗨锅 25元\n");

    if(sell5) f("5.面包 8元 【售罄】\n");
    else f("5.面包 8元\n");

    if(sell6) f("6.方便面 12元 【售罄】\n");
    else f("6.方便面 12元\n");

    if(sell7) f("7.饼干 10元 【售罄】\n");
    else f("7.饼干 10元\n");

    if(sell8) f("8.矿泉水 4元 【售罄】\n");
    else f("8.矿泉水 4元\n");

    if(sell9) f("9.酒 15元 【售罄】\n");
    else f("9.酒 15元\n");
    f("10.自制土炮(重型武器) 900元\n");
    f("11.土炮弹 12元/发\n");
    f("请输入购买编号:");
    string op;
    cin >> op;
    if(op == "1"){
        if(sell1){
            f("手枪弹已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num * 1){
                money -= num * 1;
                st_ammo += num;
                string msg = "购买成功!手枪弹+" + to_string(num);
                f(msg);
            }else{
                f("金钱不足!");
            }
        }
    }
    else if(op == "2"){
        if(sell2){
            f("步枪弹已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num * 3){
                money -= num * 3;
                bq_ammo += num;
                string msg = "购买成功!步枪弹+" + to_string(num);
                f(msg);
            }else{
                f("金钱不足!");
            }
        }
    }
    else if(op == "3"){
        if(sell3){
            f("重机枪弹已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num * 8){
                money -= num * 8;
                zjq_ammo += num;
                string msg = "购买成功!重机枪弹+" + to_string(num);
                f(msg);
            }else{
                f("金钱不足!");
            }
        }
    }
    else if(op == "4"){
        if(sell4){
            f("自嗨锅已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num *25){
                money -= num *25;
                zhg += num;
                string msg = "购买成功!自嗨锅+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "5"){
        if(sell5){
            f("面包已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num *8){
                money -= num*8;
                mb += num;
                string msg = "购买成功!面包+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "6"){
        if(sell6){
            f("方便面已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num *12){
                money -= num*12;
                fbm += num;
                string msg = "购买成功!方便面+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "7"){
        if(sell7){
            f("饼干已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num *10){
                money -= num*10;
                bg += num;
                string msg = "购买成功!饼干+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "8"){
        if(sell8){
            f("矿泉水已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num *4){
                money -= num*4;
                sh1 += num;
                string msg = "购买成功!矿泉水+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "9"){
        if(sell9){
            f("酒已经售罄,无法购买!");
        }else{
            int num;
            f("输入购买数量:");
            cin >> num;
            if(money >= num*15){
                money -= num*15;
                jou1 += num;
                string msg = "购买成功!酒+" + to_string(num);
                f(msg);
            }else f("金钱不足!");
        }
    }
    else if(op == "10"){
    int num;
    f("输入购买数量:");
    cin >> num;
    if(money >= num * 900){
        money -= num * 900;
        has_tp = true;
        string msg = "购买成功!获得自制土炮!";
        f(msg);
    }else{
        f("金钱不足!");
    }
}
else if(op == "11"){
    int num;
    f("输入购买数量:");
    cin >> num;
    if(money >= num * 12){
        money -= num * 12;
        tp_ammo += num;
        string msg = "购买成功!土炮弹+" + to_string(num);
        f(msg);
    }else{
        f("金钱不足!");
    }
}

    else{
        f("输入编号无效!");
    }
    cout<<endl;
    f("按回车返回主菜单");
    cin.get();cin.get();
}


// 查看背包
void show_bag(){
    system("cls");
    f("====背包库存====\n");
    string m_str = "当前金钱:" + to_string(money);
    f(m_str);cout<<endl;

    string status_str = "饥饿值:" + to_string(**ger) + " 口渴值:" + to_string(thirst);
    f(status_str);cout<<endl;

    string pist = "手枪弹药:" + to_string(st_ammo) + " 耐久:" + to_string(st_dur);
    f(pist);cout<<endl;

    string rifle = "步枪弹药:" + to_string(bq_ammo) + " 耐久:" + to_string(bq_dur);
    f(rifle);cout<<endl;

    string mg = "重机枪弹药:" + to_string(zjq_ammo) + " 耐久:" + to_string(zjq_dur);
    f(mg);cout<<endl;
    
    string tb=".自制土炮(重型) 耐久:" + to_string(tp_dur)+" 弹药:" + to_string(tp_ammo);
     f(tb);cout<<endl;

    string food = "自嗨锅:"+to_string(zhg)+" 面包:"+to_string(mb)+" 方便面:"+to_string(fbm)+" 饼干:"+to_string(bg);
    f(food);cout<<endl;

    string can = "能量罐头:"+to_string(ng_)+" 主食罐头:"+to_string(zg_)+" 鱼罐头:"+to_string(yg_);
    f(can);cout<<endl;

    string liq = "河水:"+to_string(hn1)+" 矿泉水:"+to_string(sh1)+" 蒸馏水:"+to_string(mz1)+" 酒:"+to_string(jou1);
    f(liq);
    cout<<endl;
    f("按回车返回主菜单");
    cin.get();cin.get();
}

// 开枪射击函数
void shoot(){
    system("cls");
    f("====射击选择====\n");
    f("1.手枪\n");
    f("2.步枪\n");
    f("3.重机枪\n");
    f("请选择武器:");
    string op;
    cin >> op;
    if(op == "1"){
        if(st_dur <= 0){
            f("手枪已经损坏,无法射击!");
        }else if(st_ammo <=5){
            f("手枪弹药不足!");
        }else{
            st_ammo-=5;
            st_dur-=5;
            // 开枪消耗:口渴-1,饥饿-2
            thirst -=5;
            **ger -=10;
            if(thirst < 0) thirst =0;
            if(**ger <0) **ger =0;
            string msg = "手枪开火!剩余弹药:" + to_string(st_ammo) + ",剩余耐久:" + to_string(st_dur);
            f(msg);
        }
    }
    else if(op == "2"){
        if(bq_dur <= 0){
            f("步枪已经损坏,无法射击!");
        }else if(bq_ammo <=15){
            f("步枪弹药不足!");
        }else{
            bq_ammo-=15;
            bq_dur-15;
            thirst -=15;
            **ger -=30;
            if(thirst < 0) thirst =0;
            if(**ger <0) **ger =0;
            string msg = "步枪开火!剩余弹药:" + to_string(bq_ammo) + ",剩余耐久:" + to_string(bq_dur);
            f(msg);
        }
    }
    else if(op == "3"){
        if(zjq_ammo <=20){
            f("重机枪弹药不足!");
        }else if(zjq_dur <= 0){
            f("重机枪已经损坏,无法射击!");
        }else{
            zjq_ammo-=20;
            zjq_dur-=20;
            thirst -=20;
            **ger -=40;
            if(thirst < 0) thirst =0;
            if(**ger <0) **ger =0;
            string msg = "重机枪开火!剩余弹药:" + to_string(zjq_ammo) + ",剩余耐久:" + to_string(zjq_dur);
            f(msg);
        }
    }
    else{
        f("无效武器!");
    }
    cout<<endl;
    f("按回车返回主菜单");
    cin.get();cin.get();
}

// =========修理武器函数========
void repair(){
    system("cls");
    f("====武器修理====\n");
    f("1.手枪(修复1耐久=2元,上限3000)\n");
    f("2.步枪(修复1耐久=5元,上限3000)\n");
    f("3.重机枪(修复1耐久=10元,上限3000)\n");
    f("4.自制土炮【一次**修复至满耐久,上限1200】\n");
    f("选择要修理的武器:");
    string op;
    cin>>op;
    if(op == "1" || op == "2" || op == "3"){
        int add;
        f("输入要修复的耐久点数:");
        cin>>add;
        if(op == "1"){
            int can_add = 3000 - st_dur;
            if(can_add <=0){
                f("手枪耐久已满,无需修理!");
            }else{
                if(add > can_add) add = can_add;
                int cost = add * 2;
                if(money >= cost){
                    money -= cost;
                    st_dur += add;
                    string msg = "修理成功!耐久+" + to_string(add) + ",当前耐久:" + to_string(st_dur);
                    f(msg);
                }else{
                    f("金钱不足,修理失败!");
                }
            }
        }
        else if(op == "2"){
            int can_add = 3000 - bq_dur;
            if(can_add <=0){
                f("步枪耐久已满,无需修理!");
            }else{
                if(add > can_add) add = can_add;
                int cost = add * 5;
                if(money >= cost){
                    money -= cost;
                    bq_dur += add;
                    string msg = "修理成功!耐久+" + to_string(add) + ",当前耐久:" + to_string(bq_dur);
                    f(msg);
                }else{
                    f("金钱不足,修理失败!");
                }
            }
        }
        else if(op == "3"){
            int can_add = 3000 - zjq_dur;
            if(can_add <=0){
                f("重机枪耐久已满,无需修理!");
            }else{
                if(add > can_add) add = can_add;
                int cost = add * 10;
                if(money >= cost){
                    money -= cost;
                    zjq_dur += add;
                    string msg = "修理成功!耐久+" + to_string(add) + ",当前耐久:" + to_string(zjq_dur);
                    f(msg);
                }else{
                    f("金钱不足,修理失败!");
                }
            }
        }
    }
    //修理土炮
    else if(op == "4"){
        if(!has_tp) {
            f("你没有自制土炮!");
        }else{
            int repair_need = 1200 - tp_dur;
            if(repair_need <= 0){
                f("自制土炮耐久已满!");
            }else{
                int cost = repair_need * 2;
                f("修复全部耐久需要 " + to_string(cost)+" 元\n");
                f("是否修理?1是 0否\n");
                string ch;
                cin>>ch;
                if(ch == "1"){
                    if(money >= cost){
                        money -= cost;
                        tp_dur = 1200;
                        f("自制土炮修理完成,耐久恢复满!");
                    }else{
                        f("金钱不足!");
                    }
                }else{
                    f("取消修理");
                }
            }
        }
    }
    else{
        f("无效武器!");
    }
    cout<<endl;
    f("按回车返回主菜单");
    cin.get();cin.get();
}


// =========进食喝水函数========
void eat_drink(){
    system("cls");
    f("====进食/喝水====\n");
    f("1.自嗨锅  2.面包  3.方便面  4.饼干\n");
    f("5.能量罐头 6.主食罐头 7.鱼罐头\n");
    f("8.河水 9.矿泉水 10.蒸馏水 11.酒\n");
    f("请选择物品食用:");
    string op;
    cin>>op;
    if(op == "1"){
        if(zhg <=0){f("没有自嗨锅!");}
        else{
            zhg--;
            **ger +=30; thirst +=5;
            if(**ger>100) **ger=100;
            if(thirst>100) thirst=100;
            f("吃掉自嗨锅!饥饿+30,口渴+5");
        }
    }else if(op == "2"){
        if(mb <=0){f("没有面包!");}
        else{
            mb--; **ger +=12;
            if(**ger>100) **ger=100;
            f("吃掉面包!饥饿+12");
        }
    }else if(op == "3"){
        if(fbm <=0){f("没有方便面!");}
        else{
            fbm--; **ger +=18; thirst +=3;
            if(**ger>100) **ger=100;
            if(thirst>100) thirst=100;
            f("吃掉方便面!饥饿+18,口渴+3");
        }
    }else if(op == "4"){
        if(bg <=0){f("没有饼干!");}
        else{
            bg--; **ger +=8;
            if(**ger>100) **ger=100;
            f("吃掉饼干!饥饿+8");
        }
    }else if(op == "5"){
        if(ng_ <=0){f("没有能量罐头!");}
        else{
            ng_--; **ger +=22;
            if(**ger>100) **ger=100;
            f("食用能量罐头!饥饿+22");
        }
    }else if(op == "6"){
        if(zg_ <=0){f("没有主食罐头!");}
        else{
            zg_--; **ger +=28;
            if(**ger>100) **ger=100;
            f("食用主食罐头!饥饿+28");
        }
    }else if(op == "7"){
        if(yg_ <=0){f("没有鱼罐头!");}
        else{
            yg_--; **ger +=20;
            if(**ger>100) **ger=100;
            f("食用鱼罐头!饥饿+20");
        }
    }else if(op == "8"){
        if(hn1 <=0){f("没有河水!");}
        else{
            hn1--; thirst +=15;
            if(thirst>100) thirst=100;
            f("喝下河水!口渴+15");
        }
    }else if(op == "9"){
        if(sh1 <=0){f("没有矿泉水!");}
        else{
            sh1--; thirst +=25;
            if(thirst>100) thirst=100;
            f("喝下矿泉水!口渴+25");
        }
    }else if(op == "10"){
        if(mz1 <=0){f("没有蒸馏水!");}
        else{
            mz1--; thirst +=30;
            if(thirst>100) thirst=100;
            f("喝下蒸馏水!口渴+30");
        }
    }else if(op == "11"){
        if(jou1 <=0){f("没有酒!");}
        else{
            jou1--; thirst +=10;
            if(thirst>100) thirst=100;
            f("喝下酒!口渴+10");
        }
    }else{
        f("无效选项!");
    }
    cout<<endl;
    f("按回车返回主菜单");
    cin.get();cin.get();
}
void explore(){
    system("cls");
    f("====外出探索====\n");
    f("你推开安全屋大门,灰暗的街道静得可怕……\n");
    Sleep(200);
    // 优先判断掠夺者报复事件
    if(cnt>=8){
        cnt=0;
        f("【掠夺者对你展开了报复!】\n");
        f("对方手持利器,你需要选择武器应战!\n");
        bool can_st = (st_ammo >=20 && st_dur >=20);
        bool can_bq = (bq_ammo >=30 && bq_dur >=30);
        bool can_zjq = (zjq_ammo >=40 && zjq_dur >=40);
        bool can_tp = (has_tp && tp_dur>0 && tp_ammo>=1); //自制土炮能否出战
        if(can_st || can_bq || can_zjq || can_tp){
            f("=====武器选择=====\n");
            if(can_st) f("1.手枪\n");
            if(can_bq) f("2.步枪\n");
            if(can_zjq) f("3.重机枪\n");
            if(can_tp) f("4.自制土炮【重型】\n");
            f("请选择武器(输入编号,其他输入直接逃跑):");
            string op;
            cin >> op;
            if(op == "1" && can_st){
                st_ammo-=20;
                st_dur-=20;
                thirst -=20;
                **ger -=40;
                int reward = rand()%200 + 140;
                money += reward;
                string msg = "手枪开火击退敌人!缴获**+" + to_string(reward) + "元";
                f(msg);
                f("\n");
            }else if(op == "2" && can_bq){
                bq_ammo-=30;
                bq_dur-=30;
                thirst -=30;
                **ger -=60;
                int reward = rand()%260 +200;
                money += reward;
                string msg = "步枪开火击退敌人!缴获**+" + to_string(reward) + "元";
                f(msg);
                f("\n");
            }else if(op == "3" && can_zjq){
                zjq_ammo-=40;
                zjq_dur-=40;
                thirst -=40;
                **ger -=80;
                int reward = rand()%350 +300;
                money += reward;
                string msg = "重机枪开火击退敌人!缴获**+" + to_string(reward) + "元";
                f(msg);
                f("\n");
            }else if(op == "4" && can_tp){
                tp_ammo -= 1;
                tp_dur -= 5;
                thirst -=25;
                **ger -=45;
                int reward = rand()%350 + 400;
                money += reward;
                string msg = "点燃自制土炮!一炮重创敌人!缴获**+" + to_string(reward) + "元";
                f(msg);
                f("\n");
            }else{
                f("选择无效!放弃战斗,仓皇逃跑!\n");
                f("慌乱奔跑大量消耗体力!\n");
                thirst -=5;
                **ger -=5;
            }
        }else{
            f("你没有任何武器满足出战条件!只能仓皇逃跑!\n");
            f("慌乱奔跑大量消耗体力!\n");
            thirst -=8;
            **ger -=8;
        }
        // 报复事件结束后同样执行饥渴**
        if(**ger<0) **ger=0;
        if(thirst<0) thirst=0;
        if(**ger <= 0 || thirst <= 0){
            cout<<endl;
            f("你的体力耗尽,再也撑不住了……\n");
            f("====游戏结束====\n");
            Sleep(2000);
            exit(0);
        }
        cout<<endl;
        day++;
        f("探索结束,返回安全屋。\n");
        f("按回车返回主菜单");
        cin.get();cin.get();
        return ;
    }
    // 没有触发报复,执行普通随机事件
    int r = rand() % 14;
    if(r == 0){
        f("【废弃超市|平安搜寻】\n");
        f("玻璃碎了一地,货架上还有残留物资。\n");
        int get_money = rand()%120 + 50;
        int get_food = rand()%3 + 1;
        int get_water = rand()%2;
        money += get_money;
        zhg += get_food;
        sh1 += get_water;
        string msg = "搜刮完毕!**+" + to_string(get_money) + "元,自嗨锅+" + to_string(get_food) + ",矿泉水+" + to_string(get_water);
        f(msg);
        cnt++;
    }
    else if(r == 1){
        // 随机3种敌人
        int enemy_id = rand() % 3;
        string enemy_name;
        int cost_ammo, cost_dur, cost_thirst, cost_**ger;
        int reward_min, reward_max;
        if(enemy_id == 0){
            enemy_name = "游荡掠夺者(棍棒)";
            cost_ammo = 2;
            cost_dur = 2;
            cost_thirst = 1;
            cost_**ger = 2;
            reward_min = 100;
            reward_max = 200;
        }else if(enemy_id == 1){
            enemy_name = "游荡的感染者";
            cost_ammo = 12;
            cost_dur = 12;
            cost_thirst = 2;
            cost_**ger = 3;
            reward_min = 0;
            reward_max = 0;
        }else{
            enemy_name = "武装匪首";
            cost_ammo = 20;
            cost_dur = 20;
            cost_thirst = 3;
            cost_**ger = 4;
            reward_min = 300;
            reward_max = 400;
        }
        f("【遭遇威胁!" + enemy_name + "拦住了你!】\n");
        f("必须开枪击退!\n");
        f("请选择使用的枪械:\n");
        f("1 手枪  2 步枪  3 重机枪  4 自制土炮\n");
        string op;
        cin >> op;
        bool fight_ok = false;
        if(op == "1"){
            if(st_ammo > cost_ammo && st_dur > cost_dur){
                st_ammo -= cost_ammo;
                st_dur -= cost_dur;
                thirst -= cost_thirst;
                **ger -= cost_**ger;
                fight_ok = true;
            }
        }else if(op == "2"){
            if(bq_ammo > cost_ammo && bq_dur > cost_dur){
                bq_ammo -= cost_ammo;
                bq_dur -= cost_dur;
                thirst -= cost_thirst;
                **ger -= cost_**ger;
                fight_ok = true;
            }
        }else if(op == "3"){
            if(zjq_ammo > cost_ammo && zjq_dur > cost_dur){
                zjq_ammo -= cost_ammo;
                zjq_dur -= cost_dur;
                thirst -= cost_thirst;
                **ger -= cost_**ger;
                fight_ok = true;
            }
        }else if(op == "4"){
    //自制土炮:固定消耗1发土炮弹、耐久扣5,不受敌人cost_ammo影响
    if(has_tp && tp_dur > 0 && tp_ammo >= 1){
        tp_ammo -= 1;
        tp_dur -= 5;
        thirst -= cost_thirst;
        **ger -= cost_**ger;
        fight_ok = true;
        f("自制土炮轰然开火!巨大冲击波击溃敌人!\n");
        // 土炮伤害高,奖励倍率提高,比如*1.5
        int reward = (rand()%(reward_max - reward_min +1) + reward_min) * 1.5;
        money += reward;
        string msg = "缴获**+" + to_string(reward) + "元";
        f(msg);
    }else{
        f("土炮/土炮弹不足或耐久为0,无法开火!\n");
        fight_ok = false;
    }
    }
        if(fight_ok){
            string msg;
            if(enemy_id == 0){
                int reward = rand()%(reward_max - reward_min +1)+reward_min;
                money += reward;
                msg = "击退掠夺者!缴获**+" + to_string(reward) + "元";
                cnt++;
            }else if(enemy_id == 1){
                //感染者掉落罐头、矿泉水
                int can = rand()%2 + 1;
                ng_ += can;
                int water = rand()%2;
                sh1 += water;
                msg = "击退感染者!获得罐头" + to_string(can) + "个,矿泉水" + to_string(water) + "瓶";
                cnt++;
            }else{
                //匪首给钱+步枪弹
                int reward = (rand()%(reward_max - reward_min +1)+reward_min)+80;
                money += reward;
                int add_ammo = rand()%15 +50;
                bq_ammo += add_ammo;
                msg = "击败武装匪首!**+" + to_string(reward) + ",步枪弹+" + to_string(add_ammo);
                cnt+=3;
            }
            f(msg);
        }else{
            f("没有可用武器弹药!只能仓皇逃跑!\n");
            f("慌乱奔跑大量消耗体力!");
            thirst -=3;
            **ger -=3;
            cnt++;
        }
    }
    else if(r == 2){
        f("【偶遇**者】\n");
        f("一个背着背包的**者**在墙角,愿意和你低价交易。\n");
        f("1.花120元买3包方便面  2.拒绝交易\n");
        string op;
        cin >> op;
        if(op == "1"){
            if(money >= 120){
                money -=120;
                fbm +=3;
                f("交易成功!获得方便面×3");
            }else{
                f("你的钱不够,对方摇摇头离开了。");
            }
        }else{
            f("你选择不交易,**者转身消失在巷子里。");
        }
        cnt++;
    }
    else if(r == 3){
        f("【暴雨突降!】\n");
        f("大雨倾盆,路面湿滑,赶路会消耗更多水分。\n");
        f("但雨水可以收集!\n");
        int water_get = rand()%4 + 2;
        hn1 += water_get;
        thirst -=3;
        **ger -=1;
        string msg = "收集河水+" + to_string(water_get);
        f(msg);
        cnt++;
    }
    else if(r == 4){
        f("【捡到破损枪械】\n");
        f("路边躺着一把手枪,枪身受损,耐久不高。\n");
        int damage = rand()%300;
        st_dur -= damage;
        if(st_dur <0) st_dur =0;
        string msg = "你捡的时候,手枪被磕碰受损,耐久减少" + to_string(damage);
        f(msg);
        cnt++;
    }
    else if(r == 5){
        f("【废弃药房】\n");
        f("你找到一间被砸坏的药房,货架上残留物资。\n");
        int get_mz = rand()%3 + 1;
        mz1 += get_mz;
        string msg = "搜寻完毕,获得蒸馏水+" + to_string(get_mz);
        f(msg);
        thirst -=2;
        **ger -=2;
        cnt++;
    }
    else if(r == 6){
        f("【听到求救声!】\n");
        f("巷子深处传来呼救,1.前去查看 2.无视离开\n");
        string op;
        cin>>op;
        if(op == "1"){
            int luck = rand()%10;
            if(luck >=4){
                f("是落难**者,他送给你物资感谢!");
                money += rand()%150+80;
                zg_ += 2;
            }else{
                f("陷阱!埋伏的掠夺者冲了出来!你只能慌忙逃跑!");
                thirst -=5;
                **ger -=5;
            }
        }else{
            f("你选择无视求救,安静离开。");
        }
        cnt++;
    }
    else if(r == 7){
        f("【大风沙尘来袭】\n");
        f("漫天黄沙遮挡视线,赶路消耗巨大,一无所获。\n");
        thirst -=4;
        **ger -=3;
        f("沙尘天气,本次探索没有找到物资。");
        cnt++;
    }
    else if(r == 8){
    f("【废弃加油站】\n");
    f("加油站便利店还有存货,油罐区安静得吓人。\n");
    int get_oil_water = rand()%3 + 2;
    hn1 += get_oil_water;
    int get_bread = rand()%2 + 1;
    mb += get_bread;
    string msg = "搜刮完毕!河水+" + to_string(get_oil_water) + ",面包+" + to_string(get_bread);
    f(msg);
    thirst -=2;
    **ger -=2;
    cnt++;
}
    else if(r == 9){
        f("【隐秘补给箱】\n");
        f("墙角有一个被木板盖住的箱子,是否打开?1打开 2跳过\n");
        string op;
        cin>>op;
        if(op == "1"){
            int luck = rand()%10;
            if(luck >= 3){
                f("箱子里藏着大量物资!");
                money += rand()%300 + 500;
                st_ammo += rand()%20 +100;
            }else{
                f("箱子是掠夺者的陷阱!**擦伤了你!");
                thirst -=6;
                **ger -=4;
            }
        }else{
            f("你选择不冒险,继续前进。");
        }
        cnt++;
    }
    else if(r == 10){
        f("【流浪商人】\n");
        f("一名背着大包的流浪商人,出售弹药。\n");
        f("1.400元购买50发手枪弹  2.拒绝\n");
        string op;
        cin>>op;
        if(op == "1"){
            if(money >= 400){
                money -=400;
                st_ammo +=50;
                f("交易成功!手枪弹+50");
            }else{
                f("资金不足,商人摇头离开。");
            }
        }else{
            f("商人点点头,消失在街道尽头。");
        }
        cnt++;
    }
    else if(r == 11){
        f("【寒潮来袭】\n");
        f("气温骤降,寒风刺骨,身体消耗大量能量。\n");
        f("本次探索很难找到物资。\n");
        thirst -=7;
        **ger -=7;
        cnt++;
    }
    else if(r == 12){
        f("【废弃居民楼】\n");
        f("破败居民楼,房间里遗留不少罐头。\n");
        int fish_can = rand()%2 +1;
        yg_ += fish_can;
        int staple_can = rand()%2;
        zg_ += staple_can;
        string msg = "搜刮完毕!鱼罐头+" + to_string(fish_can) + ",主食罐头+" + to_string(staple_can);
        f(msg);
        thirst -=2;
        **ger -=3;
        cnt++;
    }
    else if(r == 13){
        f("【枪械零件堆】\n");
        f("废墟堆发现一堆枪械零件,可以修复武器。\n");
        int repair_val = rand()%200 + 100;
        st_dur += repair_val;
        if(st_dur>3000) st_dur=3000;
        string msg = "修复手枪耐久+" + to_string(repair_val);
        f(msg);
        thirst -=2;
        **ger -=2;
        cnt++;
    }

    // 饥渴最低限制
    if(**ger<0) **ger=0;
    if(thirst<0) thirst=0;
    // 新增**亡判定!探索结束**,饥渴归零直接游戏结束
    if(**ger <= 0 || thirst <= 0){
        cout<<endl;
        f("你的体力耗尽,再也撑不住了……\n");
        f("====游戏结束====\n");
        Sleep(2000);
        exit(0);
    }
    cout<<endl;
    day++;
    f("探索结束,返回安全屋。\n");
    f("按回车返回主菜单");
    cin.get();cin.get();
}


void if_(string hd){
    if(hd=="1"){
        shop();
    }else if(hd=="2"){
        show_bag();
    }else if(hd=="3"){
        yxzn();
    }else if(hd=="4"){
        shoot();
    }else if(hd=="5"){
        repair();
    }else if(hd=="6"){
        eat_drink();
    }else if(hd=="7"){
        explore();
    }else if(hd=="作弊"){
        money = 0x3f3f3f3f;
    st_ammo=0x3f3f3f3f; st_dur=3000;
    bq_ammo=0x3f3f3f3f; bq_dur=3000;
    tp_ammo = 0x3f3f3f3f;tp_dur = 1200;has_tp=false;
    zjq_ammo=0x3f3f3f3f; zjq_dur=0x3f3f3f3f;
    zhg=0x3f3f3f3f;mb=0x3f3f3f3f;fbm=0x3f3f3f3f;bg=0x3f3f3f3f;
    ng_=0x3f3f3f3f;zg_=0x3f3f3f3f;yg_=0x3f3f3f3f;
    hn1=0x3f3f3f3f;sh1=0x3f3f3f3f;mz1=0x3f3f3f3f;jou1=0x3f3f3f3f;
    **ger = 100;
    thirst = 100;
    system("cls");
    cout<<"你以飞升"; 
    }else{
        cout<<endl;
        f("重新输入…………");
        cout<<endl;
        cin >> hd;
        if_(hd);
    }
    return;
}

int main(){
    srand((unsigned)time(NULL));
    // 初始化开局
    money = 3000;
    st_ammo=0; st_dur=3000;
    bq_ammo=0; bq_dur=3000;
    zjq_ammo=0; zjq_dur=3000;
    tp_ammo = 0;tp_dur = 1200;has_tp = 1;
    zhg=0;mb=0;fbm=0;bg=0;
    ng_=0;zg_=0;yg_=0;
    hn1=0;sh1=0;mz1=0;jou1=0;
    **ger = 100; //开局饥饿满
    thirst = 100; //开局口渴满 
    f1("警报渐渐消失,你躲进安全屋。\n");
    f1("你身上只有3000元。\n");
    f1("做好准备,危机就在门外。\n");
    Sleep(2000);
    while(true){
        if(day!=1){
            system("cls");
            f("当前第" + to_string(day) + "天\n");
            Sleep(1400);
        } 
        system("cls");
        f("====生存游戏====\n");
        f("1 商店\n");
        f("2 查看背包\n");
        f("3 游戏指南\n");
        f("4 开枪射击(浪费钱)\n");
        f("5 修理武器\n");
        f("6 进食喝水\n");
        f("7 外出探索\n");
        f("请输入选项:");
        cin >> hd;
        if_(hd);
        Sleep(800);
    }
    return 0;
}


0
0
0
贾晓彬
贾晓彬
新手守护
新手守护

[错误] call of overloaded 'to_string(int&)' is ambiguous

0
我要回答