• 个人简介

    【史诗级作文(进来学习)】


    【作文第2篇】


    【博客】

    【博客目录】《示人握持》


    67🤤


    friend

    @

    @

    @


    加压(gf25007)


    衣柜里的第三个人

    【衣柜里的第三个人】(小说)

    【衣柜里的第三个人续篇・猎物反噬】


    fbq探案集

    fbq探案集

    fbq探案集2

    fbq探案集3

    fbq探案集4

    fbq探案集5

    fbq探案集6


    小游戏合集 👇👇

    //-std=c++11
    #include <iostream>
    #include <vector>
    #include <fstream>
    #include <conio.h>
    #include <windows.h>
    #include <cstdlib>
    #include <ctime>
    #include <iomanip>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    enum Color {
        BLACK = 0, BLUE = 1, GREEN = 2, CYAN = 3, RED = 4,
        MAGENTA = 5, BROWN = 6, LGRAY = 7, GRAY = 8, LBLUE = 9,
        LGREEN = 10, LCYAN = 11, LRED = 12, LMAGENTA = 13, YELLOW = 14, WHITE = 15
    };
    
    void setColor(int c) {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    
    void clear() { system("cls"); }
    
    void waitKey() {
        setColor(WHITE);
        cout << "\n按任意键返回...";
        _getch();
    }
    
    int getHighScore(const string& name) {
        ifstream fin("score.dat");
        string n; int s;
        while (fin >> n >> s) if (n == name) return s;
        return 0;
    }
    
    void saveHighScore(const string& name, int score) {
        vector<pair<string, int>> vec;
        ifstream fin("score.dat"); string n; int s;
        bool found = false;
        while (fin >> n >> s) {
            if (n == name) {
                vec.emplace_back(n, max(score, s));
                found = true;
            } else vec.emplace_back(n, s);
        }
        if (!found) vec.emplace_back(name, score);
        ofstream fout("score.dat");
        for (auto& p : vec) fout << p.first << " " << p.second << endl;
    }
    
    int chooseDifficulty() {
        clear();
        setColor(LBLUE);
        cout << "============ 难度选择 ============\n\n";
        setColor(WHITE);
        cout << "1 - 简单\n2 - 普通\n3 - 困难\n\n";
        cout << "选择: ";
        int c = _getch() - '0';
        return (c < 1 || c > 3) ? 2 : c;
    }
    
    int speedByDifficulty(int d) {
        if (d == 1) return 180;
        if (d == 2) return 120;
        return 70;
    }
    
    void showHelp() {
        clear();
        setColor(LCYAN);
        cout << "==================== 操作说明 ====================\n\n";
        setColor(WHITE);
        cout << "X      退出/返回\n";
        cout << "WASD   移动\n";
        cout << "空格   跳跃(小恐龙)\n";
        cout << "===================================================\n";
        waitKey();
    }
    
    void showTutorial() {
        clear();
        setColor(YELLOW);
        cout << "==================== 游戏教程 ====================\n\n";
        setColor(WHITE);
        cout << "【贪吃蛇】多食物同时存在,吃F得分\n";
        cout << "【2048】相同数字合并,目标2048\n";
        cout << "【打砖块】接住小球,不让它掉落\n";
        cout << "【猜数字】猜1-100数字,提示大小\n";
        cout << "【小恐龙】空格跳跃躲避仙人掌,越跑越快\n";
        cout << "===================================================\n";
        waitKey();
    }
    
    // ==================== 贪吃蛇 · 多食物版 ====================
    void gameSnake() {
        int diff = chooseDifficulty();
        int spd = speedByDifficulty(diff);
        enum class Dir { STOP, LEFT, RIGHT, UP, DOWN };
        struct Point { int x, y; };
    
        bool over = false;
        const int w = 20, h = 20;
        const int FOOD_COUNT = 5;
        vector<Point> foods;
        int score = 0;
        Dir dir = Dir::STOP;
        vector<Point> snake;
        snake.push_back({w/2, h/2});
        int high = getHighScore("snake");
    
        auto addFood = [&]() {
            bool ok;
            Point p;
            do {
                ok = true;
                p.x = rand() % w;
                p.y = rand() % h;
                for (auto& s : snake) if (s.x == p.x && s.y == p.y) ok = false;
                for (auto& f : foods) if (f.x == p.x && f.y == p.y) ok = false;
            } while (!ok);
            foods.push_back(p);
        };
    
        for (int i = 0; i < FOOD_COUNT; i++) addFood();
    
        while (!over) {
            clear();
            setColor(LGREEN);
            for (int i = 0; i < w+2; i++) cout << "#"; cout << endl;
    
            for (int i = 0; i < h; i++) {
                setColor(LGREEN); cout << "#";
                for (int j = 0; j < w; j++) {
                    bool isBody = false;
                    bool isFood = false;
                    for (auto& s : snake) if (s.x == j && s.y == i) { isBody = true; break; }
                    for (auto& f : foods) if (f.x == j && f.y == i) { isFood = true; break; }
    
                    if (i == snake[0].y && j == snake[0].x) { setColor(WHITE); cout << "O"; }
                    else if (isFood) { setColor(LRED); cout << "F"; }
                    else if (isBody) { setColor(LGREEN); cout << "o"; }
                    else cout << " ";
                }
                setColor(LGREEN); cout << "#\n";
            }
            for (int i = 0; i < w+2; i++) cout << "#";
            setColor(WHITE);
            cout << "\n分数: " << score << "   最高分: " << high << "   按X退出\n";
    
            if (_kbhit()) {
                char ch = _getch();
                if (ch == 'x' || ch == 'X') break;
                switch (ch) {
                    case 'a': if (dir != Dir::RIGHT) dir = Dir::LEFT; break;
                    case 'd': if (dir != Dir::LEFT) dir = Dir::RIGHT; break;
                    case 'w': if (dir != Dir::DOWN) dir = Dir::UP; break;
                    case 's': if (dir != Dir::UP) dir = Dir::DOWN; break;
                }
            }
    
            Point head = snake[0];
            switch (dir) {
                case Dir::LEFT: head.x--; break;
                case Dir::RIGHT: head.x++; break;
                case Dir::UP: head.y--; break;
                case Dir::DOWN: head.y++; break;
                default: break;
            }
            snake.insert(snake.begin(), head);
    
            bool ate = false;
            for (auto it = foods.begin(); it != foods.end(); ++it) {
                if (head.x == it->x && head.y == it->y) {
                    foods.erase(it);
                    score += 10;
                    ate = true;
                    break;
                }
            }
    
            if (ate) addFood();
            else snake.pop_back();
    
            if (head.x < 0 || head.x >= w || head.y < 0 || head.y >= h) over = true;
            for (size_t i = 1; i < snake.size(); i++)
                if (snake[i].x == head.x && snake[i].y == head.y) over = true;
    
            Sleep(spd);
        }
    
        setColor(LRED);
        cout << "\n===== GAME OVER =====\n";
        if (score > high) {
            setColor(YELLOW);
            cout << "?? 新纪录!\n";
            saveHighScore("snake", score);
        }
        waitKey();
    }
    
    // ==================== 2048 完整修复版 ====================
    void game2048() {
        const int SZ = 4;
        int grid[SZ][SZ] = {0};
        int score = 0;
        int high = getHighScore("2048");
    
        auto hasEmpty = [&]() {
            for (int i = 0; i < SZ; ++i)
                for (int j = 0; j < SZ; ++j)
                    if (grid[i][j] == 0) return true;
            return false;
        };
    
        auto canMove = [&]() {
            for (int i = 0; i < SZ; ++i)
                for (int j = 0; j < SZ; ++j) {
                    int v = grid[i][j];
                    if (j < SZ-1 && grid[i][j+1] == v) return true;
                    if (i < SZ-1 && grid[i+1][j] == v) return true;
                }
            return false;
        };
    
        auto addRandom = [&]() {
            if (!hasEmpty()) return;
            vector<pair<int, int>> pos;
            for (int i = 0; i < SZ; ++i)
                for (int j = 0; j < SZ; ++j)
                    if (grid[i][j] == 0) pos.emplace_back(i, j);
            int r = rand() % pos.size();
            grid[pos[r].first][pos[r].second] = (rand() % 10 < 9) ? 2 : 4;
        };
    
        auto draw = [&]() {
            clear();
            setColor(LBLUE);
            cout << "============== 2048 ==============\n\n";
            setColor(WHITE);
            cout << "分数: " << score << "    最高分: " << high << "\n\n";
            for (int i = 0; i < SZ; ++i) {
                for (int j = 0; j < SZ; ++j) {
                    int v = grid[i][j];
                    if (v == 0)      { setColor(GRAY);    cout << setw(6) << "."; }
                    else if (v == 2) { setColor(WHITE);   cout << setw(6) << v; }
                    else if (v == 4) { setColor(LGREEN);  cout << setw(6) << v; }
                    else if (v == 8) { setColor(CYAN);    cout << setw(6) << v; }
                    else if (v == 16){ setColor(YELLOW);  cout << setw(6) << v; }
                    else if (v == 32){ setColor(LRED);    cout << setw(6) << v; }
                    else if (v == 64){ setColor(MAGENTA); cout << setw(6) << v; }
                    else             { setColor(RED);     cout << setw(6) << v; }
                }
                cout << "\n\n";
            }
            setColor(WHITE);
            cout << "WASD移动  X退出\n";
        };
    
        auto slideLine = [&](int line[]) {
            int tmp[SZ] = {0}, idx = 0;
            for (int i = 0; i < SZ; ++i) if (line[i]) tmp[idx++] = line[i];
            for (int i = 0; i < SZ-1; ++i) {
                if (tmp[i] && tmp[i] == tmp[i+1]) {
                    tmp[i] *= 2; score += tmp[i]; tmp[i+1] = 0;
                }
            }
            int res[SZ] = {0}; idx = 0;
            for (int i = 0; i < SZ; ++i) if (tmp[i]) res[idx++] = tmp[i];
            memcpy(line, res, sizeof(res));
        };
    
        auto left = [&]() {
            int old[SZ][SZ]; memcpy(old, grid, sizeof(grid));
            for (int i = 0; i < SZ; ++i) slideLine(grid[i]);
            return memcmp(old, grid, sizeof(grid)) != 0;
        };
    
        auto right = [&]() {
            int old[SZ][SZ]; memcpy(old, grid, sizeof(grid));
            for (int i = 0; i < SZ; ++i) {
                int line[SZ];
                for (int j = 0; j < SZ; ++j) line[j] = grid[i][SZ-1-j];
                slideLine(line);
                for (int j = 0; j < SZ; ++j) grid[i][SZ-1-j] = line[j];
            }
            return memcmp(old, grid, sizeof(grid)) != 0;
        };
    
        auto up = [&]() {
            int old[SZ][SZ]; memcpy(old, grid, sizeof(grid));
            for (int j = 0; j < SZ; ++j) {
                int line[SZ];
                for (int i = 0; i < SZ; ++i) line[i] = grid[i][j];
                slideLine(line);
                for (int i = 0; i < SZ; ++i) grid[i][j] = line[i];
            }
            return memcmp(old, grid, sizeof(grid)) != 0;
        };
    
        auto down = [&]() {
            int old[SZ][SZ]; memcpy(old, grid, sizeof(grid));
            for (int j = 0; j < SZ; ++j) {
                int line[SZ];
                for (int i = 0; i < SZ; ++i) line[i] = grid[SZ-1-i][j];
                slideLine(line);
                for (int i = 0; i < SZ; ++i) grid[SZ-1-i][j] = line[i];
            }
            return memcmp(old, grid, sizeof(grid)) != 0;
        };
    
        addRandom(); addRandom();
        draw();
    
        while (true) {
            if (!_kbhit()) continue;
            char c = _getch();
            if (c == 'x' || c == 'X') break;
            bool moved = false;
            switch (c) {
                case 'a': moved = left(); break;
                case 'd': moved = right(); break;
                case 'w': moved = up(); break;
                case 's': moved = down(); break;
            }
            if (moved) { addRandom(); draw(); }
            if (!hasEmpty() && !canMove()) {
                setColor(LRED);
                cout << "\n===== GAME OVER =====\n";
                break;
            }
        }
    
        if (score > high) saveHighScore("2048", score);
        waitKey();
    }
    
    // ==================== 打砖块 ====================
    void gameBrick() {
        int diff = chooseDifficulty();
        int spd = speedByDifficulty(diff);
        const int w = 24, h = 12;
        int bx = w/2, by = h/2;
        int dx = 1, dy = -1;
        int pad = w/2 - 2;
        const int padW = 5;
        int score = 0;
        int high = getHighScore("brick");
    
        while (true) {
            clear();
            setColor(LGREEN);
            for (int i = 0; i < w+2; i++) cout << "#"; cout << endl;
    
            for (int i = 0; i < h; i++) {
                setColor(LGREEN); cout << "#";
                for (int j = 0; j < w; j++) {
                    if (i == by && j == bx) { setColor(WHITE); cout << "O"; }
                    else cout << " ";
                }
                setColor(LGREEN); cout << "#\n";
            }
    
            cout << "#";
            for (int j = 0; j < w; j++) {
                if (j >= pad && j < pad+padW) cout << "=";
                else cout << " ";
            }
            cout << "#\n";
            for (int i = 0; i < w+2; i++) cout << "#";
    
            setColor(WHITE);
            cout << "\n分数: " << score << "   最高分: " << high << "   A/D移动 X退出\n";
    
            if (_kbhit()) {
                char c = _getch();
                if (c == 'a' && pad > 0) pad--;
                if (c == 'd' && pad+padW < w) pad++;
                if (c == 'x' || c == 'X') break;
            }
    
            bx += dx; by += dy;
    
            if (bx <= 0 || bx >= w-1) { dx *= -1; }
            if (by <= 0) { dy *= -1; }
    
            if (by == h-1 && bx >= pad && bx < pad+padW) { dy *= -1; score += 5; }
            if (by >= h) {
                setColor(LRED);
                cout << "\n===== GAME OVER =====\n";
                break;
            }
    
            Sleep(spd);
        }
        if (score > high) {
            setColor(YELLOW);
            cout << "?? 新纪录!\n";
            saveHighScore("brick", score);
        }
        waitKey();
    }
    
    // ==================== 猜数字 ====================
    void gameGuess() {
        clear();
        int ans = rand() % 100 + 1;
        int g, cnt = 0;
        int high = getHighScore("guess");
    
        setColor(LBLUE);
        cout << "======== 猜数字游戏 ========\n\n";
        setColor(WHITE);
        cout << "已生成 1~100 的数字,开始猜吧!\n\n";
    
        while (true) {
            cout << "请输入: ";
            cin >> g; cnt++;
            if (g < ans) {
                setColor(YELLOW);
                cout << "小了!\n";
            } else if (g > ans) {
                setColor(YELLOW);
                cout << "大了!\n";
            } else {
                setColor(LGREEN);
                cout << "\n恭喜猜对!次数: " << cnt << endl;
                int score = max(0, 100 - cnt);
                if (score > high) {
                    cout << "?? 新纪录!\n";
                    saveHighScore("guess", score);
                }
                break;
            }
            setColor(WHITE);
        }
        waitKey();
    }
    
    // ==================== 谷歌小恐龙(已修复跳跃R消失) ====================
    void gameDino() {
        int diff = chooseDifficulty();
        int spd = speedByDifficulty(diff);
    
        const int GROUND = 4;
        const int WIDTH = 35;
    
        int dinoY = GROUND;
        bool isJumping = false;
        int velY = 0;
        const int gravity = 1;
        const int jumpPower = -4;
    
        int cactusX = WIDTH - 5;
        int score = 0;
        int high = getHighScore("dino");
    
        while (true) {
            clear();
    
            setColor(WHITE);
            cout << "===== 谷歌小恐龙 =====\n";
            cout << "分数: " << score << "   最高分: " << high << "\n\n";
    
            for (int y = 0; y <= GROUND; ++y) {
                for (int x = 0; x < WIDTH; ++x) {
                    if (x == 5 && y == dinoY) {
                        setColor(LCYAN); cout << "R";
                    } else if (x == cactusX && y == GROUND) {
                        setColor(LGREEN); cout << "#";
                    } else {
                        setColor(WHITE); cout << " ";
                    }
                }
                cout << endl;
           }
    
            setColor(GRAY);
            for (int x = 0; x < WIDTH; ++x) cout << "=";
            cout << endl;
    
            setColor(WHITE);
            cout << "\n空格跳跃   X 退出";
    
            if (_kbhit()) {
                char k = _getch();
                if (k == ' ' && dinoY == GROUND) {
                    isJumping = true;
                    velY = jumpPower;
                }
                if (k == 'x' || k == 'X') break;
            }
    
            if (isJumping) {
                velY += gravity;
                dinoY += velY;
    
                if (dinoY >= GROUND) {
                    dinoY = GROUND;
                    isJumping = false;
                    velY = 0;
                }
            }
    
            cactusX--;
            if (cactusX < 0) {
                score++;
                cactusX = WIDTH - (rand() % 10 + 8);
                if (spd > 30) spd--;
            }
    
            if (cactusX == 5 && dinoY == GROUND) {
                setColor(LRED);
                cout << "\n\n===== GAME OVER =====\n";
                break;
            }
    
            Sleep(spd);
        }
    
        if (score > high) {
            setColor(YELLOW);
            cout << "?? 新纪录!\n";
            saveHighScore("dino", score);
        }
        waitKey();
    }
    
    // ==================== 主菜单 ====================
    int main() {
        SetConsoleTitle("C++ 超级小游戏合集");
        srand((unsigned)time(NULL));
        while (true) {
            clear();
            setColor(LBLUE);
            cout << "======= C++ 超级小游戏合集 =======\n\n";
            setColor(WHITE);
            cout << " 1 - 贪吃蛇(多食物)\n";
            cout << " 2 - 2048\n";
            cout << " 3 - 打砖块\n";
            cout << " 4 - 猜数字\n";
            cout << " 5 - 小恐龙\n";
            cout << " 6 - 操作说明\n";
            cout << " 7 - 游戏教程\n";
            cout << " 0 - 退出\n\n";
            cout << "请选择: ";
    
            char c = _getch();
            switch (c) {
                case '1': gameSnake(); break;
                case '2': game2048(); break;
                case '3': gameBrick(); break;
                case '4': gameGuess(); break;
                case '5': gameDino(); break;
                case '6': showHelp(); break;
                case '7': showTutorial(); break;
                case '0':
                    clear();
                    setColor(LCYAN);
                    cout << "\n再见!\n";
                    setColor(WHITE);
                    return 0;
            }
        }
    }
    
    
    

    二战犹太人的经历

    #include <iostream>
    #include <string>
    #include <cstdlib>
    #include <ctime>
    #include <windows.h>
    using namespace std;
    
    int day = 1;
    int hp = 100;
    int hunger = 0;
    int courage = 20;
    int trust = 30;
    
    bool alive = true;
    bool has_family = true;
    bool has_friend = false;
    bool in_school = false;
    
    bool is_newsboy = false;
    bool newsboy_warsaw = false;
    bool newsboy_paris = false;
    
    bool in_paper = false;
    bool in_smuggle = false;
    bool uprising = false;
    
    bool war_front = false;
    bool trench = false;
    bool wounded = false;
    bool prisoner = false;
    bool comrade_alive = true;
    
    bool escape_to_france = false;
    bool met_sister_marie = false;
    bool reached_paris = false;
    bool paris_resistance = false;
    bool survived_france = false;
    
    // 颜色函数
    void color(int c) {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
    }
    
    void clear() { system("cls"); }
    void wait(int ms) { Sleep(ms); }
    void line() {
        color(8);
        cout << "-----------------------------------------\n";
        color(7);
    }
    
    void hideCursor() {
        CONSOLE_CURSOR_INFO cci;
        cci.bVisible = FALSE;
        cci.dwSize = 1;
        SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cci);
    }
    
    void status() {
        color(10);
        cout << "========== 二战生存记录 ==========\n";
        color(11);
        cout << "第" << day << "天 | 生命:" << hp << " 饥饿:" << hunger << " 勇气:" << courage << " 信任:" << trust << endl;
        color(14);
        cout << "亲人:" << (has_family?"在一起":"失散") << " | 朋友:" << (has_friend?"伊扎克":"无") << endl;
        color(13);
        cout << "身份: ";
        if (is_newsboy) cout << "地下卖报人 ";
        if (war_front) cout << "前线战士 ";
        if (reached_paris) cout << "巴黎逃亡者";
        cout << endl;
        color(10);
        cout << "===================================\n\n";
        color(7);
    }
    
    void check_dead() {
        if (hp <= 0 || hunger >= 100) {
            clear();
            color(12);
            line();
            cout << "你没能熬过黑暗……\n坚持了 " << day << " 天。\n";
            color(7);
            alive = false;
            system("pause >nul");
            exit(0);
        }
    }
    
    void prologue() {
        clear();
        color(6);
        line();
        cout << "1939年,波兰·华沙。\n你叫莱拉,17岁。纳粹入侵,城市陷落。\n";
        cout << "深夜,驱逐开始。混乱中,你与亲人失散。\n";
        color(7);
        has_family = false;
        hunger += 15;
        wait(2000);
    }
    
    void become_newsboy() {
        clear(); status(); line();
        color(14);
        cout << "地下组织找到你:\n";
        cout << "『我们需要卖报人——伪装街头卖报,秘密传递抵抗报纸。』\n";
        cout << "『一旦被抓,立即枪毙。』\n\n";
        color(11);
        cout << "1. 成为地下卖报人(危险)\n2. 拒绝(安全但无助)\n";
        color(7);
        int c; cin >> c;
        if (c == 1) {
            is_newsboy = true;
            newsboy_warsaw = true;
            courage += 40;
            trust += 30;
            color(10);
            cout << "\n你穿上旧外套,抱着报纸,走上街头。\n";
            cout << "表面叫卖,暗中传递希望。\n";
        } else {
            courage -= 15;
            color(8);
            cout << "\n你选择躲藏,在绝望中等待。\n";
        }
        color(7);
        wait(2000);
    }
    
    void newsboy_action() {
        if (!is_newsboy) return;
        clear(); status(); line();
        color(14);
        cout << "你在街头叫卖:『报纸!报纸!华沙最新消息!』\n";
        cout << "真正的地下报纸藏在底层。\n";
        cout << "纳粹巡逻车经过!\n\n";
        color(11);
        cout << "1. 镇定递报 2. 慌忙藏起\n";
        color(7);
        int c; cin >> c;
        if (c == 1) {
            courage += 20;
            color(10);
            cout << "\n你骗过纳粹,成功传递情报。\n";
        } else {
            hp -= 20;
            color(12);
            cout << "\n你被殴打,报纸被烧毁……\n";
        }
        color(7);
        check_dead();
        wait(1500);
    }
    
    void meet_friend() {
        clear(); status(); line();
        color(10);
        cout << "少年伊扎克递给你半块黑面包:『一起活。』\n1.接受 2.拒绝\n";
        color(7);
        int c; cin >> c;
        if (c == 1) {
            has_friend = true;
            trust += 40;
            hunger -= 20;
        } else { hunger += 25; hp -= 15; }
        check_dead();
        wait(1500);
    }
    
    void secret_school() {
        clear(); status(); line();
        color(14);
        cout << "加入秘密学校,教孩子读书?1.是 2.否\n";
        color(7);
        int c; cin >> c;
        if (c == 1) { in_school = true; courage += 25; trust += 20; }
        wait(1500);
    }
    
    void war_front_line() {
        clear(); status(); line();
        color(12);
        cout << "1944年,盟军反攻。\n";
        cout << "你加入波兰抵抗军,被派往战争前线。\n";
        cout << "战壕、炮火、死亡、战友。\n\n";
        color(11);
        cout << "1. 上前线战斗 2. 担任后勤医护\n";
        color(7);
        int c; cin >> c;
        war_front = true;
        trench = true;
        courage += 60;
    
        if (c == 1) {
            color(14);
            cout << "\n你进入战壕,子弹从头顶呼啸而过。\n";
            cout << "战友卡米尔:『跟着我!我们一起回家!』\n";
        } else {
            color(9);
            cout << "\n你在战地医院救助伤兵。\n";
        }
        color(7);
        wait(2000);
    }
    
    void trench_battle() {
        if (!war_front) return;
        clear(); status(); line();
        color(12);
        cout << "【炮火袭击】德军炮击开始!大地震动!\n";
        color(11);
        cout << "1. 扑向战友 2. 独自隐蔽\n";
        color(7);
        int c; cin >> c;
        if (c == 1) {
            color(13);
            cout << "\n你救下卡米尔,自己被冲击波震伤……\n";
            wounded = true;
            hp -= 30;
        } else {
            color(8);
            cout << "\n卡米尔被炸倒……他牺牲了。\n";
            comrade_alive = false;
            trust -= 40;
        }
        color(7);
        check_dead();
        wait(2000);
    }
    
    void prisoner_of_war() {
        if (!war_front) return;
        clear(); status(); line();
        color(8);
        cout << "队伍被打散,你被俘了。\n";
        cout << "德军战俘营,饥饿、苦役、死亡。\n\n";
        color(11);
        cout << "1. 等待越狱机会 2. 顺从苦役\n";
        color(7);
        int c; cin >> c;
        prisoner = true;
        if (c == 1) {
            color(10);
            cout << "\n深夜,你与几名战俘挖开土墙,成功逃亡!\n";
            prisoner = false;
            courage += 50;
        } else {
            color(12);
            cout << "\n你在苦役中濒临死亡……\n";
            hp -= 40;
            hunger += 50;
        }
        color(7);
        check_dead();
        wait(2000);
    }
    
    void warsaw_uprising() {
        clear(); status(); line();
        color(14);
        cout << "1943年,华沙起义爆发!\n1.战斗 2.躲藏\n";
        color(7);
        int c; cin >> c;
        uprising = true;
        courage += 50;
        if (c == 1) {
            color(12);
            cout << "伊扎克为掩护你牺牲……\n";
            color(7);
            has_friend = false;
        }
        wait(2000);
    }
    
    void choice_escape_france() {
        clear(); status(); line();
        color(11);
        cout << "起义失败。两条生路:\n1. 东欧逃亡 2. 逃亡法国(最危险也最自由)\n";
        color(7);
        int c; cin >> c;
        if (c == 2) escape_to_france = true;
    }
    
    void france_escape_path() {
        if (!escape_to_france) return;
        clear(); status(); line();
        color(9);
        cout << "波兰乡村 → 德国边境 → 法国 → 巴黎\n";
        cout << "你躲进煤车,越过边境,九死一生。\n";
        color(7);
        wait(1500);
    
        clear(); line();
        color(13);
        cout << "法国修女玛丽:『我藏你去巴黎。』\n";
        color(7);
        met_sister_marie = true;
        hp += 30; hunger -= 30;
        wait(1500);
    
        reached_paris = true;
        clear(); line();
        color(14);
        cout << "你抵达巴黎!纳粹占领下的黑暗都市。\n";
        color(7);
        wait(1500);
    }
    
    void paris_newsboy() {
        if (!reached_paris || !is_newsboy) return;
        clear(); status(); line();
        color(14);
        cout << "你重新拿起报纸,成为【巴黎地下卖报人】。\n";
        cout << "在香榭丽舍街头,你一边叫卖,一边传递抵抗军情报。\n";
        cout << "纳粹密探就在人群中……\n\n";
        color(11);
        cout << "1. 冷静传递情报 2. 迅速撤离\n";
        color(7);
        int c; cin >> c;
        newsboy_paris = true;
        courage += 40;
        trust += 30;
        color(10);
        cout << "\n你成为巴黎抵抗组织最重要的街头信使。\n";
        color(7);
        wait(2000);
    }
    
    void paris_resist() {
        if (!reached_paris) return;
        clear(); status(); line();
        color(10);
        cout << "巴黎抵抗组织邀请你:传递密信、掩护犹太儿童。\n1.加入 2.隐藏\n";
        color(7);
        int c; cin >> c;
        if (c == 1) {
            paris_resistance = true;
            courage += 50;
        }
    }
    
    void ending() {
        clear(); line();
        color(14);
        cout << "【1945年 · 战争结束】\n";
        color(7);
        line();
    
        if (alive && reached_paris && paris_resistance && is_newsboy) {
            color(10);
            cout << "【传奇结局:街头的信使】\n";
            color(11);
            cout << "你从华沙卖报人,到前线战士,再到巴黎地下英雄。\n";
            cout << "你用一份份报纸,传递了黑暗时代最珍贵的东西:真相。\n";
            cout << "你活了下来,成为历史的声音。\n";
        }
        else if (alive && war_front && wounded && comrade_alive) {
            color(10);
            cout << "【战友结局:从战壕到和平】\n";
            color(11);
            cout << "你与战友卡米尔战后重逢。\n";
            cout << "你们一起回到废墟中的华沙,重建家园。\n";
        }
        else if (alive && reached_paris && met_sister_marie) {
            color(13);
            cout << "【温暖结局:被拯救者】\n";
            color(11);
            cout << "修女保护了你。你活在自由的巴黎。\n";
            cout << "你一生都在传递善意,像她曾经对你那样。\n";
        }
        else if (alive && is_newsboy) {
            color(14);
            cout << "【坚守结局:卖报人的一生】\n";
            color(11);
            cout << "你从未放下手中的报纸。\n";
            cout << "你见证了暴政的崩溃,见证了光明降临。\n";
        }
        else {
            color(12);
            cout << "【苦难结局】\n";
            color(8);
            cout << "你活过了地狱,却永远失去了家园与过去。\n";
            cout << "但你没有屈服。你是数百万无声者中的一个。\n";
        }
    
        color(7);
        line();
        color(10);
        cout << "这不是游戏。这是一段真实的历史。\n铭记苦难,守护光明。\n";
        color(7);
        line();
    }
    
    int main() {
        srand(time(0));
        hideCursor();
        clear();
        color(14);
        line();
        cout << "《暗夜里的星:二战卖报人·战争与逃亡》\n";
        line();
        color(11);
        cout << "按回车开始……";
        color(7);
        cin.get();
    
        prologue();
        meet_friend();
        become_newsboy();
        secret_school();
        newsboy_action();
        warsaw_uprising();
        war_front_line();
        trench_battle();
        prisoner_of_war();
        choice_escape_france();
        france_escape_path();
        paris_newsboy();
        paris_resist();
        ending();
    
        return 0;
    }
    
    身份认证已通过,巴别塔欢迎你
  • 最近活动