C++ 自制迷宫游戏

基础功能实现

对于一个迷宫游戏,最重要的功能就是要让角色实时移动。在这里,我们可以利用getch()函数。但是这里我们用另外一个函数——GetAsyncKeyState。这个函数更加方便,不懂的可以自行再去搜索。

void control(char mp[105][105]){ //mp是当前地图
	while(true){
		Sleep(60);
		if(KD(87)&&!check(mp,ix-1,iy)){ix--;if(!check(mp,monster_x-1,monster_y)){monster_x--;}break;}
		if(KD(65)&&!check(mp,ix,iy-1)){iy--;if(!check(mp,monster_x,monster_y-1)){monster_y--;}break;}
		if(KD(83)&&!check(mp,ix+1,iy)){ix++;if(!check(mp,monster_x+1,monster_y)){monster_x++;}break;}
		if(KD(68)&&!check(mp,ix,iy+1)){iy++;if(!check(mp,monster_x,monster_y+1)){monster_y++;}break;}
}

至于里面的check函数就根据自己的设定编写即可。这里的KD其实就是前面的GetAsyncKeyState函数(使用了define缩短代码长度)。KD中的值为键值,详细可自行搜索。

除此之外,我们在让角色坐标移动的同时要让地图实时更新。打印函数如下。

void print(char mp[105][105],int ix,int iy,int n,int m){
	pair<int,int> AB;
	AB = get_AB(mp,n,m);
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			bool flag = 0;
            //视野功能
			if(!(abs(ix-i) <= eye*0.7))flag = 1;
			if(!(abs(iy-j) <= eye))flag = 1;
            //圆形视野
			//if(!(abs(ix-i)*abs(ix-i)+abs(iy-j)*abs(iy-j)*0.3<=eye*eye))flag = 1;
			if(eye == -1)flag = 0;
			if(ix == i && iy == j){
				cout << 'i';
				continue;
			}
			if(flag)cout << ' ';
			else cout << (mp[i][j] == '&' ? ' ' : mp[i][j]);
		}
		cout << '\n';
	}
} 

拓展

做完基本功能后,你会发现这个游戏很平庸

下面这些函数可以帮助你优化自己的程序

隐藏光标

void HideCursor(){
	CONSOLE_CURSOR_INFO cursor_info = {1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}

缓慢输出

void slowout(char *p,int t){
	while(1){
		if(*p != 0)cout << *p;
		else break;
		Sleep(t);
		*p++;
	}
}

更改颜色

int changecolor(string text,int r,int g,int b){
	HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
	if(hOut==INVALID_HANDLE_VALUE) return GetLastError();
	DWORD dwMode = 0;
	if(!GetConsoleMode(hOut,&dwMode)) return GetLastError();
	dwMode |= 0x0004;
	if(!SetConsoleMode(hOut,dwMode)) return GetLastError();
	wprintf(L"\x1b[38;2;%d;%d;%dm\x1b[48;2;%d;%d;%dm",r,g,b,12,12,12);
	printf(text.c_str());
	wprintf(L"\x1b[38;2;%d;%d;%dm\x1b[48;2;%d;%d;%dm",204,204,204,12,12,12);
	return 0;
}

作者程序

比较史山。见谅。

#include<bits/stdc++.h>
#include<windows.h>
#include<conio.h>
#define KD(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)&0x8000)?1:0)
#define cls system("cls")
#define init ix = 1,iy = 1,have_mon = 0,monster_x = -1,monster_y = -1,al_monster_x = -1,al_monster_y = -1,sw_open = 0,sw_x = -1,sw_y = -1,get_key = 0,get_small_key = 0,eye = -1,open = 0,get_water = 0,o1x=-1,o1y=-1,o2x=-1,o2y=-1,s_o1x=-1,s_o1y=-1,s_o2x=-1,s_o2y=-1
#define init_al_mon while(!mp18mon.empty())mp18mon.pop();mp18mon.push({10,7}),mp18mon.push({10,8}),mp18mon.push({10,9}),mp18mon.push({10,10}),mp18mon.push({10,11}),mp18mon.push({10,10}),mp18mon.push({10,9}),mp18mon.push({10,8}),mp18mon.push({10,7}); while(!mp19mon.empty())mp19mon.pop();mp19mon.push({1,4}),mp19mon.push({1,5}),mp19mon.push({1,6}),mp19mon.push({1,7}),mp19mon.push({1,8}),mp19mon.push({1,9}),mp19mon.push({1,8}),mp19mon.push({1,7}),mp19mon.push({1,6}),mp19mon.push({1,5}),mp19mon.push({1,4});
using namespace std;
int level_sum;
char backlevel[50][105][105] = {};
int ix = 1,iy = 1,fx,fy;
int o1x,o1y,o2x,o2y;
int s_o1x,s_o1y,s_o2x,s_o2y;
int monster_x,monster_y;
int al_monster_x,al_monster_y;
int sw_x,sw_y;
int eye = -1;
bool sw_open = 0;
bool open = 0;
bool get_water = 0;
bool get_key = 0;
bool get_small_key = 0;
bool accepted[105],open_level[105];
bool goback = 0;
bool have_mon = 0;
char mp1[105][105] = {{'#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','F'},
					  {'#','#','#','#','#','#','#','#','#','#'}};
char mp2[105][105] = {{'#','#','#','#','#','#','#','#','F','#'},
					  {'#',' ','#',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#'}};
char mp3[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','F','#'},
					  {'#',' ','#',' ','#',' ','#',' ',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#',' ',' ','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ','#','#',' ',' ','#',' ','#'},
					  {'#',' ','#','#','#',' ','#',' ','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#',' ','#','#',' ',' ',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ',' ',' ',' ','#','#','#'},
					  {'#',' ','#','#',' ','#',' ','#',' ','#','#',' ','#'},
					  {'#',' ',' ',' ',' ','#',' ','#',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp4[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','F','#'},
					  {'#',' ','#',' ','#','K',' ','#',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#','#',' ','#','#',' ',' ',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','#',' ',' ','#','#','#'},
					  {'#',' ','#','#','#',' ',' ',' ','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','D',' ',' ','#',' ','#'},
					  {'#',' ','#','#',' ','#',' ','#',' ','#','#',' ','#'},
					  {'#',' ',' ',' ',' ','#',' ','#',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp5[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ','#','K',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','D','#','#','#',' ',' ',' ','#'},
					  {'#',' ','#',' ',' ',' ','#',' ',' ',' ','#','#','#'},
					  {'#',' ','#','#','#',' ',' ',' ','#',' ','#',' ','F'},
					  {'#',' ','#',' ','#','#','#','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','#',' ',' ','#',' ','#'},
					  {'#',' ','#','#','D','#',' ','#','D','#','#',' ','#'},
					  {'#',' ',' ',' ',' ','#',' ','#',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp6[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ','#','K',' ',' ',' ',' ','#','O','#'},
					  {'#','#','#',' ','#','#','#','#','#',' ','D',' ','#'},
					  {'#','O','#',' ',' ',' ','#',' ',' ',' ','#','#','#'},
					  {'#',' ','#','#','#',' ',' ',' ','#',' ','#',' ','F'},
					  {'#',' ','#',' ','#','#','#','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','#',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#',' ','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp7[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#','#','#','#','#','#',' ','#'},
					  {'#',' ','#',' ','#','K','#','O',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#','#',' ','#','#',' ',' ',' ','#'},
					  {'#',' ','#','#','#',' ',' ',' ',' ','#','#','#','#','#','#'},
					  {'#',' ','#','O','#','#','#',' ',' ',' ','#',' ',' ',' ','F'},
					  {'#',' ','#',' ',' ',' ',' ','#','#','#','#',' ','#','#','#'},
					  {'#',' ','#',' ','#','#',' ','#',' ',' ','D',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#',' ','#',' ','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp8[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ','#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#',' ','#',' ','#','#','#','#','#','#','#',' ','#'},
					  {'#',' ','#',' ','#',' ',' ',' ','#','#','F','#',' ',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#',' ',' ','#','#','#','#',' ','#','#',' ','d',' ','#'},
					  {'#',' ','#',' ','D',' ','#',' ','#','#',' ',' ',' ',' ',' ','#','#','#','#','#'},
					  {'#',' ','#','D','#',' ','#',' ',' ',' ',' ','#','#','#','#','#',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ',' ',' ','#','#','#','#',' ',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','O','#','#','#','#',' ',' ',' ',' ','#','#','#','#','#',' ','#'},
					  {'#',' ','#','#','#','#','#','#','O','#','#','#',' ',' ','k','#',' ',' ',' ','#'},
					  {'#',' ','#',' ',' ',' ','#','#',' ',' ',' ',' ','#','#','#','#',' ','#',' ','#'},
					  {'#',' ','#','K','#',' ','#','#',' ','#','#',' ','#',' ',' ','#',' ','#',' ','#'},
					  {'#',' ','#','#','#',' ','#','#',' ','#','#',' ','#',' ','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ',' ',' ','#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp9[105][105] = {{'#','#','#','#','#','#','#','#','F','#'},
					  {'#',' ',' ',' ','A',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#',' ',' ','#',' ','#'},
					  {'#',' ',' ','O','#',' ','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#',' ',' ','#'},
					  {'#',' ','O',' ','#',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#'}};
char mp10[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ','#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#',' ','#',' ','#','#','#','#','#','#','#',' ','#'},
					  {'#','A','#',' ','#',' ',' ',' ','#','#','F','#',' ',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#',' ',' ','#','#','#','#',' ','#','#',' ','d',' ','#'},
					  {'#',' ','#',' ','D',' ','#',' ','#','#',' ',' ',' ',' ',' ','#','#','#','#','#'},
					  {'#',' ','#',' ','#',' ','#',' ',' ',' ',' ','#','#','#','#','#',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ',' ',' ','#','#','#','#',' ','#',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','O','#','#','#','#','k',' ',' ',' ','#','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#','#','O','#','#','#',' ',' ',' ','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','#',' ','#',' ','#',' ','#'},
					  {'#',' ','#','D','#',' ','#','#',' ','#','#','D','#',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#','K','#',' ','#','#',' ','#','#',' ','#','#','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
					  
char mp11[105][105] ={{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ','#',' ',' ',' ',' ','#',' ','D',' ',' ',' ',' ',' ','#'},
					  {'#',' ','#','#','#',' ','#','#',' ',' ',' ','#','#','#','#',' ','#','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ',' ','o','#','#',' ','#',' ',' ',' ',' ',' ','#','F','#','#',' ','#'},
					  {'#','#','#',' ','#','#','#','#','#','#',' ',' ',' ','#','#','#',' ','#',' ',' ','d',' ','#'},
					  {'#','O','#',' ','D',' ','#',' ','#','#','#','#','#',' ',' ',' ',' ',' ','#','#','#','#','#'},
					  {'#',' ','#',' ','#',' ','#',' ',' ',' ','#',' ',' ',' ','#','#','#',' ','#',' ',' ',' ','#'},
					  {'#',' ','#',' ','#',' ',' ',' ','#',' ','#','#','#','#','#',' ','#',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ','#',' ','#',' ','#',' ',' ','K','#',' ','#','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#','#','#','#','#',' ','#','O','#','#','#',' ',' ',' ','#',' ','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ',' ','#',' ','#','#',' ',' ',' ','#','#',' ','#',' ','#',' ','#'},
					  {'#','A','#',' ','#',' ','#','#',' ',' ','#',' ','#','#',' ','D',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ','#',' ','#',' ','#','k','#','#','#',' ','#','#',' ','#','#','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','o',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
					  
char mp12 [105][105]={{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ',' ','#','#',' ','#','#','#','#','#','#',' ',' ','#','#',' ','#','#','#','#','d','#'},
					  {'#',' ','#',' ','#',' ',' ',' ',' ',' ',' ','#','#',' ',' ',' ',' ','#','F','#','#',' ','#'},
					  {'#',' ','#',' ',' ','#','#','#',' ','#',' ',' ',' ','#','#','#','#','#',' ','D',' ',' ','#'},
					  {'#',' ','#',' ',' ',' ','#',' ',' ','#','#','#',' ',' ',' ',' ',' ',' ','#','#','#','#','#'},
					  {'#',' ',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ','#','#','#',' ','#',' ',' ',' ','#'},
					  {'#',' ',' ','#',' ',' ',' ',' ','#',' ','#',' ','#',' ','#','k','#',' ',' ',' ','#',' ','#'},
					  {'#',' ',' ','#',' ',' ',' ',' ','#',' ','#',' ','#',' ','#',' ','#','#','#',' ','#',' ','#'},
					  {'#',' ',' ',' ','#','#','#','#','#','#','#',' ','#','#','#',' ',' ',' ','#',' ','#',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ','#',' ','#',' ',' ',' ',' ','#','#',' ','#',' ','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#','#','#',' ','#',' ','#','#',' ',' ',' ',' ',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',' ','#','#',' ','#','#','#','#','#','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#','K',' ',' ',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
					  
char mp13[105][105] = {{'#','#','#','#','#','#','#','#','#','#'},
					   {'#',' ',' ',' ',' ',' ',' ','M',' ','#'},
					   {'#',' ',' ',' ',' ',' ',' ','M',' ','#'},
					   {'#',' ',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#',' ',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#','W',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#','W','W',' ',' ',' ',' ','#',' ','F'},
					   {'#','#','#','#','#','#','#','#','#','#'}};
					   
char mp14[105][105] ={{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ','W','#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','o','#',' ',' ',' ','W','#',' ','#'},
					  {'#',' ',' ','#','#',' ','#','#','#','#','#','#',' ',' ','#','#',' ','#','#','#','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','#',' ',' ',' ','#','#',' ',' ','d',' ','#','#','F','#',' ','#'},
					  {'#',' ',' ',' ','#','#','#','#',' ','#',' ',' ',' ','#','#','#','#','#','#','D','M',' ','#'},
					  {'#',' ','#',' ','#','O',' ',' ',' ','#','#','#',' ',' ',' ',' ','#','#','#','#','#',' ','#'},
					  {'#',' ','#',' ',' ','#','#',' ',' ',' ',' ',' ',' ',' ','#',' ',' ',' ','#','#','#',' ','#'},
					  {'#',' ',' ','#',' ',' ','#',' ','#',' ','#',' ','#',' ','#','#',' ',' ',' ','#','#',' ','#'},
					  {'#',' ',' ','#',' ',' ','M',' ','#',' ','#',' ','#',' ','#',' ','#','#',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#','#','#','#','#','#','#','#','#','#','#',' ',' ',' ','#','M','#',' ','#'},
					  {'#',' ','#',' ',' ',' ',' ','W','#','W','#',' ',' ',' ',' ','#',' ','#','#',' ','#',' ','#'},
					  {'#',' ','#',' ','#',' ','#','#','#',' ','#',' ','#','#',' ','#',' ',' ',' ',' ','#',' ','#'},
					  {'#','#','#',' ','#',' ','#',' ',' ',' ','D',' ','#','#',' ','#','#','#','#',' ','#','M','#'},
					  {'#','k',' ',' ','#','o','#',' ',' ',' ','#',' ','#',' ',' ',' ','O','#','K',' ','A',' ','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp15[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					   {'#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					   {'#',' ','#',' ','#',' ','#','#','#','#','#','#','#',' ','#'},
					   {'#',' ','#',' ','#','K','#',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#',' ','#',' ','#','#','#','#',' ','#','#',' ',' ',' ','#'},
					   {'#',' ','#',' ','#',' ',' ',' ',' ','#','#','#','#','#','#'},
					   {'#',' ','#','#','#','#',' ',' ',' ',' ','#',' ',' ',' ','#'},
					   {'#',' ','#',' ',' ',' ',' ','#','#','#','#',' ','#','#','#'},
					   {'#',' ','#',' ','#','#',' ','#',' ',' ',' ',' ','#','F','#'},
					   {'#',' ','#',' ','#','#',' ','#',' ','#','#','#','#','D','#'},
					   {'#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ','&','#'},
					   {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};					  
char mp16[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					   {'#',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					   {'#',' ','#','#','#',' ','#','#','#','#','#','#','#',' ','#'},
					   {'#',' ','#','O','#','K','#',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#',' ','#',' ','#','#','#',' ','O','#','#',' ',' ',' ','#'},
					   {'#',' ','#',' ',' ',' ',' ',' ',' ','#','#','#','#','#','#'},
					   {'#',' ','#','#','#',' ','#','#',' ',' ','#',' ',' ','F','#'},
					   {'#',' ','#',' ',' ',' ',' ','#','#','#','#',' ','#','#','#'},
					   {'#',' ','#',' ','#','#','D','#',' ','M',' ',' ','#','W','#'},
					   {'#',' ',' ',' ','#','#',' ','#',' ','#','#','#','#','&','#'},
					   {'#',' ','#',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					   {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
char mp17[105][105] ={{'M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M'},
					  {'M',' ','W','M',' ',' ',' ','M',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','M'},
					  {'M',' ','M','M',' ','M',' ',' ',' ','M','M','M','M','M','M','M','M','M',' ','M','M',' ','M'},
					  {'M',' ',' ','M',' ','M','M','M',' ','M','M','M','M','M',' ',' ',' ','M',' ',' ','M',' ','M'},
					  {'M','M',' ',' ',' ',' ','M','M',' ','M',' ',' ',' ','M',' ','M',' ','M','M',' ','M',' ','M'},
					  {'M','M','d','M','M',' ','M','M','k','M',' ','M',' ',' ',' ','M',' ',' ',' ','M','M',' ','M'},
					  {'M',' ',' ','M','M',' ',' ','M','M','M',' ','M',' ','M','M',' ',' ','M',' ','M',' ',' ','M'},
					  {'M',' ','M','M','M','M',' ','M',' ',' ',' ',' ','M','M','M','M','M','M',' ','M','M',' ','M'},
					  {'M',' ','M','M','M','M',' ','M',' ','M','M','M','M','O','M','M','M','O',' ',' ','M',' ','M'},
					  {'M',' ','M','M','M',' ',' ',' ',' ','M','M','M','M',' ',' ',' ','M','M',' ','M',' ',' ','M'},
					  {'M',' ','M','M','M',' ','M','M','M','M','M','M','M','M','M',' ','M','M','M','M',' ','M','M'},
					  {'M',' ','M','M','M','M','M','M','M',' ',' ',' ','M',' ','M',' ',' ','M','K','#','D','#','#'},
					  {'M',' ','M',' ',' ',' ','M',' ',' ',' ','M',' ','M',' ','M','M',' ','M',' ','#','M',' ','#'},
					  {'M',' ',' ',' ','M',' ',' ',' ','M','M','M',' ',' ',' ','M','M',' ',' ',' ','#','#','F','#'},
					  {'M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','M','#','#','#'}};
char mp18[105][105] = {{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					   {'#',' ','#','O','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
					   {'#',' ','#','O','#',' ','#','#','#','#','#','#','#',' ','#'},
					   {'#',' ','#','#','#','*','#',' ',' ',' ',' ',' ','#',' ','#'},
					   {'#',' ','#',' ','#','#','#',' ','#','#','#',' ',' ',' ','#'},
					   {'#',' ','#',' ','M','M',' ',' ',' ',' ','#','#','#','#','#'},
					   {'#',' ','#',' ','M','M',' ',' ',' ',' ','#',' ',' ','K','#'},
					   {'#',' ','#',' ','M','M',' ',' ',' ',' ','|',' ','#','#','#'},
					   {'#',' ','#',' ','#','#','-','#','#','#','#',' ','#','F','#'},
					   {'#',' ',' ',' ','#','#',' ','#','#',' ','#','#','#',' ','#'},
					   {'#',' ','#',' ','P','#',' ',' ',' ',' ',' ',' ','D',' ','#'},
					   {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
queue<pair<int,int>> mp18mon;
char mp19[105][105] ={{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#',' ','A',' ',' ','D',' ','#'},
					  {'#',' ','#','#','#','#','-','#','#','#','#','#',' ',' ','#','#',' ','#','#','#','#',' ','#'},
					  {'#',' ',' ','#',' ','#',' ','#',' ',' ',' ','#','#',' ','K','#',' ','#','#','F','#',' ','#'},
					  {'#','#',' ',' ',' ',' ','#','#',' ','#',' ',' ',' ','#','#','#','M','#','#',' ','d',' ','#'},
					  {'#',' ',' ','#','#',' ',' ',' ',' ','#','#','#',' ',' ',' ',' ',' ',' ','#','#','#',' ','#'},
					  {'#',' ','#','#','O','#','#',' ',' ',' ','#',' ','#','#','#',' ',' ',' ','#','#','#',' ','#'},
					  {'#',' ',' ','#',' ',' ','#',' ','#','M','#',' ',' ',' ','#','#','#',' ',' ','#','#',' ','#'},
					  {'#','#',' ','#',' ',' ',' ',' ','#','M','M',' ','#',' ','#',' ','#','#',' ',' ','#',' ','#'},
					  {'#',' ',' ',' ','#','#','#','#','#','#','#','#','#','#','#',' ',' ',' ','#','M','#',' ','#'},
					  {'#',' ',' ',' ',' ',' ',' ',' ','#','k','#',' ',' ','M',' ',' ',' ','#','#',' ','#','#','#'},
					  {'#','D','#','#','#',' ','#','#','#',' ','#',' ',' ','#',' ','#',' ',' ',' ',' ',' ',' ','#'},
					  {'#',' ','#','P','#',' ','#',' ',' ',' ','|',' ','#','#',' ','#','#','#','#',' ','#',' ','#'},
					  {'#',' ',' ',' ','#',' ','#',' ',' ',' ','#',' ','#',' ',' ',' ','O','#',' ',' ','#','*','#'},
					  {'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'}};
queue<pair<int,int>> mp19mon;


void position(short x = 0,short y = 0){
	HANDLE hout = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD coord = {y,x};
	SetConsoleCursorPosition(hout,coord);
}
int changecolor(string text,int r,int g,int b){
	HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
	if(hOut==INVALID_HANDLE_VALUE) return GetLastError();
	DWORD dwMode = 0;
	if(!GetConsoleMode(hOut,&dwMode)) return GetLastError();
	dwMode |= 0x0004;
	if(!SetConsoleMode(hOut,dwMode)) return GetLastError();
	wprintf(L"\x1b[38;2;%d;%d;%dm\x1b[48;2;%d;%d;%dm",r,g,b,12,12,12);
	printf(text.c_str());
	wprintf(L"\x1b[38;2;%d;%d;%dm\x1b[48;2;%d;%d;%dm",204,204,204,12,12,12);
	return 0;
}
pair<int,int> get_AB(char mp[105][105],int n,int m){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(mp[i][j] == 'A' || mp[i][j] == 'B'){
				return {i,j}; 
			}
		}
	}
	return {-1,-1};
}
void print(char mp[105][105],int ix,int iy,int n,int m){
	pair<int,int> AB;
	AB = get_AB(mp,n,m);
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(mp[ix][iy] == 'P' && !get_water){
				get_water = 1;
			}
			else if(mp[ix][iy] == 'W' && !get_water){
				get_water = 1;
				mp[ix][iy] = ' ';
			}
			else if(mp[ix][iy] == 'M'){
				get_water = 0;
				mp[ix][iy] = ' ';
			}
			if(i == AB.first && j == AB.second){
				mp[i][j] = open?'A':'B';
			}
			bool flag = 0;
			if(!(abs(ix-i) <= eye*0.7))flag = 1;
			if(!(abs(iy-j) <= eye))flag = 1;
			//if(!(abs(ix-i)*abs(ix-i)+abs(iy-j)*abs(iy-j)*0.3<=eye*eye))flag = 1;
			if(eye == -1)flag = 0;
			if(ix == i && iy == j){
				if(get_water == 1)changecolor("i",30,144,255);
				else cout << 'i';
				continue;
			}
			if(flag)cout << ' ';
			else if(i == monster_x && j == monster_y && have_mon){
				changecolor("&",255,140,0);
				continue;
			}else if(i == al_monster_x && j == al_monster_y){
				changecolor("@",255,140,0);
				continue;
			}
			else if(mp[i][j] == 'P'){
				changecolor("P",40,154,255);
				continue;
			}
			else if(mp[i][j] == 'W'){
				changecolor("W",30,144,255);
				continue; 
			}
			else if(mp[i][j] == 'M'){
				changecolor("M",255,0,0);
				continue;
			}else if(mp[i][j] == '-'){
				if(sw_open == 0)changecolor("-",127,255,0);
				else cout << '-';
			}else if(mp[i][j] == '|'){
				if(sw_open == 1)changecolor("|",127,255,0);
				else cout << '|';
			}
			else cout << (mp[i][j] == '&' ? ' ' : mp[i][j]);
		}
		cout << '\n';
	}
} 
void HideCursor(){
	CONSOLE_CURSOR_INFO cursor_info = {1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void slowout(char *p,int t){
	while(1){
		if(*p != 0)cout << *p;
		else break;
		Sleep(t);
		*p++;
	}
}
bool check(char mp[105][105],int x,int y){
	return mp[x][y] == '#' || mp[x][y] == 'D' && !get_key || mp[x][y] == 'd' && !get_small_key || mp[x][y] == '-' && sw_open == 1 || mp[x][y] == '|' && sw_open == 0 || mp[x][y] == 'B';
}
queue<pair<int,int>> q;
int wait = 0;
void control(char mp[105][105],queue<pair<int,int>> &monq = q){
	while(true){
		Sleep(60);
		wait++;
		if(wait >= 4){
			wait = 0;
			monq.push(monq.front());
			al_monster_x = monq.front().first;
			al_monster_y = monq.front().second;
			monq.pop();
		}
		if(al_monster_x != -1){
			print(mp,ix,iy,20,25); 
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过\n&会随着你的移动而移动!";
			cout << "\n按C退出关卡\n在*的位置按下空格改变开关门的状态\n橙色的基本都不是什么好东西...";
			position();
		}
		if(ix == al_monster_x && iy == al_monster_y){
			ix = 1,iy = 1;
		}
		if(KD(87)&&!check(mp,ix-1,iy)){ix--;if(!check(mp,monster_x-1,monster_y)){monster_x--;}break;}
		if(KD(65)&&!check(mp,ix,iy-1)){iy--;if(!check(mp,monster_x,monster_y-1)){monster_y--;}break;}
		if(KD(83)&&!check(mp,ix+1,iy)){ix++;if(!check(mp,monster_x+1,monster_y)){monster_x++;}break;}
		if(KD(68)&&!check(mp,ix,iy+1)){iy++;if(!check(mp,monster_x,monster_y+1)){monster_y++;}break;}
		if(KD(32) && ix == sw_x && iy == sw_y){sw_open = !sw_open,Sleep(50);break;}
		if(KD(67)){goback = 1;return;}
	}
	if(mp[ix][iy] == 'M' && !get_water){
		ix = 1,iy = 1;
	}
	if(ix == monster_x && iy == monster_y){
		ix = 1,iy = 1;
	}
	if(mp[ix][iy] == 'K'){
		mp[ix][iy] = ' ';
		get_key = 1;
	}
	if(mp[ix][iy] == 'k'){
		mp[ix][iy] = ' ';
		get_small_key = 1;
	}
	if(ix == o1x && iy == o1y){
		ix = o2x,iy = o2y;
	}else if(ix == o2x && iy == o2y){
		ix = o1x,iy = o1y;
	}
	if(ix == s_o1x && iy == s_o1y){
		ix = s_o2x,iy = s_o2y;
	}else if(ix == s_o2x && iy == s_o2y){
		ix = s_o1x,iy = s_o1y;
	}
	open = !open;
}
pair<int,int> getf(char mp[105][105],int n,int m){
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(mp[i][j] == 'F')return {i,j};
		}
	}
}
pair<pair<int,int>,pair<int,int>> geto(char mp[105][105],int n,int m){
	int x1=-1,x2=-1,y1=-1,y2=-1;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(mp[i][j] == 'O')x1 == -1?x1 = i,y1 = j:x2 = i,y2 = j;
		}
	}
	return {{x1,y1},{x2,y2}};
}
pair<pair<int,int>,pair<int,int>> gets_o(char mp[105][105],int n,int m){
	int x1=-1,x2=-1,y1=-1,y2=-1;
	for(int i = 0;i < n;i++){
		for(int j = 0;j < m;j++){
			if(mp[i][j] == 'o')x1 == -1?x1 = i,y1 = j:x2 = i,y2 = j;
		}
	}
	return {{x1,y1},{x2,y2}};
}
pair<int,int> p;
pair<pair<int,int>,pair<int,int>> po;
pair<pair<int,int>,pair<int,int>> ps_o;
void O(char mp[105][105]){
	po = geto(mp,20,25);
	o1x = po.first.first;
	o1y = po.first.second;
	o2x = po.second.first;
	o2y = po.second.second;
	ps_o = gets_o(mp,20,25);
	s_o1x = ps_o.first.first;
	s_o1y = ps_o.first.second;
	s_o2x = ps_o.second.first;
	s_o2y = ps_o.second.second;
}
pair<int,int> getMonsterXY(char mp[105][105]){
	for(int i = 1;i <= 104;i++){
		for(int j = 1;j <= 104;j++){
			if(mp[i][j] == '&'){
				return {i,j};
			}
		}
	}
	return {-1,-1};
}
pair<int,int> getswitch(char mp[105][105]){
	for(int i = 0;i <= 104;i++){
		for(int j = 0;j <= 104;j++){
			if(mp[i][j] == '*'){
				return {i,j};
			}
		}
	}
	return {-1,-1};
} 
void init_mp(char (&mp)[105][105],int idx){
	for(int i = 0;i < 100;i++){
		for(int j = 0;j < 100;j++){
			mp[i][j] = backlevel[idx][i][j];
		}
	}
}
void readmp(char mp[105][105],int idx){
	for(int i = 0;i < 100;i++){
		for(int j = 0;j < 100;j++){
			backlevel[idx][i][j] = mp[i][j];
		}
	}
}
void read_allmp(){
	q.push({-1,-1});
	readmp(mp1,1);
	readmp(mp2,2);
	readmp(mp3,3);
	readmp(mp4,4);
	readmp(mp5,5);
	readmp(mp6,6);
	readmp(mp7,7);
	readmp(mp8,8);
	readmp(mp9,9);
	readmp(mp10,10);
	readmp(mp11,11);
	readmp(mp12,12);
	readmp(mp13,13);
	readmp(mp14,14);
	readmp(mp15,15);
	readmp(mp16,16);
	readmp(mp17,17);
	readmp(mp18,18);
	readmp(mp19,19);
}
void init_map_together(){
	init_mp(mp1,1);
	init_mp(mp2,2);
	init_mp(mp3,3);
	init_mp(mp4,4);
	init_mp(mp5,5);
	init_mp(mp6,6);
	init_mp(mp7,7);
	init_mp(mp8,8);
	init_mp(mp9,9);
	init_mp(mp10,10);
	init_mp(mp11,11);
	init_mp(mp12,12);
	init_mp(mp13,13);
	init_mp(mp14,14);
	init_mp(mp15,15);
	init_mp(mp16,16);
	init_mp(mp17,17);
	init_mp(mp18,18);
	init_mp(mp19,19);
}
int main(){
	HideCursor();
	read_allmp();
	//关卡目录
	accepted[0] = 1;
	open_level[0] = 1;
	level_sum = 18;
	string op;
	while(true){
		returnback : ;
		goback = 0;
		init_map_together();
		init_al_mon;
		while(true){
			keybd_event(VK_RETURN, 0, 0, 0);
			keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);
			cls;
			cout << "关卡目录:\n";
			cout << "0. 新手教程 ";
			changecolor("open\n",107,196,122);
			for(int i = 1;i <= level_sum;i++){
				printf("%d. 第%d关 ",i,i);
				string state;
				state = accepted[i - 1] == 1 || accepted[i] == 1 ? "open" : "locked";
				if(state == "open")changecolor("open",107,196,122);
				else changecolor("locked",255,0,0);
				cout << '\n';
			}
			for(int i = 1;i <= level_sum;i++){
				open_level[i] = (accepted[i - 1] == 1 || accepted[i] == 1) ? 1 : 0;
				//删去注释可以随意游玩所有关卡 
				//open_level[i] = 1;
			}
			cin >> op;
			if(open_level[0] && op == "0"){cls;goto level0;}
			if(open_level[1] && op == "1"){cls;goto level1;}
			if(open_level[2] && op == "2"){cls;goto level2;}
			if(open_level[3] && op == "3"){cls;goto level3;}
			if(open_level[4] && op == "4"){cls;goto level4;}
			if(open_level[5] && op == "5"){cls;goto level5;}
			if(open_level[6] && op == "6"){cls;goto level6;}
			if(open_level[7] && op == "7"){cls;goto level7;}
			if(open_level[8] && op == "8"){cls;goto level8;}
			if(open_level[9] && op == "9"){cls;goto level9;}
			if(open_level[10] && op == "10"){cls;goto level10;}
			if(open_level[11] && op == "11"){cls;goto level11;}
			if(open_level[12] && op == "12"){cls;goto level12;}
			if(open_level[13] && op == "13"){cls;goto level13;}
			if(open_level[14] && op == "14"){cls;goto level14;}
			if(open_level[15] && op == "15"){cls;goto level15;}
			if(open_level[16] && op == "16"){cls;goto level16;}
			if(open_level[17] && op == "17"){cls;goto level17;}
			if(open_level[18] && op == "18"){cls;goto level18;}
		}
		//新手教程 
		level0:slowout("新手教程",25);
		Sleep(1500);
		cls;
		init;
		print(mp1,ix,iy,10,15);
		cout << "按WASD移动,F的位置即为终点";
		cout << "\n按C退出关卡";
		p = getf(mp1,10,15);
		fx = p.first;
		fy = p.second;
		while(true){
			control(mp1);
			if(goback == 1)goto returnback;
			position();
			print(mp1,ix,iy,10,15);
			cout << "按WASD移动,F的位置即为终点";
			cout << "\n按C退出关卡";
			//Sleep(100);
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("非常好!看样子你已经学会了基本操作!",25);
		Sleep(1500);
		cls;
		accepted[0] = 1;
		continue;
		//第一关 
		level1:slowout("第一关",100);
		Sleep(1500);
		cls;
		init;
		print(mp2,ix,iy,10,15);
		cout << "按WASD移动,F的位置即为终点";
		cout << "\n按C退出关卡";
		p = getf(mp2,10,15);
		fx = p.first;
		fy = p.second;
		while(true){
			control(mp2);
			if(goback == 1)goto returnback;
			position();
			print(mp2,ix,iy,10,15);
			cout << "按WASD移动,F的位置即为终点";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[1] = 1;
		continue;
		//第二关 
		level2:slowout("第二关",100);
		Sleep(1500);
		cls;
		init;
		print(mp3,ix,iy,15,20);
		cout << "按WASD移动,F的位置即为终点";
		cout << "\n按C退出关卡";
		p = getf(mp3,10,15);
		fx = p.first;
		fy = p.second;
		while(true){
			control(mp3);
			if(goback == 1)goto returnback;
			position();
			print(mp3,ix,iy,15,20);
			cout << "按WASD移动,F的位置即为终点";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("接下来会有门(D)加入,想要打开门就必须打开开关(K)",10);
		Sleep(1500);
		cls; 
		accepted[2] = 1;
		continue;
		//第三关 
		level3:slowout("第三关",100);
		Sleep(1500);
		cls;
		init;
		print(mp4,ix,iy,15,20);
		cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D";
		cout << "\n按C退出关卡";
		p = getf(mp3,10,15);
		fx = p.first;
		fy = p.second;
		while(true){
			control(mp4);
			if(goback == 1)goto returnback;
			position();
			print(mp4,ix,iy,15,20);
			cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[3] = 1;
		continue;
		//第四关
		level4:slowout("第四关",100);
		Sleep(1500);
		cls;
		init;
		print(mp5,ix,iy,15,20);
		cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D";
		cout << "\n按C退出关卡";
		p = getf(mp5,15,20);
		fx = p.first;
		fy = p.second;
		while(true){
			control(mp5);
			if(goback == 1)goto returnback;
			position();
			print(mp5,ix,iy,15,20);
			cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("非常好!你已经基本学会了如何对付D和K!\n",10);
		slowout("接下来迷宫中出现了传送门O,它会将你带到另一个O那里!\n",10);
		Sleep(1500);
		cls;
		accepted[4] = 1;
		continue;
		//第五关
		level5:slowout("第五关",100);
		Sleep(1500);
		cls;
		init;
		print(mp6,ix,iy,15,20);
		cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D\nO会将你带到另一个O那里";
		cout << "\n按C退出关卡";
		p = getf(mp6,15,20);
		fx = p.first;
		fy = p.second;
		po = geto(mp6,15,20);
		o1x = po.first.first;
		o1y = po.first.second;
		o2x = po.second.first;
		o2y = po.second.second;
		while(true){
			control(mp6);
			if(goback == 1)goto returnback;
			position();
			print(mp6,ix,iy,15,20);
			cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D\nO会将你带到另一个O那里";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[5] = 1;
		continue;
		//第六关
		level6:slowout("第六关",100);
		Sleep(1500);
		cls;
		init;
		print(mp7,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D\nO会将你带到另一个O那里";
		cout << "\n按C退出关卡";
		p = getf(mp7,20,25);
		fx = p.first;
		fy = p.second;
		po = geto(mp7,20,25);
		o1x = po.first.first;
		o1y = po.first.second;
		o2x = po.second.first;
		o2y = po.second.second;
		while(true){
			control(mp7);
			if(goback == 1)goto returnback;
			position();
			print(mp7,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K才可以通过D\nO会将你带到另一个O那里";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("门多了一种种类,分为D和d两种,而钥匙自然也就变成了K和k两种",15);
		cout << "\n按C退出关卡";
		Sleep(1500);
		cls;
		accepted[6] = 1;
		continue;
		//第七关
		level7:slowout("第七关",100);
		Sleep(1500);
		cls;
		init;
		print(mp8,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里";
		cout << "\n按C退出关卡";
		p = getf(mp8,20,25);
		fx = p.first;
		fy = p.second;
		po = geto(mp8,20,25);
		o1x = po.first.first;
		o1y = po.first.second;
		o2x = po.second.first;
		o2y = po.second.second;
		while(true){
			control(mp8);
			if(goback == 1)goto returnback;
			position();
			print(mp8,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("接下来又出现了一种神奇的障碍:AB门,这种门随着你走的步数不断变换,当门为A时可以通过反之无法通过",15);
		cout << "\n按C退出关卡";
		Sleep(2000); 
		cls;
		accepted[7] = 1;
		continue;
		//第八关
		level8:slowout("第八关",100);
		Sleep(1500);
		cls;
		init;
		print(mp9,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp9,20,25);
		fx = p.first;
		fy = p.second;
		po = geto(mp9,20,25);
		o1x = po.first.first;
		o1y = po.first.second;
		o2x = po.second.first;
		o2y = po.second.second;
		while(true){
			control(mp9);
			if(goback == 1)goto returnback;
			position();
			print(mp9,ix,iy,20,15);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("地图大了,你自然窥不见它的全貌...",20);
		Sleep(1500);
		cls;
		accepted[8] = 1;
		continue;
		//第九关
		level9:slowout("第九关\n",100);
		slowout("本关视野:7",40);
		Sleep(1500);
		cls;
		init;
		open = 1; 
		eye = 7;
		print(mp10,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp10,20,25);
		fx = p.first;
		fy = p.second;
		po = geto(mp10,20,25);
		o1x = po.first.first;
		o1y = po.first.second;
		o2x = po.second.first;
		o2y = po.second.second;
		while(true){
			control(mp10);
			if(goback == 1)goto returnback;
			position();
			print(mp10,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("门的种类多了,传送门也不可以拉下",20);
		Sleep(1500);
		cls;
		accepted[9] = 1;
		continue;
		//第十关 
		level10:slowout("第十关\n",100);
		slowout("本关视野:5",40);
		Sleep(1500);
		cls;
		init;
		eye = 5;
		open = 1; 
		print(mp11,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp11,20,25); fx = p.first; fy = p.second;
		O(mp11);
		while(true){
			control(mp11);
			if(goback == 1)goto returnback;
			position();
			print(mp11,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[10] = 1;
		continue;
		//第十一关
		level11:slowout("特殊关 第十一关 无尽的黑暗\n",100);
		slowout("本关视野:2",40);
		Sleep(1500);
		cls;
		init;
		eye = 2;
		open = 1; 
		print(mp12,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp12,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp12);
			if(goback == 1)goto returnback;
			position();
			print(mp12,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		slowout("地图中出现了岩浆!如果碰到岩浆你就会回到原点。你必须要拿到水才可以将岩浆浇灭!",10);
		Sleep(1500);
		accepted[11] = 1;
		cls;
		continue;
		//第十二关
		level12:slowout("第十二关\n",100);
		Sleep(1500);
		cls;
		init;
		print(mp13,ix,iy,20,15);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp13,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp13);
			if(goback == 1)goto returnback;
			position();
			print(mp13,ix,iy,20,15);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[12] = 1;
		continue;
		//第十三关
		level13:slowout("第十三关\n",100);
		slowout("本关视野:4",40);
		Sleep(1500);
		cls;
		init;
		O(mp14);
		eye = 4; 
		print(mp14,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过";
		cout << "\n按C退出关卡";
		p = getf(mp14,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp14);
			if(goback == 1)goto returnback;
			position();
			print(mp14,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[13] = 1;
		continue;
		//第十四关
		level14:slowout("第十四关\n",100);
		Sleep(1500);
		cls;
		init;
		have_mon = 1;
		monster_x = getMonsterXY(mp15).first;
		monster_y = getMonsterXY(mp15).second; 
		O(mp15); 
		print(mp15,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
		cout << "\n按C退出关卡";
		p = getf(mp15,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp15);
			if(goback == 1)goto returnback;
			position();
			print(mp15,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[14] = 1;
		continue;
		//第十五关
		level15:slowout("第十五关\n",100);
		slowout("本关视野:4",40);
		Sleep(1500);
		cls;
		init;
		eye = 4;
		have_mon = 1;
		monster_x = getMonsterXY(mp16).first;
		monster_y = getMonsterXY(mp16).second; 
		O(mp16); 
		print(mp16,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
		cout << "\n按C退出关卡";
		p = getf(mp16,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp16);
			if(goback == 1)goto returnback;
			position();
			print(mp16,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[15] = 1;
		continue;
		//第十六关
		level16:slowout("特殊关 第十六关 生命之源\n",100);
		slowout("本关视野:2\n",40);
		slowout("温馨提示:本关可以离开地图,在失去通关机会时请按c退出关卡",30);
		Sleep(1500);
		cls;
		init;
		eye = 2;
		monster_x = getMonsterXY(mp17).first;
		monster_y = getMonsterXY(mp17).second; 
		O(mp17); 
		print(mp17,ix,iy,20,25);
		cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO(o)会将你带到另一个O(o)那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
		cout << "\n按C退出关卡";
		p = getf(mp17,20,25); fx = p.first; fy = p.second;
		while(true){
			Sleep(10); 
			control(mp17);
			if(goback == 1)goto returnback;
			position();
			print(mp17,ix,iy,20,25);
			cout << "按WASD移动,F的位置即为终点,必须获得K(k)才可以通过D(d)\nO会将你带到另一个O那里\n当AB门为A时可以通过反之无法通过\n怪兽会随着你的移动而移动!";
			cout << "\n按C退出关卡";
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[16] = 1;
		continue;
		//第十七关
		level17:slowout("第十七关",100);
		Sleep(1500);
		cls;
		init;
		sw_x = getswitch(mp18).first;
		sw_y = getswitch(mp18).second;
		monster_x = getMonsterXY(mp18).first;
		monster_y = getMonsterXY(mp18).second; 
		O(mp18); 
		p = getf(mp18,20,25); fx = p.first; fy = p.second;
		while(true){
			control(mp18,mp18mon);
			if(goback == 1)goto returnback;
			//position();
			//print(mp18,ix,iy,20,25);
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[17] = 1;
		continue;
		//第十八关
		level18:slowout("第十八关\n",100);
		slowout("本关视野:4",40);
		Sleep(1500);
		cls;
		init;
		eye = 4;
		sw_x = getswitch(mp19).first;
		sw_y = getswitch(mp19).second;
		monster_x = getMonsterXY(mp19).first;
		monster_y = getMonsterXY(mp19).second; 
		O(mp19); 
		p = getf(mp19,20,25); fx = p.first; fy = p.second;
		sw_open = 1;
		while(true){
			control(mp19,mp19mon);
			if(goback == 1)goto returnback;
			//position();
			//print(mp18,ix,iy,20,25);
			if(ix == fx && iy == fy){
				cls;
				break;
			}
		}
		accepted[18] = 1;
		continue;
	}
	return 0;
} 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的 C++ 编写的迷宫游戏示例,供参考: ```c++ #include <iostream> #include <string> using namespace std; const int ROW = 5; // 迷宫行数 const int COL = 5; // 迷宫列数 // 迷宫地图 char map[ROW][COL] = { {'#', '#', '#', '#', '#'}, {'#', ' ', ' ', ' ', '#'}, {'#', '#', '#', ' ', '#'}, {'#', ' ', ' ', ' ', '#'}, {'#', '#', '#', '#', '#'} }; // 当前位置 int cur_row = 1; int cur_col = 1; // 打印迷宫地图 void print_map() { for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { cout << map[i][j] << " "; } cout << endl; } } // 移动 bool move(int row, int col) { if (map[row][col] == ' ') { // 如果可以移动 map[cur_row][cur_col] = ' '; // 重置原位置 cur_row = row; cur_col = col; map[cur_row][cur_col] = 'o'; // 设置新位置 return true; } return false; } int main() { map[cur_row][cur_col] = 'o'; // 设置起点 print_map(); while (true) { string input; cout << "请输入方向:"; cin >> input; if (input == "w") { // 上 if (move(cur_row - 1, cur_col)) { print_map(); } } else if (input == "s") { // 下 if (move(cur_row + 1, cur_col)) { print_map(); } } else if (input == "a") { // 左 if (move(cur_row, cur_col - 1)) { print_map(); } } else if (input == "d") { // 右 if (move(cur_row, cur_col + 1)) { print_map(); } } else { // 输入错误 cout << "请输入正确的方向!" << endl; } if (cur_row == ROW - 2 && cur_col == COL - 2) { // 到达终点 cout << "恭喜您,成功到达终点!" << endl; break; } } return 0; } ``` 这个迷宫游戏是一个基于控制台的简单实现,玩家通过输入 w/s/a/d 来控制人物移动,最终到达终点。其中 # 表示障碍物,o 表示人物。你可以根据自己的需求对代码进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值