有问题

· · 个人记录

背包老是崩,求看

#include<bits/stdc++.h>
#include<windows.h>
#include<stdio.h>
#include<conio.h>
#include<time.h>
using namespace std;

int level=-1;//记录层级

//常量 
const int MAX_BACKROOM_OBJECTS =20;
const int MAX_WEAPONS = 14;
const int MAX_FOODS = 14;
//武器数量 
string wuqi1,wuqi2;//最多两个  ,1左手,2右手 
int w1,w2;
// 
int ddst_level[30];
int hp=100, mp=100, water=100,bao=100, san=100,g=1,wq=0; //血量,体力,水分,饱食度,理智,赤手空拳的攻击 ,最多两个武器 
//string ID;
int s, sw, fk; //存储随机数,死亡次数 ,疯狂次数 
/*int sui(int range)//取随机数
{
    return rand()%range+1;
}*/
//加了b开头的变量是背包的物品,0是没有,1是有,没有不显示物品名称,以“***”代替。 Object 1
// 第二的字母是h,意味是后室里特有的,r是红室,m是马尼拉房间 ,如果没有这三个字母就不是特有。
int bmMEG/*来自M.E.G.的文档*/;

//后室物品

struct Object{
    string name;//名字 
    int num;//数量 
}; //特殊物品 

struct Wuqi{
    string name;//名字 
    int num;//数量 
    int shang;//伤害 
}; //武器 

struct Food{
    string name;//名字 
    int num;//数量 
    int rehp;//回血 
    int remp;//回体力 
    int rebao;//回饱食 
    int shang;//增伤 
    int resan;//回理智 
};//食物 

struct DDST{
    string name;//名字 
    int hp;//血量 
    int hit;//玩家命中概率 
    int shang[3];//招式对应伤害 
//    int level;//出现层级 
    string moves[3];//招式 
};//敌对实体 

// 初始化后室物品列表
Object Objects[MAX_BACKROOM_OBJECTS] = {
    {"", 0},
    {"杏仁水", 0},//1
    {"层级密钥", 0},//2
    {"驱笑剂", 0},//3
    {"反欧几里得装置", 0},//4
    {"糖果", 0},//5
    {"镜子", 0},//6
    {"记忆罐", 0},//7
    {"小台灯", 0},//8
    {"傻瓜口香糖", 0},//9
    {"稻草人", 0},//10
    {"幽鬼灯光", 0},//11
    {"告死裂片", 0},//12
    {"办公终端", 0},//13
    {"圣甲虫", 0},//14
    {"火盐", 0},//15
    {"皇家口粮", 0},//16
    {"滋水枪", 0},//17
    {"巴别润唇膏", 0},//18
    {"幸运豆奶", 0}//19
};

// 初始化武器列表
Wuqi wuqi[MAX_WEAPONS] = {
    {"", 0, 0},
    {"刀片", 0, 1},//1
    {"斧头", 0, 3},//2
    {"小刀", 0, 2},//3
    {"大刀", 0, 5},//4
    {"骑士的剑", 0, 10},//5
    {"锤子", 0, 15},//6
    {"榔头", 0, 7},//7
    {"棒子", 0, 5},//8
    {"燧石枪", 0, 20},//9
    {"狼牙棒", 0, 6}//10
};

// 初始化食物列表
Food food[MAX_FOODS] = {
    {"", 0, 0, 0, 0, 0, 0},
    {"面包", 0, 10, 40, 50, 1, 5},//1
    {"馒头", 0, 10, 40, 50, 1, 5},//2
    {"小面包", 0, 5, 30, 30, 1, 3},//3
    {"粗粮馒头", 0, 15, 15, 20, 1, 2},//4
    {"生猪肉", 0, -5, 50, 40, 3, 0},//5
    {"熟猪肉", 0, 25, 60, 70, 5, 10},//6
    {"7分熟猪肉", 0, 25, 50, 90, 5, 20},//7
    {"汉堡", 0, 15, 50, 40, 2, 8},//8
    {"蛋糕", 0, 10, 20, 30, 2, 5},//9
    {"白糖", 0, 2, 0, 0, 2, 30},//10
    {"蛋挞", 0, 5, 10, 10, 0, 1},//11
    {"辣椒", 0, -10, 0, 0, 20, -1}//12
};

// 初始化敌对实体列表
DDST ddst[MAX_FOODS] = {
    {"", 0, 0, {0, 0, 0},  {"", "", ""}},
    {"笑魇", 100, 80, {2, 3, 5}, {"追赶", "感光", "狂笑"}},
    {"死亡飞蛾", 200, 70, {3, 3, 8},  {"扇动翅膀", "感光", "酸液"}},
    {"肢团", 200, 85, {2, 5, 9}, {"极速", "大力", "利牙"}},
    {"钝人", 250, 90, {5, 4, 7}, {"强壮", "摇摆", "极速"}},
    {"杰瑞", 150, 50, {-4, -5, 999}, {"切入", "切出", "教化"}},
    {"猎犬", 160, 60, {4, 7, 9}, {"目击", "袭击", "撕咬"}},
    {"无面灵", 300, 75, {7, 4, 10}, {"易怒", "攻击", "破坏"}},
    {"窃皮者", 130, 80, {-8, 5, 12},{"治愈", "攻击", "撕裂"}},
    {"爆酸者", 125, 85, {8, 10, -20}, {"酸液", "喷溅", "硬化表皮"}},
    {"地栖怪", 135, 80, {-8, 5, 999}, {"掘地", "震动", "拉入地下"}},
    {"悲尸", 140, 70, {10, 15, 999}, {"大力", "破墙", "感染"}},
    {"Nguithr'xurhs", 130, 85, {10, 30, 35}, {"网囊", "镇静剂", "撕咬"}}
};

void ys(int a) { //更改单个字
    if (a == 0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
    if (a == 1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);
    if (a == 2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN);
    if (a == 3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_BLUE);
    if (a == 4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED);
    if (a == 5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);
    if (a >= 6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_BLUE);
}
void Bai() {SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);}

void SetPos(int x, int y)
{
    COORD pos;
    pos.X = y, pos.Y = x;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

void say(string a) {
    int l = a.size();
    for (int i = 0; i < l; i++) {
        cout << a[i];
        if (a[i] != 0)
            Sleep(10);
    }
//  printf("\n");
    Sleep(100);
}
void zt() { //状态
    SetPos(0,0);
    int k=1;
    while(k<=10){
    cout << "                                                           \n";
    k++;    
    }
    SetPos(0,0);
    ys(1);
    cout << "血量:" << hp << endl;
    ys(2);
    cout << "体力:" << mp << endl;
    ys(3);
    cout << "水分:" << water << endl;
    ys(4);
    cout << "饱食度:" << bao << endl;
    ys(5);
    cout << "理智:" << san << endl;
    ys(6);
    cout << "攻击:" << g << endl;
    Bai();
    system("pause");
}
/*
void panding()//判定
{
    int i;
    if (bao<=0)
    {
        hp -= (bao / 2); //扣血
        bao=70;
    }
    if (water <= 0) //扣血
    {
        hp += water;
        water = 50;
    }
    if(mp<=0){ //扣血
        hp+=mp;
        mp=50;
    }
    if (san <= 0) //判定疯狂
    {
        fk++;
        say("你疯了\n");
        return ;
        system("pause");
    }
    if (hp <= 0) //判定死亡
    {
        sw++;
        say("你死了\n");
        return ;
        system("pause");
    }
}
*/
int read() {
    while (_kbhit()) _getch();
    return _getch() - 48;
}
//void level0();void level1();
//滚动字幕
// 存档函数
bool Save() {
    ofstream out("Backrooms.dat");
    if (!out) return false;

    out << level <<' ' << hp <<' ' << mp <<' ' << water <<' ' << bao <<' ' << san << endl;

    for (int i = 1; i <= MAX_BACKROOM_OBJECTS; ++i)
        out << Objects[i].num << " \n"[i == MAX_BACKROOM_OBJECTS];

    for (int i = 1; i <= MAX_WEAPONS; ++i)
        out << wuqi[i].num << " \n"[i == MAX_WEAPONS];

    for (int i = 1; i <= MAX_FOODS; ++i)
        out << food[i].num << " \n"[i == MAX_FOODS];

    out.close();
    return true;
}

// 读档函数
bool Read() {
    ifstream in("Backrooms.dat");
    if (!in) return false;

    in >> level >> hp >> mp >> water >> bao >> san;

    for (int i = 1; i <= MAX_BACKROOM_OBJECTS; ++i)
        in >> Objects[i].num;

    for (int i = 1; i <= MAX_WEAPONS; ++i)
        in >> wuqi[i].num;

    for (int i = 1; i <= MAX_FOODS; ++i)
        in >> food[i].num;

    in.close();
    return true;
}

int wp() { //随机出现物品 
    srand(static_cast<unsigned int>(time(NULL)));
    int a = rand() % 100;//100%
    return a;
}

int sj(int x) { //概率 1~100 
    srand(static_cast<unsigned int>(time(NULL)));
    int a = rand() % 100;//100%
//  cout<<"\n"<<a<<" \n";
    if (1 <= a && a <= x) return 1;
    return 2;
}

int xd(int x, int y) { //x~y之间的数
    srand(static_cast<unsigned int>(time(NULL)));
    return rand() % (y - x + 1) + x;
}

void bb(int h) { //背包
    bool f = 0;
    Bai();
    system("title 背包");
    while(1){
    SetPos(h,0);
    int k=1;
    while(k<=10){
    cout << "                                                           \n";
    k++;    
    }
    SetPos(h,0);
    say("请输入数字: 0.返回 1.特殊物品 2.武器 3.食物 4.状态\n");
    int u=read(),x;
    SetPos(h, 0);
    cout << "                                                             ";
    SetPos(h, 0);
    if(u==1){
        for (int i = 1, y = 1; i <= MAX_BACKROOM_OBJECTS; y = y % 6 + 1, ++i) {
            ys(y);
            cout <<i<<"."<< Objects[i].name << ":" << Objects[i].num << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        ys(4);
        say("输入0退出\n");
        Bai();
        say("输入序号(本次输入需要回车):") ;
        cin>>x;
        if(x!=0){
            if(Objects[x].num ) say("使用成功!\n"),Objects[x].num --; //暂无效果
            else say("您还没有这件物品\n"); 
        }
        system("pause");
    }
    else if(u==2){
        for (int i = 1, y = 1; i <= MAX_WEAPONS; y = y % 6 + 1, ++i) {
            ys(y);
            cout<<i<<"."<<wuqi[i].name<< ":" <<wuqi[i].num << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        ys(4);
        say("输入0退出\n");
        Bai();
        say("输入序号(本次输入需要回车):\n") ;
        cin>>x;
        if(x!=0){
            say("请问您要1.装备2.脱下(本次输入需要回车)\n");
            int pan;
            cin>>pan;
            if(pan==1){
                if(wuqi[x].num){
                    say("您当前装备:左手");
                    say(wuqi1);
                    say("右手");
                    say(wuqi2);
                    say("\n请问装备于哪个手?1.左手2.右手(本次输入需要回车):\n");
                    int shou;
                    cin>>shou;
                    if(shou==1){
                        if(w1==0){
                            say("使用成功!\n攻击力+"),wuqi[x].num--,w1=x;
                            wuqi1+=wuqi[x].name;
                            cout<<wuqi[x].shang;
                        }
                    }
                    if(shou==2){
                        if(w2==0){
                            say("使用成功!\n攻击力+"),wuqi[x].num--,w2=x; 
                            wuqi2+=wuqi[x].name;
                            cout<<wuqi[x].shang;
                        }
                    }
                    cout<<endl;
                }
                else say("您还没有这件物品\n"); 
            }
            if(pan==2){
                say("您当前装备:左手");
                say(wuqi1);
                say("右手");
                say(wuqi2);
                say("\n请问脱下装备于哪个手?1.左手2.右手(本次输入需要回车):\n");
                int shou;
                cin>>shou;
                if(shou==1){
                    if(w1>=0){
                        say("成功脱下!\n攻击力-"),wuqi[w1].num++;
                        cout<<wuqi[w1].shang;
                        w1=0;
                        wuqi1="无"; 
                    }
                    else say("您还没有装备"); 
                }
                if(shou==2){
                    if(w2>=0){
                        say("成功脱下!\n攻击力-"),wuqi[w2].num++;
                        cout<<wuqi[w2].shang;
                        w2=0;
                        wuqi2="无"; 
                    }
                    else say("您还没有装备"); 
                }
                cout<<endl;
            }
        }
        system("pause");
    }
    else if(u==3){
        for (int i = 1, y = 1; i <= MAX_FOODS; y = y % 6 + 1, ++i) {
            ys(y);
            cout <<i<<"."<< food[i].name << ":" << food[i].num  << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        ys(4);
        say("输入0退出\n");
        Bai();
        say("输入序号(本次输入需要回车):") ;
        cin>>x;
        if(x!=0){
            if(food[x].num ){
                say("使用成功!\n"),food[x].num --; 
                hp+=food[x].rehp ;
                mp+=food[x].remp ;
                bao+=food[x].rebao ;
                g+=food[x].shang ;
                san+=food[x].resan ;
                cout<<"血量+ "<<food[x].rehp<<"\n体力+ "<<food[x].remp<<"\n饱食度+ "<<food[x].rebao<<"\n伤害+ "<<food[x].shang<<"\n理智+ "<<food[x].resan<<endl; 
            }
            else say("您还没有这件物品\n"); 
        }
        system("pause");
    }
    else if(u==4)  zt();
    else break;
    }
    system("pause");
}

void chengjiu()//成就
{
    int i;
    system("cls");
    if (sw == 1)
    {
        say("你获得了成就:地府的新业绩\n");
        say("获得方式:死亡一次\n");
        s++;
    }
    else if (sw == 10)
    {
        say("你获得了成就:地府常客\n");
        say("获得方式:死亡十次\n");
        s++;
    }
    else if (sw == 100)
    {
        say("你获得了成就:阎王:你怎么又双叕来了\n");
        say("获得方式:死亡一百次\n");
        s++;
    }
    else if (fk == 1)
    {
        say("你获得了成就:我神好精得很,我精很神好的......\n");
        say("获得方式:疯狂一次\n");
        s++;
    }
    else if (fk == 10)
    {
        say("你获得了成就:精神病院SVIP\n");
        say("获得方式:疯狂十次\n");
        s++;
    }
    else if (fk == 100)
    {
        say("你获得了成就:这院长的位置归你了\n");
        say("获得方式:疯狂一百次\n");
        s++;
    }
    system("pause");
    cin >> i;
}

void zd(int a){ //战斗系统,判定怪物:a
    system("title 战斗                                                                   版权所有于Gears及其合作者");
    int y;
    int gw=ddst[a].hp ;
    //0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝  
    while(1){
        int cs=g;
        SetPos(0,0);
        int k=1;
        while(k<=20){
        cout << "                                                                                                                     \n";
        k++;    
        }
        SetPos(0,0);
        ys(5);
        say(ddst[a].name);
        Bai();
        say("嘶吼着向你袭来!\n");
        ys(5);
        say(ddst[a].name);
        Bai();
        say("有");
        ys(4);
        cout<<gw;
        Bai();
        cout<<"/";
        ys(2); 
        cout<<ddst[a].hp;
        Bai();
        cout<<"的血量\n";
        say("你选择:1.背包 2.攻击 3.逃跑\n");
        y=read();
        if(y==1) bb(1);
        else if(y==2){
            if(sj(ddst[a].hit)==2){
                ys(3);
                say(ddst[a].name);
                Bai();
                say("躲过了你的攻击\n");
            }
            else{
                if(sj(70)==1){
                    ys(3);
                    say(ddst[a].name);
                    Bai();
                    say("受到了攻击,它似乎更加愤怒\n");
                    gw-=cs;
                    say("遭受:");
                    cout<<cs ;
                    say("的伤害\n");
                }
                else {
                    say("你的伤害造成“暴击”,伤害翻倍。\n");
                    gw-=cs*2;
                    ys(3);
                    say(ddst[a].name);
                    Bai();
                    say("遭受:");
                    cout<<cs*2 ;
                    say("的伤害\n");
                }
            }
            if(gw<=0){
                ys(3);
                say(ddst[a].name);
                Bai();
                say("倒了下去,你胜利了!\n");
                break;
            }
        }
        else {
            int y=40;//逃出概率
            if(sj(y)==2) say("怪物仍在身后,但似乎拉开了距离\n"),y+=10; 
            else say("没用的,它来了\n"),y-=5;
        }
        int n;
        if(sj(70)==1) n=0;
        else{
            if(sj(20)==1) n=1;
            else n=2;
        }
        say("它使用"); 
        ys (6);
        say(ddst[a].moves[n]);
        Bai();
        if(ddst[a].shang[n]>0){
        say("对你造成:"); 
        cout<<ddst[a].shang[n];
        say("的伤害\n你的饱食度-5,体力-5,理智-1\n"); 
        hp-=ddst[a].shang[n];
        mp-=5;
        bao-=5;
        san--;      
        }
        else {
            say("给它回复了");
            cout<<0-ddst[a].shang[n];
            say("的血量\n");
            gw-=ddst[a].shang[n];//负数用减法 
        }
    system("pause");
    }/*下次做 
    else{

    }*/
}

void level0_red()
{
    return ;
}

void level2(){
        if(level>2) //level3();
    while(1){
    level = 2;
    ddst_level[0]=1;
    ddst_level[1]=3;
    ddst_level[2]=4;
    ddst_level[3]=11;
    system("cls");
    system("title The Backrooms 你曾经来过这里 - Level 2");
    int i, run; //工具变量
    say("");
    run = 0;
    int bs2 = xd(8, 15);
    // 层级文档
    SetPos(0, 0);
    cout << "您当前所处层级:";
    ys(2);
    cout << "Level 2";
    ys(5);//0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝
    cout << "\nM.E.G.层级文档:\n这些墙壁由\n";
    ys(5);
    cout<<"颓敝而脏污";
    ys(0);
    cout <<"的水泥筑成,在某些";
    ys(3);
    cout <<"区域";
    ys(0);
    cout <<"甚至会有砖块,后者则通常呈现";
    ys(2);
    cout <<"泥沼的棕黑色调。\n";
    Bai();
    cout <<"不论墙面自身材质的话,所有墙面的质地都";
    ys(5);
    cout <<"或多或少地";
    ys(0);
    cout <<"有些粉尘质感,且通常让";
    ys(1);
    cout <<"触摸者的手指";
    Bai();
    cout <<"留下";
    ys(3);
    cout <<"粉迹";
    Bai();
    cout <<"。\n";
    cout <<"在极度逼仄的";
    ys(6);
    cout <<"过道处";
    Bai();
    cout <<",这甚至会在衣物上留下";
    ys(4);
    cout <<"记号或是污点";
    Bai();
    cout <<",有时让皮肤";
    ys(2);
    cout <<"受到擦伤";
    Bai();
    cout <<"。\n";
    while (1)
    {
        // 清空除层级文档以外的内容
        Bai();
        SetPos(9, 0);
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        SetPos(9, 0);
        say("请按下相应数字键做出行动选择\n");
        int a = wp(), a1;//概率调大一点
//      cout<<"    "<<bs2<<"   "<<a<<"       "<<run<<"          ";
        if (a >= 1 && a <= 3) {
            say("你发现了‘杏仁水’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[1].num == 0) MessageBox(NULL, "等级:安全\n对多数流浪者的生存至关重要。\n切勿将其饮用一瓶罐未满的水\n意味着已有别的流浪者曾把它打开,他很可能已经替换了其中盛放的液体\n或者在水中加入了例如爬菌之类的有害物质。\n使用一小撮火盐就能立刻使液体沸腾,并杀死其中的细菌", "杏仁水", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 4 && a <= 6) {
            say("你发现了‘火盐’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[15].num == 0) MessageBox(NULL, "等级:安全\n火盐是一种具有爆炸性的小型晶体,通常在后室中被作为武器使用。\n", "火盐", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 7 && a <= 8) {
            say("你发现了‘皇家口粮’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[16].num == 0) MessageBox(NULL, "等级:安全\n皇家口粮为一种可食用的白色明胶。吃下它的人普遍同意其为“我所吃过的最好吃的东西”", "皇家口粮", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a == 9) {
            say("你发现了‘幸运豆奶’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[19].num == 0) MessageBox(NULL, "等级:安全\n幸运豆奶是一种由大豆制成的饮料,在后室颇受欢迎,可以与杏仁水媲美。\n幸运豆奶受欢迎度上升一定程度上得益于坚果过敏的人无法饮用杏仁水。", "幸运豆奶", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[19].num++;
            }
        }
        if(9<a&&a<=15){
            int u=xd(1,12);
            say("你发现了:");
            say(food[u].name);
            say("\n是否拾取?1. 是 2. 否\n");
            a1=read();
            if(a1==1) say("成功!\n"),food[u].num++;
        }
        if(a==50||a==70||75<a&&a<=100){
            a1=xd(0,3);
            say("真不幸,你遇到了");
            ys(5);
            say(ddst[ddst_level[a1]].name);
            cout<<endl;
            Bai();
            zd(ddst_level[a1]); 
            break;
        }
        if (1 <= a && a <= 15||a==50||a==70||75<a&&a<=100) {cout<<"\n";system("pause");continue;} //BUG被找到了
        say("1. 行走 2. 休息 3. 查看 4. 存档\n");
        i = read();
        if (i == 1)
        {
            san -= 1;
            water -= 5;
            bao += 5;
            mp -= 5;
            run++;
            ys(5);
            say("无尽的房间使你愈发烦躁。\n理智-1,饥饿+5,水分-5,体力-5\n");
            Bai();
            if (run == bs2) { //行动次数
                if(MessageBox(NULL, "是否进入(留下可以刷物资)", "提示",MB_YESNO |MB_ICONWARNING) == IDYES)
                {
                    say("一阵光闪过,你进入了Level 3\n");
                    Sleep(1200);
//                  level2();
                }
                else break; 
            }
            system("pause");
        }
        if (i == 2) {
            ys(1);
            say("平坦的地面使你感觉舒适,体力加5,理智加2。\n");
            Bai();
            mp += 5;
            san += 2;
            system("pause");
        }
        if (i == 3) {
            SetPos(10, 0);
            cout << "                                      ";// 清空当前行
            SetPos(10, 0);
            bb(10);
            break;
        }
        if (i == 4) {
            if (Save()) say("存档成功\n");
            else say("存档失败。请检查您的存档文件是否正在被使用。\n");
            system("pause");
        }
    }
    }
}

void level1() {
    if(level>1) level2();
    while(1){
    level = 1;
    system("cls");
    system("title The Backrooms 你曾经来过这里 - Level 1");
    int i, run; //工具变量
    say("");
    run = 0;
    int bs2 = xd(8, 15);
    // 层级文档
    SetPos(0, 0);
    cout << "您当前所处层级:";
    ys(2);
    cout << "Level 1";
    ys(5);//0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝
    cout << "\nM.E.G.层级文档:\n一个巨大且绵延不绝";
    Bai();
    cout << "的仓库,具有";
    ys(5);
    cout << "混凝土";
    Bai();
    cout << "构成的地板和墙壁,裸露的钢筋以及在";
    ys(4);
    cout << "较低处悬浮的来源不明的雾气。\n";
    Bai();
    cout << "这些雾气常常冷凝,形成地面上分布不均的水坑。\n与";
    ys(2);
    cout << "Level 0";
    Bai();
    cout << "不同,此层级拥有";
    ys(5);
    cout << "源源不断";
    Bai();
    cout << "的水源和电力供应,只要采取";
    ys(3);
    cout << "适当的预防措施";
    Bai();
    cout << ",流浪者们就可以";
    ys(4);
    cout << "无限期地在此居住";
    Bai();
    cout << "下去。\n同时,它的规模也大得多,还带有楼梯、电梯、独立房间和走廊。\n";
    cout << "此层级中会随机出现(或消失)一些";
    ys(4);
    cout << "补给箱";
    Bai();
    cout << ",通常包含一些";
    ys(5);
    cout << "重要物资(如食物、杏仁水、电池,防水布、武器、衣物、医疗用品等)";
    Bai();
    cout << "和一些";
    ys(5);
    cout << "无用物品(各种汽车零件、蜡笔盒、用过的注射器、部分烧焦的纸、活老鼠、因注射了某种未知物质而亢奋的老鼠、鞋带、零钱、一束人类毛发等)";
    ys(6);
    cout << "[暂时不会出现后面这一种箱子QWQ]。\n";
    while (1)
    {
        // 清空除层级文档以外的内容
        Bai();
        SetPos(9, 0);
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        SetPos(9, 0);
        say("请按下相应数字键做出行动选择\n");
        int a = wp(), a1;//概率调大一点
//      cout<<"    "<<bs2<<"   "<<a<<"       "<<run<<"          ";
        if (a >= 1 && a <= 3) {
            say("你发现了‘杏仁水’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[1].num == 0) MessageBox(NULL, "等级:安全\n对多数流浪者的生存至关重要。\n切勿将其饮用一瓶罐未满的水\n意味着已有别的流浪者曾把它打开,他很可能已经替换了其中盛放的液体\n或者在水中加入了例如爬菌之类的有害物质。\n使用一小撮火盐就能立刻使液体沸腾,并杀死其中的细菌", "杏仁水", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 4 && a <= 6) {
            say("你发现了‘火盐’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[15].num == 0) MessageBox(NULL, "等级:安全\n火盐是一种具有爆炸性的小型晶体,通常在后室中被作为武器使用。\n", "火盐", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 7 && a <= 8) {
            say("你发现了‘皇家口粮’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[16].num == 0) MessageBox(NULL, "等级:安全\n皇家口粮为一种可食用的白色明胶。吃下它的人普遍同意其为“我所吃过的最好吃的东西”", "皇家口粮", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a == 9) {
            say("你发现了‘幸运豆奶’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[19].num == 0) MessageBox(NULL, "等级:安全\n幸运豆奶是一种由大豆制成的饮料,在后室颇受欢迎,可以与杏仁水媲美。\n幸运豆奶受欢迎度上升一定程度上得益于坚果过敏的人无法饮用杏仁水。", "幸运豆奶", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[19].num++;
            }
        }
        if(9<a&&a<=15){
            int u=xd(1,12);
            say("你发现了:");
            say(food[u].name);
            say("\n是否拾取?1. 是 2. 否\n");
            a1=read();
            if(a1==1) say("成功!\n"),food[u].num++;
        }
        if(a==50||a==70||95<a&&a<=100){
            a1=xd(0,ddst_level[a1]);
            say("真不幸,你遇到了");
            ys(5);
            say(ddst[ddst_level[a1]].name);
            cout<<endl;
            Bai();
            zd(ddst_level[a1]); 
            break;
        }
        if (1 <= a && a <= 15||a==50||a==70||95<a&&a<=100) {cout<<"\n";system("pause");continue;} //BUG被找到了
        say("1. 行走 2. 休息 3. 查看 4. 存档\n");
        i = read();
        if (i == 1)
        {
            san -= 1;
            water -= 5;
            bao += 5;
            mp -= 5;
            run++;
            ys(5);
            say("无尽的房间使你愈发烦躁。\n理智-1,饥饿+5,水分-5,体力-5\n");
            Bai();
            if (run == bs2) { //行动次数
                if(MessageBox(NULL, "是否进入(留下可以刷物资)", "提示",MB_YESNO |MB_ICONWARNING) == IDYES)
                {
                    say("一阵光闪过,你进入了Level 2\n");
                    Sleep(1200);
                    level2();
                }
                else break; 
            }
            system("pause");
        }
        if (i == 2) {
            ys(1);
            say("平坦的地面使你感觉舒适,体力加5,理智加2。\n");
            Bai();
            mp += 5;
            san += 2;
            system("pause");
        }
        if (i == 3) {
            SetPos(10, 0);
            cout << "                                      ";// 清空当前行
            SetPos(10, 0);
            bb(10);
            break;
        }
        if (i == 4) {
            if (Save()) say("存档成功\n");
            else say("存档失败。请检查您的存档文件是否正在被使用。\n");
            system("pause");
        }
    }
    }
}
void level0()
{
    if(level>0) level1();
    level = 0;
    while(1){
    system("cls");
    system("title The Backrooms 你曾经来过这里 - Level 0");
    int i, run; //工具变量
    say("");
    run = 0;
    int bs2 = xd(6, 10);
    SetPos(0, 0);
    cout << "您当前所处层级:";
    ys(2);
    cout << "Level 0";
    ys(5);//0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝
    cout << "\nM.E.G.层级文档:\n泛黄的";
    Bai();
    cout << "墙纸、";
    ys(6);
    cout << "潮湿的";
    Bai();
    cout << "地毯和";
    ys(1);
    cout << "以不一致方式";
    Bai();
    cout << "安装的荧光灯具。然而,本层中不存在";
    ys(4);
    cout << "两个完全相同的房间。\n";
    Bai();
    cout << "被安装在本层空间中的荧光灯保持无规律闪烁,并以";
    ys(5);
    cout << "恒定频率";
    Bai();
    cout << "发出嗡鸣。\n这种噪声尤其响亮,明显比";
    ys(3);
    cout << "正常的荧光灯";
    Bai();
    cout << "所能制造的噪音更加刺耳,而对灯具装置进行检查以确定噪声来源的尝试以";
    ys(4);
    cout << "失败告终。\n";
    ys(6);
    cout << "浸湿地毯的物质";
    Bai();
    cout << "成分始终无法被查明。它既不是";
    ys(5);
    cout << "水";
    Bai();
    cout << ",同时也不能被安全地饮用。" << endl;
    while (1)
    {
        SetPos(6, 0);
        Bai();
        // 清空除层级文档以外的内容
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        cout << "                                                                              " << endl;
        SetPos(6, 0);
        say("请按下相应数字键做出行动选择\n");
        int a = wp(), a1;//概率调大一点
//      cout<<"    "<<bs2<<"   "<<a<<"       "<<run<<"          ";
        if (a >= 1 && a <= 3) {
            say("你发现了‘杏仁水’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[1].num == 0) MessageBox(NULL, "等级:安全\n对多数流浪者的生存至关重要。\n切勿将其饮用一瓶罐未满的水\n意味着已有别的流浪者曾把它打开,他很可能已经替换了其中盛放的液体\n或者在水中加入了例如爬菌之类的有害物质。\n使用一小撮火盐就能立刻使液体沸腾,并杀死其中的细菌", "杏仁水", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 4 && a <= 6) {
            say("你发现了‘火盐’!");
            say("是否拾取?是1,否2");
            a1 = read();
            if (a1 == 1) {
                if (Objects[15].num == 0) MessageBox(NULL, "等级:安全\n火盐是一种具有爆炸性的小型晶体,通常在后室中被作为武器使用。\n", "火盐", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a >= 7 && a <= 8) {
            say("你发现了‘皇家口粮’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[16].num == 0) MessageBox(NULL, "等级:安全\n皇家口粮为一种可食用的白色明胶。吃下它的人普遍同意其为“我所吃过的最好吃的东西”", "皇家口粮", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[1].num++;
            }
        }
        if (a == 9) {
            say("你发现了‘幸运豆奶’!");
            say("是否拾取?1. 是 2. 否");
            a1 = read();
            if (a1 == 1) {
                if (Objects[19].num == 0) MessageBox(NULL, "等级:安全\n幸运豆奶是一种由大豆制成的饮料,在后室颇受欢迎,可以与杏仁水媲美。\n幸运豆奶受欢迎度上升一定程度上得益于坚果过敏的人无法饮用杏仁水。", "幸运豆奶", MB_ICONASTERISK | MB_OK); //判断是否出现过
                Objects[19].num++;
            }
        }
        if(9<a&&a<=20){
            int u=xd(1,12);
            say("你发现了:");
            say(food[u].name);
            say("\n是否拾取?1. 是 2. 否\n");
            a1=read();
            if(a1==1) say("成功!\n"),food[u].num++;
        }
        if (1 <= a && a <= 20) { system("pause");continue;}//BUG被找到了
        say("1. 行走 2. 休息 3. 查看 4. 存档\n");
        i = read();
        if (i == 1)
        {
            san -= 1;
            water -= 5;
            bao += 5;
            mp -= 5;
            run++;
            ys(5);
            say("嗡嗡作响的灯泡使你愈发烦躁。\n理智-1,饥饿+5,水分-5,体力-5\n");
            Bai();
            if (run == bs2) { //行动次数
                if(MessageBox(NULL, "是否进入(留下可以刷物资)", "提示",MB_YESNO |MB_ICONWARNING) == IDYES)
                {
                    say("一阵光闪过,你进入了Level 1\n");
                    Sleep(1200);
                    level1();
                }
                else break; 
            }
            system("pause");
        }
        if (i == 2) {
            ys(1);
            say("潮湿的地面使你感觉不安,但是体力加5。\n");
            Bai();
            mp += 5;
            system("pause");
        }
        if (i == 3) {
            SetPos(7, 0);
            cout << "                                      ";// 清空当前行
            SetPos(7, 0);
            bb(7);
            break;
        }
        if (i == 4) {
            if (Save()) say("存档成功\n");
            else say("存档失败。请检查您的存档文件是否正在被使用。\n");
            system("pause");
        }
    }
    } 
}

void a10()//成就墙
{
    int i;
    system("cls");
    say("所有成就除标有不唯一否则都为唯一成就");
    say("成就除标有(NEW!)或不唯一否则都为系列成就");
    say("标有(MAX)的连续成就为最后一环,无后续成就");
}

int main() {
    srand(time(NULL));
    system("title Back rooms                                                                                             版权所有于Gears及其合作者所有");
    if(MessageBox(NULL,("是否读档?"),("提示"),MB_YESNO |MB_ICONWARNING) == IDYES)//判断你点的是不是按钮“是”  
        if(Read()) cout<<"读档成功\n";
        else cout << "读档失败。请检查存档是否存在或存档正在被使用" << endl;
    system("pause");
    if(level>=0) level0();
    int i;
//  level2();
    hp = 100;
    mp = 100;
    water = 100;
    san = 100;
    bao = 0;
    level=-1;
    system("cls");
    ys(3);   //0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝  say("Backrooms:你曾经来过这里");
    Bai();
    ys(5);//MessageBox(NULL,"这是一个两种属性的消息框!","标题", MB_ICONEXCLAMATION|MB_OKCANCEL );
    say("作者:Gears(洛谷名) / 一只摸鱼的屑O5(QQ名)\n");
    Bai();
    ys(2);
    say("合作者们:\nzyx_dzpd(洛谷名) / 翔翔(QQ名)\n___PatrickChen___(洛谷名 & QQ名)\n");
    Bai();
    ys(1);
    say("游戏兼规则怪谈交流群:809140433(QQ)\n");
    Bai();
    ys(4);
    say("本游戏可以保存啦!\n");
    Bai();
    system("pause");
    system("cls");

    // 进度条。问题解决了,用一个SetPos重置光标位置,直接覆盖原先内容。
    ys(1);
    cout << "                                                           %\n         ";
    ys(4);
    cout << "\n抵制不良游戏,拒绝盗版游戏。注意自我保护,谨防受骗上当。适度游戏益脑,沉迷游戏伤身。合理安排时间,享受健康生活。\n";
    for (int i = 1; i <= 100; i++) {
        if (i < 10) SetPos(0, 58);
        else if (i < 100) SetPos(0, 57);
        else SetPos(0, 56);
        ys(1);
        cout << i;
        SetPos(1, 7 + i);
        cout << "█";
        ys(4);
        Sleep(10);
    }
    SetPos(3, 0);
    Bai();
    system("pause");
    system("cls");
    Bai();
    say("进入游戏(按1)\n");
    say("查看成就墙(按2)");
    i = read();
    if (i == 2)
    {
        a10();
    }
    else if (i == 1)
    {
        system("cls");
//      say("请输入你的游戏ID");
//      cin>>ID;
    s=wp();//借用 
        system("cls");
        if (s <70)
        {
            say("你正在上班的路上奔跑。\n");
            say("你的手臂随着雨伞晃动时,雨滴落在你的兜帽上。\n");
            say("你滑倒了,雨消失了,路消失了……\n");
            say("只有黄色,一片黄色,和更多的黄色。\n");
            say("你来到了Level 0\n");
            system("pause");
            level0();
        }
        else if (s < 90)
        {
            say("疲劳的你走在回家的路上。\n");
            say("你被一个石头绊倒了。\n");
            say("你坠入了地面,夜色消失了,路消失了……\n");
            say("摔倒在混凝土地面上,你看到了一篇绵延不绝的仓库。\n");
            say("你来到了Level 1\n");
            system("pause");
            level1();
        }
        else
        {
            say("你正在水族馆里参观。\n");
            say("被人群猛推了一把的你失控地撞向了墙。\n");
            say("你撞进了墙,人群消失了,墙消失了……\n");
            say("从一篇黑暗中醒来,你看到了天花板上挂着的一排排生锈的管道。\n");
            say("你来到了Level 2\n");
            system("pause");
            level2();
        }
        chengjiu();
    }
    system("pause");
    return 0;
}