要能行走就只需要判断迷宫中的位置是否为“ ”,为空则让坐标++实现移动,不过要注意的是要防止闪屏,因此我们利用SetConsoleCursorPosition()函数,将光标每次都移动到初始位置,避免闪屏。
代码如下:
#include <iostream>
#include <cstdio>
#include <conio.h>
#include <Windows.h>
using namespace std;
//这里是自定义迷宫区域
char a[60][60] = { "##############" ,
"# 0 ## ### ##" ,
"# ## # # ##" ,
"# ## ## # ##" ,
"# #### # " ,
"# ### ####" ,
"## ### # ###" ,
"##############" };
//在移动玩家时,将我们的光标隐藏,获得更好的体验,当然也可以省去这一步
void Hide() {
HANDLE hOut;
CONSOLE_CURSOR_INFO curInfo;
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
curInfo.dwSize = 1;
curInfo.bVisible = 0;
SetConsoleCursorInfo(hOut, &curInfo);
}
//为了防止闪屏的出现,我们利用SetConsoleCursorPosition()函数,将光标每次都移动到初始位置,避免闪屏
void Set() {
HANDLE hOut;
COORD pos = { 0,0 };
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
}
int main()
{
int x = 1, y = 3;
char ch;
for (int i = 0; i <= 7; i++) {
puts(a[i]);
}
while (1) {
ch = _getch();
if (ch == 's') {
if (a[x + 1][y] == ' ') {
a[x][y] = ' ';
x++;
a[x][y] = '0';
}
}
else if (ch == 'w') {
if (a[x - 1][y] == ' ') {
a[x][y] = ' ';
x--;
a[x][y] = '0';
}
}
else if (ch == 'a') {
if (a[x][y - 1] == ' ') {
a[x][y] = ' ';
y--;
a[x][y] = '0';
}
}
else if (ch == 'd') {
if (a[x][y + 1] == ' ') {
a[x][y] = ' ';
y++;
a[x][y] = '0';
}
}
Set();
for (int i = 0; i <= 7; i++) {
puts(a[i]);
}
if (x == 4 && y == 13) {
break;
}
}
cout << "恭喜!";
return 0;
}