跳到主要内容

迷宫游戏

本教程将演示制作一款简易的终端游戏:

  • 有一个 10×1010\times 10 的迷宫。
  • 可以控制角色到达终点。

流程

代码的大致流程如下:

init();
print();
while(!check())
{
move();
print();
}
  • init():初始化
  • print():打印地图
  • check():判断结束
  • move():玩家移动

地图

创建地图

定义一个常量 N=10N=10,表示迷宫地图的大小。

再定义一个 N×NN\times N 的数组 aa 存储地图。

const int N=10;
int a[N][N];

此时我们可以随意编写地图,并赋予数字意义:

  • 00:空地(可以经过)。
  • 11:墙壁(无法经过)。
int a[N][N]=
{
{1,1,1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,1},
{1,1,1,0,1,0,1,1,1,1},
{1,0,0,0,1,0,0,0,0,1},
{1,0,1,0,1,1,1,1,0,1},
{1,0,1,0,0,0,0,0,0,1},
{1,0,1,0,1,0,1,1,0,1},
{1,0,0,0,1,0,1,1,0,1},
{1,0,1,0,1,0,0,0,0,1},
{1,1,1,1,1,1,1,1,1,1}
};

打印地图(print()

打印地图,先清空屏幕,再逐行输出数组即可。

void print()
{
system("cls");
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}

玩家

创建玩家

定义两个变量 xxyy,表示玩家当前的坐标为 (x,y)(x,y)

int x,y;

初始化(init()

将玩家位置设置为出生点 (1,1)(1,1)

void init()
{
x=1;
y=1;
}

事件

判断结束

返回玩家位置是否在目标点 (8,8)(8,8)

bool check()
{
return x==8&&y==8;
}

玩家移动

x,yx,y 备份为 x1,y1x_1,y_1

然后使用 getch() 函数读取一个字符。

int x1=x,y1=y;
char f=getch();
提示

getch() 相比直接输入,不需要按回车键,可以减少玩家操作复杂度。

getch() 函数需要头文件 #include <conio.h>

分别判断 ff 是否为 wasd

如果是某个字符,将 x1x_1y1y_1 移动 11

判断 ax1,y1a_{x_1,y_1} 是否等于 00

如果是,就让 x,yx,y 等于 x1,y1x_1,y_1

完整代码