Update README and fixes

This commit is contained in:
2024-04-06 17:35:11 +08:00
parent b23a123012
commit 16c763732a
4 changed files with 229 additions and 235 deletions

View File

@@ -6,3 +6,8 @@ C++ 控制台 迷宫 使用了自动生成迷宫算法,实现迷宫基本玩
所以该代码只能在windows下编译
程序参数可以在代码头部设置,例如迷宫大小和输出区域大小等
需要合适的字体才能正常显示
![游玩示例](play.git)

BIN
a.exe

Binary file not shown.

131
code.cpp
View File

@@ -9,10 +9,10 @@
using namespace std;
// <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD>С
const size_t sWidth = 30, sHeight = 24;
const size_t sWidth = 60, sHeight = 24;
// <20>Թ<EFBFBD><D4B9><EFBFBD>ʵ<EFBFBD>ʴ<EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const size_t width = 9, height = 9;
const size_t width = 33, height = 15;
const char wall = 1;
const char path = 0;
const char target = 2;
@@ -34,10 +34,7 @@ vector<pair<pair<int, int>, int> > walls;
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD>ͨ·<EFBFBD>ˣ<EFBFBD><EFBFBD>Ǿʹ<EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǽ
*/
const int up = 0;
const int down = 1;
const int left = 2;
const int right = 3;
enum Dir { Up, Down, Left, Right };
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>
int xx[] = { 0, 0, -1, 1 };
@@ -123,7 +120,7 @@ void showMap()
int dx = sWidth / 2 - playerx;
int dy = sHeight / 2 - playery;
// <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD>ʼ<EEBFAA><CABC>λ<EFBFBD><CEBB>
gotoxy(1, 1);
gotoxy(0, 0);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
for (int sy = 0; sy < sHeight; ++sy)
@@ -171,38 +168,38 @@ void showMap()
continue;
// <20><><EFBFBD>˽ضϣ<D8B6><CFA3><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ͼʱ<CDBC><CAB1>
int d = 0;
for (int i = 0; i < 4; ++i)
{
if (!isOutBounds(x + xx[i], y + yy[i]) && map[y + yy[i]][x + xx[i]] == wall)
d |= 1 << i;
// int d = 0;
// for (int i = 0; i < 4; ++i)
// {
// if (!isOutBounds(x + xx[i], y + yy[i]) && map[y + yy[i]][x + xx[i]] == wall)
// d |= 1 << i;
}
// }
const int up = 1;
const int down = 2;
const int left = 4;
const int right = 8;
char ch = 0;
switch (d)
{
case 0:
ch = '&';
break;
//case up:
//case down:
case up | down:
ch = '|';
break;
//case left:
//case right:
case left | right:
ch = '-';
break;
default:
ch = '+';
}
putchar(ch);
// const int up = 1;
// const int down = 2;
// const int left = 4;
// const int right = 8;
// char ch = 0;
// switch (d)
// {
// case 0:
// ch = '&';
// break;
// //case up:
// //case down:
// case up | down:
// ch = '|';
// break;
// //case left:
// //case right:
// case left | right:
// ch = '-';
// break;
// default:
// ch = '+';
// }
// putchar(ch);
}
cout << endl;
}
@@ -210,21 +207,6 @@ void showMap()
//putchar('A');
}
/*
// <20>ֶ<EFBFBD><D6B6><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
void sleep(int n)
{
for (int i = 0; i < n*n*n*n; ++i);
}
*/
// ˢ<>µ<EFBFBD>ͼ
void refresh()
{
gotoxy(1, 1);
showMap();
}
// <20><><EFBFBD>ɵ<EFBFBD>ͼ<EFBFBD><EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void generate(int cx, int cy)
{
@@ -258,8 +240,6 @@ void generate(int cx, int cy)
map[wy][wx] = path;
map[wy + yy[d]][wx + xx[d]] = path;
pushAroundWall(wx + xx[d], wy + yy[d]);
//sleep(70);
//refresh();
}
// <20>򴩺󣬽<F2B4A9BA><F3A3ACBD><EFBFBD>ǽ<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
walls.erase(walls.begin() + index);
@@ -273,22 +253,22 @@ void generate(int cx, int cy)
// <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ķ<EFBFBD><C4B7><EFBFBD>
void playerMove(int dir)
bool playerMove(Dir dir)
{
if (0 > dir || dir >= 4)
return;
return false;
int tx = playerx + xx[dir];
int ty = playery + yy[dir];
if (isOutBounds(tx, ty))
return;
return false;
if (map[ty][tx] == wall)
return;
return false;
if (map[ty][tx] == target)
{
system("cls");
cout << "<EFBFBD><EFBFBD>Ϸʤ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << endl;
system("pause");
exit(0);
return true;
}
// ֻ<><D6BB><EFBFBD><EFBFBD>·<EFBFBD><C2B7>ʱ<EFBFBD><CAB1><EFBFBD>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD>ƶ<EFBFBD>
if (map[ty][tx] == path) {
@@ -297,47 +277,56 @@ void playerMove(int dir)
}
// <20>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٴ<EFBFBD>̽<EFBFBD><CCBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
explore(playerx, playery);
return false;
}
// ÿһִ֡<D6A1>и<EFBFBD><D0B8><EFBFBD>
void updata()
bool updata()
{
char ch = getch();
bool win = false;
switch (ch)
{
case 'w':
playerMove(up);
win = playerMove(Dir::Up);
break;
case 's':
playerMove(down);
win = playerMove(Dir::Down);
break;
case 'a':
playerMove(2);
win = playerMove(Dir::Left);
break;
case 'd':
playerMove(3);
win = playerMove(Dir::Right);
break;
case 'q':
exit(0);
break;
case 'r':
return false;
break;
}
return !win;
}
int main()
{
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
srand((unsigned int)time(0));
do {
printf("WSAD<EFBFBD>ƶ<EFBFBD><EFBFBD><EFBFBD>Q<EFBFBD>˳<EFBFBD><EFBFBD><EFBFBD>R<EFBFBD>ؿ<EFBFBD>");
system("pause");
while (true) {
// <20><><EFBFBD>ɵ<EFBFBD>ͼ
generate(1, 1);
// <20><>Ϸѭ<CFB7><D1AD>
while (1)
{
do {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
showMap();
// <20>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>
updata();
} while (updata());
}
} while (getch() != 0);
return 0;
}

BIN
play.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB