迷宫游戏
这是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;
}