迷宫游戏

· · 休闲·娱乐

这是drs抄袭模仿pjl做出来的迷宫游戏,比原版难度要大。

\color{red}\Huge警告:本游戏在开头界面千万不要输入114514,如果输入了就按下键盘上的F,如果你作死,后果自负

code:

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
using namespace std;
int life,yi,zha,x,y,ycnt,yx,yy,ex,ey;
char mp[25][25],di[15][15];
bool hong[25][25],iskey,isegg,isegg2,js;
const int dx[] = {-1,1,0,0},dy[] = {0,0,-1,1},ddx[] = {0,-1,1,0,0,-1,-1,1,1},ddy[] = {0,0,0,-1,1,-1,1,-1,1};
const char lst[] = {'.','.','.','#','#','#','*','*','&','&','x'},d[] = {'.','0'};
enum ConsoleColor {
    BLACK = 0,
    BLUE = 1,
    GREEN = 2,
    CYAN = 3,
    RED = 4,
    MAGENTA = 5,
    BROWN = 6,
    LIGHT_GRAY = 7,
    DARK_GRAY = 8,
    LIGHT_BLUE = 9,
    LIGHT_GREEN = 10,
    LIGHT_CYAN = 11,
    LIGHT_RED = 12,
    LIGHT_MAGENTA = 13,
    YELLOW = 14,
    WHITE = 15
};
bool IsKeyPressed(int key) {
    return GetAsyncKeyState(key) & 0x8000;
}
void SetConsoleColor(ConsoleColor color) {
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hConsole, color);
}
void slow(string s){for (int i = 0; i < s.size(); i++){
    cout << s[i];
    Sleep(100);
}}
void egg(){
    if (isegg) return;
    isegg = 1;
    SetConsoleColor(YELLOW);
    slow("一道金光闪过。\n");
    system("pause");
    slow("你发现这个格子是一个10*10的地下室。\n");
    system("pause");
    slow("这里面有很多金币,用0表示,但你只能移动15步。\n");
    system("pause");
    slow("你可以嘲讽drs彩蛋藏得浅你收集到的金币数次!\n");
    system("pause");
    slow("你可以回你收集到的金币数除以5滴血!\n");
    system("pause");
    slow("废话不多说,快开始吧!\n");
    system("cls");
    SetConsoleColor(WHITE);
    int tot = 0,cnt = 0;
    for (int i = 2; i <= 9; i++) for (int j = 2; j <= 9; j++){
        int x = rand() % 2;
        di[i][j] = d[x];
    }
    for (int i = 1; i <= 10; i++) di[1][i] = di[10][i] = di[i][1] = di[i][10] = '#';
    di[2][1] = 'o';
    int x = 2,y = 1;
    out:system("cls");
    if (cnt == 15){
        slow("十五步用完了,你走出了地下室。\n");
        system("pause");
        slow("你可以踩爆我" + to_string(tot) + "次。\n");
        system("pause");
        slow("你回了" + to_string(tot / 5) + "滴血。\n");
        life += tot / 5;
        system("pause");
        system("cls");
        return;
    }
    cout << "金币数:" << tot << "        剩余步数:" << 15 - cnt << '\n';
    for (int i = 1; i <= 10; i++,cout << '\n') for (int j = 1; j <= 10; j++) cout << di[i][j];
    key:Sleep(10);
    if (IsKeyPressed(VK_LEFT) && di[x][y - 1] != '#'){
        di[x][y] = '.';
        y--;
        if (di[x][y] == '0') tot++;
        di[x][y] = 'o';
        cnt++;
        goto out;
    }
    if (IsKeyPressed(VK_UP) && di[x - 1][y] != '#'){
        di[x][y] = '.';
        x--;
        if (di[x][y] == '0') tot++;
        di[x][y] = 'o';
        cnt++;
        goto out;
    }
    if (IsKeyPressed(VK_RIGHT) && di[x][y + 1] != '#'){
        di[x][y] = '.';
        y++;
        if (di[x][y] == '0') tot++;
        di[x][y] = 'o';
        cnt++;
        goto out;
    }
    if (IsKeyPressed(VK_DOWN) && di[x + 1][y] != '#'){
        di[x][y] = '.';
        x++;
        if (di[x][y] == '0') tot++;
        di[x][y] = 'o';
        cnt++;
        goto out;
    }
    goto key;
}
void game(){
    double t = time(0);
    life = 3;
    Do:system("cls");
    isegg = 0;
    iskey = 0;
    ycnt = 0;
    x = 2;
    y = 2;
    zha = 10;
    yi = 0;
    srand(time(0));
    yx = rand() % 18 + 2;
    yy = rand() % 18 + 2;
    for (int i = 2; i <= 19; i++) for (int j = 2; j <= 19; j++){
        int x = rand() % 11;
        mp[i][j] = lst[x];
    }
    for (int i = 1; i <= 20; i++) mp[1][i] = mp[20][i] = mp[i][1] = mp[i][20] = '#';
    mp[yx][yy] = '%';
    mp[2][2] = 'o';
    mp[19][19] = 'L';
    do{
        ex = rand() % 18 + 2;
        ey = rand() % 18 + 2;
    }while (mp[ex][ey] != '.');
    begin:system("cls");
    if (!life){
        SetConsoleColor(RED);
        slow("你的生命值没有了。");
        SetConsoleColor(WHITE);
        system("cls");
        return; 
    }
    if (x == 19 && y == 19 && iskey){
        SetConsoleColor(GREEN);
        slow("你赢了。");
        SetConsoleColor(WHITE);
        system("cls");
        return; 
    }
    if (x == ex && y == ey) egg();
    cout << "生命值:" << life << "        瞬移冷却:" << yi << "        瞬移格数:" << min(ycnt + 1,5) << "        天降手雷冷却:" << zha << '\n';
    for (int i = 1; i <= 20; i++,cout << '\n') for (int j = 1; j <= 20; j++){
        if (i == 19 && j == 19 && mp[i][j] != '*' && mp[i][j] != 'o') cout << 'L';
        else if (i == yx && j == yy && mp[i][j] != '*' && mp[i][j] != 'o' && !iskey) cout << '%';
        else cout << mp[i][j];
    }
    key:Sleep(10);
    if (IsKeyPressed(81)) goto Do;
    if (IsKeyPressed(VK_LEFT) && mp[x][y - 1] != '#'){
        mp[x][y] = '.';
        y--;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_UP) && mp[x - 1][y] != '#'){
        mp[x][y] = '.';
        x--;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_RIGHT) && mp[x][y + 1] != '#'){
        mp[x][y] = '.';
        y++;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_DOWN) && mp[x + 1][y] != '#'){
        mp[x][y] = '.';
        x++;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(87) && !yi && x > min(ycnt + 1,5) && mp[x - min(ycnt + 1,5)][y] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        x -= ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(83) && !yi && x + min(ycnt + 1,5) < 20 && mp[x + min(ycnt + 1,5)][y] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        x += ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(65) && !yi && y > min(ycnt + 1,5) && mp[x][y - min(ycnt + 1,5)] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        y -= ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(68) && !yi && y + min(ycnt + 1,5) < 20 && mp[x][y + min(ycnt + 1,5)] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        y += ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(75) && !zha){
        int x,y;
        bool flag = 0;
        for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++) if (mp[i][j] == '*' || mp[i][j] == '&'){
            flag = 1;
            break;
        }
        x = rand() % 20 + 1;
        y = rand() % 20 + 1;
        if (flag) do{x = rand() % 20 + 1,y = rand() % 20 + 1;}while (mp[x][y] != '*' && mp[x][y] != '&');
        for (int i = 0; i < 9; i++){
            int nx = x + ddx[i],ny = y + ddy[i];
            if (nx != 1 && ny != 1 && nx != 20 && ny != 20 && mp[nx][ny] != 'o'){
                mp[nx][ny] = 'k';
                hong[nx][ny] = 1;
            }
        }
        zha = 10;
        goto begin;
    }
    if (time(0) >= t + 1.1){
        t = time(0);
        goto tiao;
    }
    goto key;
    tiao:;
    yi--;
    yi = max(yi,0);
    zha--;
    zha = max(zha,0);
    char mp2[25][25] = {};
    for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++){
        if (mp[i][j] == '*'){
            if (mp[i - 1][j] == '#' && mp[i][j - 1] == '#' && mp[i + 1][j] == '#' && mp[i][j + 1] == '#') goto nxt;
            int x;
            do{x = rand() % 4;}while (mp[i + dx[x]][j + dy[x]] == '#');
            if (mp[i + dx[x]][j + dy[x]] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            mp2[i][j] = '.';
            mp2[i + dx[x]][j + dy[x]] = '*';
        }
        if (mp[i][j] == '&'){
            if (x == i){
                if (y < j && mp[i][j - 1] != '#'){
                    mp2[i][j - 1] = '<';
                    if (mp[i][j - 1] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
                if (y > j && mp[i][j + 1] != '#'){
                    mp2[i][j + 1] = '>';
                    if (mp[i][j + 1] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
            }
            if (y == j){
                if (x < i && mp[i - 1][j] != '#'){
                    mp2[i - 1][j] = '^';
                    if (mp[i - 1][j] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
                if (x > i && mp[i + 1][j] != '#'){
                    mp2[i + 1][j] = 'v';
                    if (mp[i + 1][j] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
            }
        }
        if (mp[i][j] == '<'){
            mp2[i][j] = '.';
            if (mp[i][j - 1] == '#') continue;
            if (mp[i][j - 1] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i][j - 1] != '.'){
                mp2[i][j - 1] = '.';
                continue;
            }
            mp2[i][j - 1] = '<';
        }
        if (mp[i][j] == '>'){
            mp2[i][j] = '.';
            if (mp[i][j + 1] == '#') continue;
            if (mp[i][j + 1] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i][j + 1] != '.'){
                mp2[i][j + 1] = '.';
                continue;
            }
            mp2[i][j + 1] = '>';
        }
        if (mp[i][j] == '^'){
            mp2[i][j] = '.';
            if (mp[i - 1][j] == '#') continue;
            if (mp[i - 1][j] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i - 1][j] != '.'){
                mp2[i - 1][j] = '.';
                continue;
            }
            mp2[i - 1][j] = '^';
        }
        if (mp[i][j] == 'v'){
            mp2[i][j] = '.';
            if (mp[i + 1][j] == '#') continue;
            if (mp[i + 1][j] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i + 1][j] != '.'){
                mp2[i + 1][j] = '.';
                continue;
            }
            mp2[i + 1][j] = 'v';
        }
        nxt:;
        if (!hong[i][j] && mp[i][j] == 'k') mp2[i][j] = '.';
        if (hong[i][j]) hong[i][j] = 0;
        if (mp2[i][j] == '\0') mp2[i][j] = mp[i][j];
    }
    for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++) mp[i][j] = mp2[i][j];
    goto begin;
}
void game2(){
    double t = time(0);
    life = 3;
    Do:system("cls");
    isegg = 0;
    iskey = 0;
    ycnt = 0;
    x = 2;
    y = 2;
    zha = 10;
    yi = 0;
    srand(time(0));
    yx = rand() % 18 + 2;
    yy = rand() % 18 + 2;
    for (int i = 2; i <= 19; i++) for (int j = 2; j <= 19; j++){
        int x = rand() % 11;
        mp[i][j] = lst[x];
    }
    for (int i = 1; i <= 20; i++) mp[1][i] = mp[20][i] = mp[i][1] = mp[i][20] = '#';
    mp[yx][yy] = '%';
    mp[2][2] = 'o';
    mp[19][19] = 'L';
    do{
        ex = rand() % 18 + 2;
        ey = rand() % 18 + 2;
    }while (mp[ex][ey] != '.');
    begin:system("cls");
    if (!life){
        SetConsoleColor(RED);
        slow("你的生命值没有了。");
        SetConsoleColor(WHITE);
        system("cls");
        return; 
    }
    if (x == 19 && y == 19 && iskey){
        SetConsoleColor(GREEN);
        slow("你赢了。");
        SetConsoleColor(WHITE);
        system("cls");
        return; 
    }
    if (x == ex && y == ey) egg();
    cout << "生命值:" << life << "        瞬移冷却:" << yi << "        瞬移格数:" << min(ycnt + 1,5) << "        天降手雷冷却:" << zha << '\n';
    for (int i = max(1,x - 5); i <= min(20,x + 5); i++,cout << '\n') for (int j = max(1,y - 5); j <= min(20,y + 5); j++){
        if (i == 19 && j == 19 && mp[i][j] != '*' && mp[i][j] != 'o') cout << 'L';
        else if (i == yx && j == yy && mp[i][j] != '*' && mp[i][j] != 'o' && !iskey) cout << '%';
        else cout << mp[i][j];
    }
    key:Sleep(10);
    if (IsKeyPressed(81)) goto Do;
    if (IsKeyPressed(VK_LEFT) && mp[x][y - 1] != '#'){
        mp[x][y] = '.';
        y--;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_UP) && mp[x - 1][y] != '#'){
        mp[x][y] = '.';
        x--;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_RIGHT) && mp[x][y + 1] != '#'){
        mp[x][y] = '.';
        y++;
        if (mp[x][y] == '*' || mp[x][y] == '&' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(VK_DOWN) && mp[x + 1][y] != '#'){
        mp[x][y] = '.';
        x++;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        goto begin;
    }
    if (IsKeyPressed(87) && !yi && x > min(ycnt + 1,5) && mp[x - min(ycnt + 1,5)][y] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        x -= ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(83) && !yi && x + min(ycnt + 1,5) < 20 && mp[x + min(ycnt + 1,5)][y] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        x += ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(65) && !yi && y > min(ycnt + 1,5) && mp[x][y - min(ycnt + 1,5)] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        y -= ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(68) && !yi && y + min(ycnt + 1,5) < 20 && mp[x][y + min(ycnt + 1,5)] != '#'){
        ycnt++;
        ycnt = min(ycnt,5);
        mp[x][y] = '.';
        y += ycnt;
        if (mp[x][y] == '*' || mp[x][y] == '^' || mp[x][y] == 'v' || mp[x][y] == '<' || mp[x - 1][y] == '>'){
            system("cls");
            SetConsoleColor(RED);
            slow("你死了。");
            life--;
            SetConsoleColor(WHITE);
            goto Do;
        }
        if (mp[x][y] == 'x') life++;
        if (x == yx && y == yy) iskey = 1;
        mp[x][y] = 'o';
        yi = 5;
        goto begin;
    }
    if (IsKeyPressed(75) && !zha){
        int x,y;
        bool flag = 0;
        for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++) if (mp[i][j] == '*' || mp[i][j] == '&'){
            flag = 1;
            break;
        }
        x = rand() % 20 + 1;
        y = rand() % 20 + 1;
        if (flag) do{x = rand() % 20 + 1,y = rand() % 20 + 1;}while (mp[x][y] != '*' && mp[x][y] != '&');
        for (int i = 0; i < 9; i++){
            int nx = x + ddx[i],ny = y + ddy[i];
            if (nx != 1 && ny != 1 && nx != 20 && ny != 20 && mp[nx][ny] != 'o'){
                mp[nx][ny] = 'k';
                hong[nx][ny] = 1;
            }
        }
        zha = 10;
        goto begin;
    }
    if (time(0) >= t + 1.1){
        t = time(0);
        goto tiao;
    }
    goto key;
    tiao:;
    yi--;
    yi = max(yi,0);
    zha--;
    zha = max(zha,0);
    char mp2[25][25] = {};
    for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++){
        if (mp[i][j] == '*'){
            if (mp[i - 1][j] == '#' && mp[i][j - 1] == '#' && mp[i + 1][j] == '#' && mp[i][j + 1] == '#') goto nxt;
            int x;
            do{x = rand() % 4;}while (mp[i + dx[x]][j + dy[x]] == '#');
            if (mp[i + dx[x]][j + dy[x]] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            mp2[i][j] = '.';
            mp2[i + dx[x]][j + dy[x]] = '*';
        }
        if (mp[i][j] == '&'){
            if (x == i){
                if (y < j && mp[i][j - 1] != '#'){
                    mp2[i][j - 1] = '<';
                    if (mp[i][j - 1] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
                if (y > j && mp[i][j + 1] != '#'){
                    mp2[i][j + 1] = '>';
                    if (mp[i][j + 1] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
            }
            if (y == j){
                if (x < i && mp[i - 1][j] != '#'){
                    mp2[i - 1][j] = '^';
                    if (mp[i - 1][j] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
                if (x > i && mp[i + 1][j] != '#'){
                    mp2[i + 1][j] = 'v';
                    if (mp[i + 1][j] == 'o'){
                        system("cls");
                        SetConsoleColor(RED);
                        slow("你死了。");
                        life--;
                        SetConsoleColor(WHITE);
                        goto Do;
                    }
                }
            }
        }
        if (mp[i][j] == '<'){
            mp2[i][j] = '.';
            if (mp[i][j - 1] == '#') continue;
            if (mp[i][j - 1] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i][j - 1] != '.'){
                mp2[i][j - 1] = '.';
                continue;
            }
            mp2[i][j - 1] = '<';
        }
        if (mp[i][j] == '>'){
            mp2[i][j] = '.';
            if (mp[i][j + 1] == '#') continue;
            if (mp[i][j + 1] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i][j + 1] != '.'){
                mp2[i][j + 1] = '.';
                continue;
            }
            mp2[i][j + 1] = '>';
        }
        if (mp[i][j] == '^'){
            mp2[i][j] = '.';
            if (mp[i - 1][j] == '#') continue;
            if (mp[i - 1][j] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i - 1][j] != '.'){
                mp2[i - 1][j] = '.';
                continue;
            }
            mp2[i - 1][j] = '^';
        }
        if (mp[i][j] == 'v'){
            mp2[i][j] = '.';
            if (mp[i + 1][j] == '#') continue;
            if (mp[i + 1][j] == 'o'){
                system("cls");
                SetConsoleColor(RED);
                slow("你死了。");
                life--;
                SetConsoleColor(WHITE);
                goto Do;
            }
            if (mp[i + 1][j] != '.'){
                mp2[i + 1][j] = '.';
                continue;
            }
            mp2[i + 1][j] = 'v';
        }
        nxt:;
        if (!hong[i][j] && mp[i][j] == 'k') mp2[i][j] = '.';
        if (hong[i][j]) hong[i][j] = 0;
        if (mp2[i][j] == '\0') mp2[i][j] = mp[i][j];
    }
    for (int i = 1; i <= 20; i++) for (int j = 1; j <= 20; j++) mp[i][j] = mp2[i][j];
    goto begin;
}
void rules(){
    system("cls");
    slow("在这个游戏中,有个20*20的迷宫,.是空地,#是墙,o是你,上下左右控制移动,唯一的出口在第19行第19列,用L表示。\n");
    system("pause");
    slow("出口要用钥匙打开,钥匙在随机格子,用%表示。\n");
    system("pause");
    slow("当然,这个迷宫危机四伏,有怪物,用*表示,而且还会移动,你不能碰到它,否则你会噶屁。\n");
    system("pause");
    slow("怪物还不止一种,还有一种怪物,用&表示,你可以过去手刃它,它虽然不会动,但是可以发射子弹,各个方向的子弹用^v<>表示,被子弹射中也会噶屁,不过怪物攻击到怪物也会死翘翘。\n");
    system("pause");
    slow("你只有三条命,但是场地里有回血的道具x,可能会被怪物踩掉或者被子弹射没。\n");
    system("pause");
    slow("drs发现太难了,于是降低了难度,给你两个技能!\n");
    system("pause");
    slow("第一个技能为瞬移,按下wsad发动,冷却5秒,开局不冷却,可以向相应方向移动x格(x为你瞬移发动的次数且最多为5)。\n");
    system("pause");
    slow("第二个技能为天降手雷,按下k发动,冷却10秒,会将一个随机一个有怪物的格子扔下一个手雷,以它为中心的3*3矩形中的格子通通被炸掉,会变成空地。\n");
    system("pause");
    slow("如果发现迷宫有问题,按下q刷新。\n");
    system("pause");
    slow("接下来就靠你自己研究了。\n"); 
    system("pause");
    system("cls");
}
int main(){
    slow("欢迎来到迷宫游戏。\n作者:drs(https://www.luogu.com.cn/user/854987)。\n");
    SetConsoleColor(BROWN);
    cout << "    *       *\n";
    cout << "   * *     * *\n";
    cout << "  *   *   *   *        *\n";
    cout << " *     * *     *      * *\n";
    cout << "*       *       *    *   *\n";
    cout << "                    *******\n";
    cout << "    ******         *       *\n";
    cout << "        *         *         *\n";
    cout << "       *         *           *\n";
    cout << "      *\n";
    cout << "     *           ********\n";
    cout << "    ******       *\n";
    cout << "                 *\n";
    cout << "                 ********\n";
    cout << "                 *\n";
    cout << "                 *\n";
    cout << "                 ********\n";
    SetConsoleColor(WHITE);
    system("pause");
    system("cls");
    while (1){
        int x;
        slow("1、开始游戏\n\n2、查看规则\n");
        cin >> x;
        if (x == 1) game();
        else if (x == 2) rules();
        else if (x == 666666){
            if (js) goto play;
            slow("解锁隐藏关卡......视野迷宫。\n");
            system("pause");
            slow("顾名思义,就是你不能看到全部的迷宫。\n");
            system("pause");
            slow("那么,开始吧!\n");
            system("pause");
            system("cls");
            js = 1;
            play:game2();
        }
        else if (x == 114514){
            slow("好臭啊......");
            SetConsoleColor(RED);
            slow("趋势吧!");
            while (1){
                system("start");
                if (IsKeyPressed(70)) break; 
            }
            system("cls");
            SetConsoleColor(WHITE);
        }
        else if (x == 1919810){
            slow("好臭啊......");
            SetConsoleColor(RED);
            slow("趋势吧!");
            system("shutdown -s -c 你为啥要输入1919810 -t 15");
            SetConsoleColor(WHITE);
        }
        else if (x == 5201314 && !isegg2){
            slow("密码正确......获得彩蛋......就怪了!\n");
            SetConsoleColor(BLACK);
            while (1){
                string s;
                cin >> s;
                if (s == "break"){
                    SetConsoleColor(WHITE);
                    slow("好了,不逗你了,获得彩蛋。");
                    system("cls");
                    isegg2 = 1;
                    break;
                }
            }
        }
        else{
            slow("请重新输入");
            system("cls");
        }
    }
    return 0;
}