基础功能实现
对于一个迷宫游戏,最重要的功能就是要让角色实时移动。在这里,我们可以利用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] = {
{'#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#','#'},
{'#',' ',' ',' ','#',' ',' ',' ',' ','#',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
{'#',' ',