#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;
}
