后室1.15出炉了!!!!

· · 闲话

{\Huge \mathbf{{\color{Red} 距离上期更新又过去了4个月} }}

{\huge \mathbb{公告} }

{\mathcal 1.缩减大部分代码,压缩至900行。} {\mathcal 2.武器装备优化,规定装备数量。} {\mathcal 3.暂时删除Object。} {\mathcal 4.增加设置,可以更改字体输出速度。} {\small 主要还太忙了}

听从了一位大佬的建议,我缩减了大部分代码,不过由于框架尚未搭建完成,所以删去了拾取Object,下期会加上。

代码如下

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

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

int output_speed=10;//输出速度,初始为10ms 
//常量 
void positive_negative(int x);
//武器数量 
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; //存储随机数,死亡次数 ,疯狂次数 
//加了b开头的变量是背包的物品,0是没有,1是有,没有不显示物品名称,以“***”代替。 Object 1
// 第二的字母是h,意味是后室里特有的,r是红室,m是马尼拉房间 ,如果没有这三个字母就不是特有。
int bmMEG/*来自M.E.G.的文档*/;
//人物状态
struct character{
    int hematology;         //血量 (最大值)/血限
    int hematology_now;     //现在血量 
    int stamina;            //体力 
    int water;              //水分 
    int hunger_valuer;      //饥饿值 
    int sanity;             //理智 
    int firepower;          //攻击力 
    //武器数量 
    string weaponry1,weaponry2;//最多两个  ,1左手,2右手 (武器名称) 
    int weaponry1_number,weaponry2_number;//武器序号 
    // 

    void initialization_state(){//初始化状态 
        this->hematology = 100;
        this->hematology_now =100;
        this->stamina =100;
        this->water =100;
        this->hunger_valuer =0;
        this->sanity =100;
        this->firepower =10;
        this->weaponry1 =this->weaponry2 ="空";
        this->weaponry1_number =this->weaponry2_number =0;
    }
};
character character_state;
//后室物品

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

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];//招式 
};//敌对实体 

struct jin{ //1
    int causality;//属性 
    int number;// 序号 
    string name;
}; //未来准备做技能 

struct level{
    int maybe_DDST_number;//每一层可能出现敌对实体的数量 
    int maybe_DDST_serial_number[50];//敌对实体序号 
    int maybe_DDST_possibility[50];//每只敌对实体出现概率,相加和为100

    int juzishu;//每一层的句子数量 
    int cls;//光标从哪一行开始清除 
    int num;//层级数字 
    string describe[50];//层级描述 
    int color[50];//句子颜色 
    //
    int DDST_cont_possibility1;//敌对实体出现概率0~a
    int Food_cont_possibility2;//食物出现概率a~b
    int Objects_cont_possibility3;//物品出现概率b~c
    int NONE_cont_possibility4;//无事发生c~100
    //以上四个相加为100 

}uLevel[10]={//0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝
    {0,{0},{100},22,9,0,{"您当前所处层级:","Level 0\n","安全\n","稳定\n","极少量实体","\nM.E.G.层级文档:\n泛黄的","墙纸、","潮湿的","地毯和","以不一致方式",
    "安装的荧光灯具。然而,本层中不存在","两个完全相同的房间。\n","被安装在本层空间中的荧光灯保持无规律闪烁,并以","恒定频率","发出嗡鸣。\n这种噪声尤其响亮,明显比",
    "正常的荧光灯","所能制造的噪音更加刺耳,而对灯具装置进行检查以确定噪声来源的尝试以","失败告终。\n","浸湿地毯的物质","成分始终无法被查明。它既不是","水",",同时也不能被安全地饮用。"},
    {2,5,2,6,5,0,6,0,1,0,4,0,5,0,3,0,4,6,0,5,0},
    0,30,60,100},//level 0 第一句都是白色 
    {5,{1,2,3,4,11},{100},25,12,1,{"您当前所处层级:","Level 1\n","安全\n","稳定\n","极少量实体","\nM.E.G.层级文档:\n一个巨大且绵延不绝","的仓库,具有","混凝土","构成的地板和墙壁,裸露的钢筋以及在","较低处悬浮的来源不明的雾气。","这些雾气常常冷凝,形成地面上分布不均的水坑。\n与","Level 0","不同,此层级拥有","源源不断",
    "的水源和电力供应,只要采取","适当的预防措施",",流浪者们就可以","无限期地在此居住","下去。\n同时,它的规模也大得多,还带有楼梯、电梯、独立房间和走廊。\n",
    "此层级中会随机出现(或消失)一些","补给箱",",通常包含一些","重要物资(如食物、杏仁水、电池,防水布、武器、衣物、医疗用品等)","和一些",
    "无用物品(各种汽车零件、蜡笔盒、用过的注射器、部分烧焦的纸、活老鼠、因注射了某种未知物质而亢奋的老鼠、鞋带、零钱、一束人类毛发等)","[暂时不会出现后面这一种箱子QWQ]。\n"
    },{2,5,2,6,5,0,5,0,4,0,2,0,5,0,3,0,4,0,4,0,5,0,5,6},
    10,30,60,100},//level 1
    {4,{1,3,4,11},{100},24,12,2,{"您当前所处层级:","Level 2\n","不安全\n","不稳定\n","少量实体","\nM.E.G.层级文档:\n这些墙壁由\n","颓敝而脏污","的水泥筑成,在某些","区域","甚至会有砖块,后者则通常呈现","泥沼的棕黑色调。\n","不论墙面自身材质的话,所有墙面的质地都",
    "或多或少地","有些粉尘质感,且通常让","触摸者的手指","留下","粉迹","。\n在极度逼仄的","过道处",",这甚至会在衣物上留下","记号或是污点",
    ",有时让皮肤","受到擦伤","。\n"},
    {2,5,4,3,5,5,0,3,0,2,0,5,0,1,0,3,0,6,0,4,0,2,0},
    30,50,70,100}//level 2
};

struct walk_and_break_set{//描述 

    string Description_walk;//走路描述 
    int hp_walk;//走路影响的状态 
    int mp_walk;
    int bao_walk;
    int shang_walk;
    int san_walk;
    int water_walk;

    string Description_break;//休息描述 
    int hp_break;//休息影响的状态 
    int mp_break;
    int bao_break;
    int shang_break;
    int san_break;
    int water_break;

};
walk_and_break_set walk_and_break[50]{
    {"嗡嗡作响的灯泡使你愈发烦躁。\n",0,-5,5,0,-1,-5,
    "潮湿的地面使你感觉不安\n",0,5,0,0,0,-3},//level 0
    {"无尽的房间使你愈发烦躁。\n",0,-5,5,0,0,-5,
    "平坦的地面使你感觉舒适。\n",0,5,0,0,2,0},//level 1
    {"各色隧道亦常呈狭窄逼仄之貌。\n",0,-5,5,0,-5,-1,
    "狭小的空间令你喘不过气。\n",0,0,2,0,-5,-1}//level 2
};

const int MAX_BACKROOM_OBJECTS =20;
const int MAX_WEAPONS = 11;
const int MAX_FOODS = 13;
// 初始化后室物品列表
Object Objects[MAX_BACKROOM_OBJECTS] = {
    {"", 0},
    {"杏仁水", 0,"等级:安全\n常见\n对多数流浪者的生存至关重要。\n切勿将其饮用一瓶罐未满的水\n意味着已有别的流浪者曾把它打开,他很可能已经替换了其中盛放的液体\n或者在水中加入了例如爬菌之类的有害物质。\n使用一小撮火盐就能立刻使液体沸腾,并杀死其中的细菌\n"},//1
    {"层级密钥", 0,"等级:安全\n稀有\n层级密钥是后室中发现的,十分罕见的物品。每一层级都有其对应的密钥,且可能存在多把密钥“从属于”同一层级。\n"},//2
    {"驱笑剂", 0,"等级:安全\n在事件A发生后,随着符文A - EPE-500-SRH被破译,所有驱笑剂都丧失了作用,且没有恢复的迹象\n"},//3
    {"反欧几里得装置", 0,""},//4
    {"糖果", 0,""},//5
    {"镜子", 0,""},//6
    {"记忆罐", 0,""},//7
    {"小台灯", 0,""},//8
    {"傻瓜口香糖", 0,""},//9
    {"稻草人", 0,""},//10
    {"幽鬼灯光", 0,""},//11
    {"告死裂片", 0,""},//12
    {"办公终端", 0,""},//13
    {"圣甲虫", 0,""},//14
    {"火盐", 0,"等级:安全\n火盐是一种具有爆炸性的小型晶体,通常在后室中被作为武器使用。\n"},//15
    {"皇家口粮", 0,"等级:安全\n皇家口粮为一种可食用的白色明胶。吃下它的人普遍同意其为“我所吃过的最好吃的东西”"},//16
    {"滋水枪", 0,""},//17
    {"巴别润唇膏", 0,""},//18
    {"幸运豆奶", 0,"等级:安全\n幸运豆奶是一种由大豆制成的饮料,在后室颇受欢迎,可以与杏仁水媲美。\n幸运豆奶受欢迎度上升一定程度上得益于坚果过敏的人无法饮用杏仁水。"}//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 color_float(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 Message_Show(const string& desribe,const string& name){//提示代码框架 
    MessageBox(NULL,desribe.c_str(),name.c_str(), MB_ICONASTERISK | MB_OK);
}

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(output_speed);
    }
//  printf("\n");
    Sleep(100);
}

void  Change_Character_Status(int level,int typology){//更改人物状态(层级,类型【走路或休息】)
    if(typology==1){
        character_state.hematology_now+=walk_and_break[level].hp_walk;
        character_state.stamina+=walk_and_break[level].mp_walk;
        character_state.sanity+=walk_and_break[level].san_walk;
        character_state.hunger_valuer+=walk_and_break[level].bao_walk;
        character_state.firepower+=walk_and_break[level].shang_walk;
        character_state.water+=walk_and_break[level].water_walk;
        color_float(5);
        cout<<"血量";
        positive_negative(walk_and_break[level].hp_walk);
        cout<<walk_and_break[level].hp_walk<<endl;
        cout<<"体力";
        positive_negative(walk_and_break[level].mp_walk);
        cout<<walk_and_break[level].mp_walk<<endl;
        cout<<"理智"; 
        positive_negative(walk_and_break[level].san_walk);
        cout<<walk_and_break[level].san_walk<<endl;
        cout<<"饥饿值";
        positive_negative(walk_and_break[level].bao_walk);
        cout<<walk_and_break[level].bao_walk<<endl;
        cout<<"伤害";
        positive_negative(walk_and_break[level].shang_walk);
        cout<<walk_and_break[level].shang_walk<<endl;
        cout<<"水分";
        positive_negative(walk_and_break[level].water_walk);
        cout<<walk_and_break[level].water_walk<<endl;
    }
    else if(typology==2){
        character_state.hematology_now+=walk_and_break[level].hp_break;
        character_state.stamina+=walk_and_break[level].mp_break;
        character_state.sanity+=walk_and_break[level].san_break;
        character_state.hunger_valuer+=walk_and_break[level].bao_break;
        character_state.firepower+=walk_and_break[level].shang_break;
        character_state.water+=walk_and_break[level].water_break;
        color_float(5);
        cout<<"血量";
        positive_negative(walk_and_break[level].hp_break);
        cout<<walk_and_break[level].hp_break<<endl;
        cout<<"体力";
        positive_negative(walk_and_break[level].mp_break);
        cout<<walk_and_break[level].mp_break<<endl;
        cout<<"理智"; 
        positive_negative(walk_and_break[level].san_break);
        cout<<walk_and_break[level].san_break<<endl;
        cout<<"饥饿值";
        positive_negative(walk_and_break[level].bao_break);
        cout<<walk_and_break[level].bao_break<<endl;
        cout<<"伤害";
        positive_negative(walk_and_break[level].shang_break);
        cout<<walk_and_break[level].shang_break<<endl;
        cout<<"水分";
        positive_negative(walk_and_break[level].water_break);
        cout<<walk_and_break[level].water_break<<endl;
    }
}

void zt() { //状态
    //0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝  
    SetPos(0,0);
    int k=1;
    while(k<=10){
    cout << "                                                           \n";
    k++;    
    }
    SetPos(0,0);
    color_float(0);
    cout << "血量:" ;
    color_float(2);
    cout<< character_state.hematology_now << endl;
    color_float(0);
    cout << "体力:" ;
    color_float(2);
    cout<< character_state.stamina << endl;
    color_float(0);
    cout << "水分:" ;
    color_float(2);
    cout<< character_state.water << endl;
    color_float(0);
    cout << "饥饿值:" ;
    color_float(2);
    cout<< character_state.hunger_valuer << endl;
    color_float(0);
    cout << "理智:" ;
    color_float(2);
    cout<< character_state.sanity << endl;
    color_float(0);
    cout << "攻击:" ;
    color_float(2);
    cout<< character_state.firepower << endl;
    color_float(0);
    cout << "左手装备着:";
    color_float(6);
    cout<<character_state.weaponry1<<endl;
    color_float(0);
    cout << "右手装备着:";
    color_float(6);
    cout<<character_state.weaponry2<<endl;
    color_float(0);
    system("pause");
}

void positive_negative(int x){//判断正负
    if(x>=0) cout<<"+";
}

int quickly_read() {
    while (_kbhit()) _getch();
    return _getch() - 48;
}
//滚动字幕
// 存档函数
bool Save() {
    ofstream out("Backrooms.dat");
    if (!out) return false;

    out << levelcen <<' ' << hp <<' ' << mp <<' ' << water <<' ' << bao <<' ' << san << endl;
    out << character_state.hematology <<' '<<character_state.hematology_now <<' '<< character_state.stamina;//血限,血量,体力 
    out << character_state.hunger_valuer <<' '<<character_state.water <<' '<< character_state.sanity;//饥饿值,水分,理智 
    out << character_state.firepower <<' '<< character_state.weaponry1 <<' '<< character_state.weaponry2;//伤害,武器名1,武器名2 
    out << character_state.weaponry1_number <<' '<< character_state.weaponry2_number;//武器序号1,武器序号2 

    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 >> levelcen >> hp >> mp >> water >> bao >> san;
    in >> character_state.hematology >>character_state.hematology_now >>character_state.stamina;//血限,血量,体力 
    in >> character_state.hunger_valuer >>character_state.water >> character_state.sanity;//饥饿值,水分,理智 
    in >> character_state.firepower >> character_state.weaponry1 >> character_state.weaponry2;//伤害,武器名1,武器名2 
    in >> character_state.weaponry1_number >>character_state.weaponry2_number;//武器序号1,武器序号2 

    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 Random() { //随机出现物品 
    srand(static_cast<unsigned int>(time(NULL)));
    int a = rand() % 100;//100%
    return a;
}

int Random_1_to_x(int x) { //概率 1~x 
    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 Random_x_to_y(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=quickly_read(),x;
    SetPos(h, 0);
    cout << "                                                             ";
    SetPos(h, 0);
    if(u==1){
        for (int i = 1, y = 1; i <= MAX_BACKROOM_OBJECTS-1; y = y % 6 + 1, ++i) {
            color_float(y);
            cout <<i<<"."<< Objects[i].name << ":" << Objects[i].num << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        color_float(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-1; y = y % 6 + 1, ++i) {
            color_float(y);
            cout<<i<<"."<<wuqi[i].name<< ":" <<wuqi[i].num << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        color_float(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-1; y = y % 6 + 1, ++i) {
            color_float(y);
            cout <<i<<"."<< food[i].name << ":" << food[i].num  << endl, f = 1;
        }
        if (!f) cout << "空" << endl;
        color_float(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);
        color_float(5);
        say(ddst[a].name);
        Bai();
        say("嘶吼着向你袭来!\n");
        color_float(5);
        say(ddst[a].name);
        Bai();
        say("有");
        color_float(4);
        cout<<gw;
        Bai();
        cout<<"/";
        color_float(2); 
        cout<<ddst[a].hp;
        Bai();
        cout<<"的血量\n";
        say("你选择:1.背包 2.攻击 3.逃跑\n");
        y=quickly_read();
        if(y==1) bb(1);
        else if(y==2){
            if(Random_1_to_x(ddst[a].hit)==2){
                color_float(3);
                say(ddst[a].name);
                Bai();
                say("躲过了你的攻击\n");
            }
            else{
                if(Random_1_to_x(70)==1){
                    color_float(3);
                    say(ddst[a].name);
                    Bai();
                    say("受到了攻击,它似乎更加愤怒\n");
                    gw-=cs;
                    say("遭受:");
                    cout<<cs ;
                    say("的伤害\n");
                }
                else {
                    say("你的伤害造成“暴击”,伤害翻倍。\n");
                    gw-=cs*2;
                    color_float(3);
                    say(ddst[a].name);
                    Bai();
                    say("遭受:");
                    cout<<cs*2 ;
                    say("的伤害\n");
                }
            }
            if(gw<=0){
                color_float(3);
                say(ddst[a].name);
                Bai();
                say("倒了下去,你胜利了!\n");
                break;
            }
        }
        else {
            int y=40;//逃出概率
            if(Random_1_to_x(y)==2) say("怪物仍在身后,但似乎拉开了距离\n"),y+=10; 
            else say("没用的,它来了\n"),y-=5;
        }
        int n;
        if(Random_1_to_x(70)==1) n=0;
        else{
            if(Random_1_to_x(20)==1) n=1;
            else n=2;
        }
        say("它使用"); 
        color_float(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 cls_erase(int cengji){//清空文档 
    SetPos(uLevel[cengji].cls,0);
    for(int i=1;i<=10;i++){
        cout << "                                                                              " << endl;
    }
    SetPos(uLevel[cengji].cls,0);
}

void setup(){//设置
    while(1){
        SetPos(0,0);
        for(int i=1;i<=10;i++){
            cout << "                                                                              " << endl;
        }
        SetPos(0,0);
        say("0.退出\n");
        say("1.字幕输出速度(本次输出需要回车)\n");
        int choose;
        cin>>choose;
        if(choose==0) break;
        else if(choose==1){
            say("当前输出速度:");
            cout<<output_speed<<"毫秒\n";
            say("是否更改   1.是   2.否\n");
            int choose=quickly_read();
            if(choose==1){
                say("更改为(需要回车):");
                cin>>output_speed;
            }
        }
    }
}

void out_describe(int cen){//输出层级描述 
    color_float(0);
    for(int i=0;i<uLevel[cen].juzishu;i++){
        say(uLevel[cen].describe[i]);       
        color_float(uLevel[cen].color[i]);
    }                       
    cout<<"\n";
} 

void level_strut_zong(){//层级形容 
    cls_erase(levelcen);
    while(1){
        SetPos(0,0);
        int step1 = 0;
        int step2 = Random_x_to_y(6, 10);   
        out_describe(levelcen);
        while(1){
            cls_erase(levelcen);

            say("请按下相应数字键做出行动选择\n");
            int possibility=Random();
            say("1. 行走 2. 休息 3. 查看 4. 存档\n");
            int choose= quickly_read();
            int choose_Object;//概率调大一点
            if (1 <= possibility && possibility <= uLevel[levelcen].DDST_cont_possibility1) { 
                int DDST_meet=Random_1_to_x(uLevel[levelcen].maybe_DDST_number);     
                say("一声声嘶吼刺进你的心\n一转头,你遇到了");
                cout<<ddst[uLevel[levelcen].maybe_DDST_serial_number[DDST_meet]].name<<endl;
                system("pause");
                zd(uLevel[levelcen].maybe_DDST_serial_number[DDST_meet]) ;
            }
            if (choose == 1)
            {
                step1++;
                say(walk_and_break[levelcen].Description_walk);
                Change_Character_Status(levelcen,1);
                Bai();
                if (step1 == step2) { //行动次数
                    if(MessageBox(NULL, "是否进入(留下可以刷物资)", "提示",MB_YESNO |MB_ICONWARNING) == IDYES)
                    {
                        levelcen++;
                        say("一阵光闪过,你进入了Level \n");
                        cout<<levelcen;
                        Sleep(1200);
                        level_strut_zong();
                    }
                    else break; 
                }
                system("pause");
            }
            if (choose== 2) {
                color_float(1);
                say(walk_and_break[levelcen].Description_break);
                Bai();
                Change_Character_Status(levelcen,2);
                system("pause");
            }
            if (choose== 3) {
                SetPos(7, 0);
                cout << "                                      ";// 清空当前行
                SetPos(7, 0);
                bb(7);
                break;
            }
            if (choose== 4) {
                if (Save()) say("存档成功\n");
                else say("存档失败。请检查您的存档文件是否正在被使用。\n");
                system("pause");
            }
            cls_erase(levelcen);
            SetPos(uLevel[levelcen].cls,0); 
        }
    }
}

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

int main() {
    character_state.initialization_state();//初始化人物 
    levelcen=0;
//  level_strut_zong();
    srand(time(NULL));
    system("title Back rooms                                                                                             版权所有于Gears及其合作者所有");
    int i;
    hp = 100;
    mp = 100;
    water = 100;
    san = 100;
    bao = 0;
    levelcen=-1;
    system("cls");
    color_float(3);   //0白  1蓝绿  2绿   3紫   4粉红   5亮黄 6青蓝  say("Backrooms:你曾经来过这里");
    Bai();
    color_float(5);
    say("作者:Gears(洛谷名) / 一只摸鱼的屑O5(QQ名)\n");
    Bai();
    color_float(2);
    say("合作者们:\nzyx_dzpd(洛谷名) / 翔翔(QQ名)\n___PatrickChen___(洛谷名 & QQ名)\n");
    Bai();
    color_float(1);
    say("游戏兼规则怪谈交流群:809140433(QQ)\n");
    Bai();
    color_float(4);
    say("本游戏可以保存啦!\n");
    Bai();
    system("pause");
    system("cls");

    // 进度条。问题解决了,用一个SetPos重置光标位置,直接覆盖原先内容。
    color_float(1);
    cout << "                                                           %\n         ";
    color_float(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);
        color_float(1);
        cout << i;
        SetPos(1, 7 + i);
        cout << "█";
        color_float(4);
        Sleep(10);
    }
    SetPos(3, 0);
    Bai();
    if(MessageBox(NULL,("是否读档?"),("提示"),MB_YESNO |MB_ICONWARNING) == IDYES)//判断你点的是不是按钮“是”  
        if(quickly_read()) cout<<"读档成功\n";
        else cout << "读档失败。请检查存档是否存在或存档正在被使用" << endl;
    system("pause");
    while(1){
        system("cls");
        Bai();
        say("进入游戏(按1)\n");
        say("查看成就墙(按2)\n");
        say("设置(按3)\n");
        i = quickly_read();
        if (i == 2)
        {
            a10();
        }
        else if (i == 1)
    {
            system("cls");
    //      say("请输入你的游戏ID");
    //      cin>>ID;
        s=Random();//借用 
            system("cls");
            if (s <70)
            {
                say("你正在上班的路上奔跑。\n");
                say("你的手臂随着雨伞晃动时,雨滴落在你的兜帽上。\n");
                say("你滑倒了,雨消失了,路消失了……\n");
                say("只有黄色,一片黄色,和更多的黄色。\n");
                say("你来到了Level 0\n");
                system("pause");
                system("cls");
                levelcen=0;
                level_strut_zong();
            }
            else if (s < 90)
            {
                say("疲劳的你走在回家的路上。\n");
                say("你被一个石头绊倒了。\n");
                say("你坠入了地面,夜色消失了,路消失了……\n");
                say("摔倒在混凝土地面上,你看到了一篇绵延不绝的仓库。\n");
                say("你来到了Level 1\n");
                system("pause");
                system("cls");
                levelcen=1;
                level_strut_zong();
            }
            else
            {
                say("你正在水族馆里参观。\n");
                say("被人群猛推了一把的你失控地撞向了墙。\n");
                say("你撞进了墙,人群消失了,墙消失了……\n");
                say("从一篇黑暗中醒来,你看到了天花板上挂着的一排排生锈的管道。\n");
                say("你来到了Level 2\n");
                system("pause");
                system("cls");
                levelcen=2;
                level_strut_zong();
            }
            chengjiu();
        }
        else if(i==3){
            setup();//设置 
        }
    } 
    system("pause");
    return 0;
}

点赞+关注+评论可以有效催更哦

又及:版权所有,请勿盗用