12 条评论

  • @ 2026-5-31 11:22:14
    #include <iostream>
    #include <cstdlib>
    #include <ctime>
    #include <conio.h>
    #include <windows.h>
    using namespace std;
    
    // 清屏函数
    void clear() {
        system("cls");
    }
    
    // 随机障碍物数量(难度随关卡提升)
    int getBlockCount(int level) {
        if (level <= 10) return 2;
    	if (level <= 50) return 3;
    	if (level <= 100) return 5;
        if (level <= 500) return 8;
        if (level <= 1000) return 10;
        if (level <= 1500) return 15;
        return 20; // 1500~2000关最难
    }
    
    // 游戏主逻辑
    void playLevel(int &level) {
        int carX = 1, carY = 1;
    
        // G 终点 随机位置
        int goalX = rand() % 18 + 1;
        int goalY = rand() % 9 + 1;
    
        int blocks = getBlockCount(level);
        int hp = 3;  // 血量:3点
    
        // 生成随机障碍物
        bool block[20][10] = {false};
        srand(time(0) + level);
    
        for (int i = 0; i < blocks; i++) {
            int x = rand() % 19 + 1;
            int y = rand() % 9 + 1;
            if ((x == carX && y == carY) || (x == goalX && y == goalY)) {
                i--;
                continue;
            }
            block[x][y] = true;
        }
    
        // 游戏循环
        while (true) {
            clear();
            cout << "===== 汽车闯关游戏 第 " << level << " / 2000 关 =====" << endl;
            cout << "方向键=移动  J=跳关  P=暂停  R=重开  血量: " << hp << endl;
            cout << "开到【G】终点" << endl << endl;
    
            // 绘制地图
            for (int y = 0; y < 10; y++) {
                for (int x = 0; x < 20; x++) {
                    if (x == carX && y == carY) {
                        cout << "CAR ";
                    } else if (x == goalX && y == goalY) {
                        cout << "G   ";
                    } else if (block[x][y]) {
                        cout << "##  ";
                    } else {
                        cout << "..  ";
                    }
                }
                cout << endl;
            }
    
            // 到达终点
            if (carX == goalX && carY == goalY) {
                cout << endl << "================================" << endl;
                cout << "        Very Good !!!" << endl;
                cout << "================================" << endl;
                Sleep(1500);
                return;
            }
            
            // 血量为0,重新开始本关
            if (hp <= 0) {
                cout << endl << "===== 血量耗尽,重新开始当前关 =====" << endl;
                Sleep(1500);
                playLevel(level);
                return;
            }
    
            // 按键控制
            char ch = _getch();
            int nx = carX, ny = carY;
    
            // 重新开始当前关卡 R/r
            if (ch == 'r' || ch == 'R') {
                playLevel(level);
                return;
            }
            // 暂停 P/p
            if (ch == 'p' || ch == 'P') {
                cout << endl << "===== 游戏已暂停,按任意键继续 =====" << endl;
                return;
            }
            // 跳关 J/j
            if (ch == 'j' || ch == 'J') {
                cout << endl << "输入跳关关卡 (1-2000): ";
                cin >> level;
                if (level < 1) level = 1;
                if (level > 2000) level = 2000;
                playLevel(level);
                return;
            }
    
            // 方向移动
            if (ch == 72) ny--;    // 上
            if (ch == 80) ny++;    // 下
            if (ch == 75) nx--;    // 左
            if (ch == 77) nx++;    // 右
    
            // 边界 + 障碍物判断(撞墙掉血)
            bool hit = false;
            if (nx < 0 || nx >= 20 || ny < 0 || ny >= 10) hit = true;
            else if (block[nx][ny]) hit = true;
    
            if (hit) {
                hp--;  // 撞墙掉1点血
            } else {
                carX = nx;
                carY = ny;
            }
        }
    }
    
    int main() {
        int level = 1;
        srand(time(0));
        cout << "===== 汽车闯关小游戏 满级版=====" << endl;
        cout << "===== V9.0.0=====" << endl;
        cout << "按任意键开始游戏..." << endl;
        _getch();
    
        // 2000关循环
        for (; level <= 2000; level++) {
            playLevel(level);
        }
    
        cout << endl << " 恭喜你通关全部 2000 关!!!" << endl;
        return 0;
    }
    
    • @ 2026-5-22 17:11:07

      EGH

      信息

      ID
      1342
      时间
      ms
      内存
      MiB
      难度
      2
      标签
      递交数
      39
      已通过
      4
      上传者