#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <windows.h>  // Windows 控制台颜色(Linux/mac请删除此行)

using namespace std;

// 游戏角色状态
struct Player {
    int fear = 0;        // 恐惧值(满100死亡)
    int level = 0;       // 当前楼层
    bool escaped = false;// 是否逃脱
    bool dead = false;   // 是否死亡
};

// 设置控制台文字颜色 (Windows专用)
void setColor(int color) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}

// 重置颜色为白色
void resetColor() {
    setColor(7);
}

// 打印后室LOGO
void printLogo() {
    setColor(6);
    cout << "\n=====================================\n";
    cout << "        后 室 THE BACKROOMS\n";
    cout << "=====================================\n";
    resetColor();
}

// 显示当前楼层描述
void showLevel(int level) {
    setColor(4);
    cout << "\n【当前楼层:Level " << level << "】\n";
    resetColor();
    
    switch(level) {
        case 0:
            cout << "一片无尽的黄色潮湿地毯,荧光灯嗡嗡作响,空气潮湿发霉...\n";
            break;
        case 1:
            cout << "废弃的工业仓库,黑暗的走廊,金属墙壁冰冷刺骨...\n";
            break;
        case 2:
            cout << "狭窄的管道迷宫,蒸汽嘶嘶作响,到处都是生锈的金属...\n";
            break;
        default:
            cout << "无尽的黑暗,你不知道自己在哪里...\n";
            break;
    }
}

// 随机触发恐怖事件
void randomEvent(Player &p) {
    int event = rand() % 5;
    
    setColor(12);
    switch(event) {
        case 0:
            cout << "\n【异响】远处传来模糊的低语声... 恐惧值+10\n";
            p.fear += 10;
            break;
        case 1:
            cout << "\n【幻觉】墙壁开始扭曲,你感到头晕目眩... 恐惧值+15\n";
            p.fear += 15;
            break;
        case 2:
            cout << "\n【实体】听到急促的脚步声正在靠近!... 恐惧值+20\n";
            p.fear += 20;
            break;
        case 3:
            cout << "\n【安全】你发现了一处相对安静的角落,精神平复了一些... 恐惧值-5\n";
            p.fear -= 5;
            if(p.fear < 0) p.fear = 0;
            break;
        default:
            cout << "\n【寂静】只有无尽的安静,这种安静更让人恐惧... 恐惧值+5\n";
            p.fear += 5;
            break;
    }
    resetColor();
}

// 检查状态
void checkStatus(Player &p) {
    // 恐惧值上限
    if(p.fear >= 100) {
        setColor(4);
        cout << "\n=====================================\n";
        cout << "  你被恐惧吞噬,精神彻底崩溃!\n";
        cout << "           游戏结束\n";
        cout << "=====================================\n";
        resetColor();
        p.dead = true;
        return;
    }

    // 楼层通关
    if(p.level >= 3) {
        setColor(10);
        cout << "\n=====================================\n";
        cout << "    你找到了出口!成功逃离后室!\n";
        cout << "           你赢了!\n";
        cout << "=====================================\n";
        resetColor();
        p.escaped = true;
        return;
    }
}

// 显示状态面板
void showPanel(Player &p) {
    setColor(11);
    cout << "\n-------------------------\n";
    cout << "恐惧值:" << p.fear << "/100\n";
    cout << "状态:" << (p.fear > 70 ? "极度恐慌" : (p.fear > 40 ? "不安" : "平静")) << "\n";
    cout << "-------------------------\n";
    resetColor();
}

// 游戏主逻辑
void startGame() {
    Player p;
    char move;
    
    while(!p.dead && !p.escaped) {
        showLevel(p.level);
        showPanel(p);
        
        // 玩家操作
        cout << "\n请选择行动 (W-前进 S-后退 A-左拐 D-右拐 Q-退出):";
        cin >> move;
        
        if(move == 'Q' || move == 'q') {
            cout << "\n你放弃了探索...\n";
            break;
        }
        
        // 随机前进楼层
        int randMove = rand() % 3;
        if(randMove == 0) {
            p.level++;
            setColor(14);
            cout << "\n你穿过了一道无形的屏障,来到了更深的楼层!\n";
            resetColor();
        }
        
        // 触发事件
        randomEvent(p);
        // 检查状态
        checkStatus(p);
    }
}

int main() {
    srand(time(0)); // 随机数种子
    system("mode con cols=50 lines=20"); // 调整窗口大小
    SetConsoleTitleA("后室 The Backrooms - C++游戏"); // 设置窗口标题
    
    printLogo();
    setColor(14);
    cout << "欢迎来到后室,一旦误入,很难逃离...\n";
    cout << "你的目标:找到出口,不要让恐惧值满格!\n";
    resetColor();
    
    cout << "\n开始游戏?(Y/N):";
    char start;
    cin >> start;
    
    if(start == 'Y' || start == 'y') {
        startGame();
    } else {
        cout << "\n你选择了留在现实世界...\n";
    }
    
    return 0;
}