第一步
要制作迷宫小游戏,我们要利用二维数组搭建场景,制作一个简易的迷宫
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>//小游戏所需的所有头文件
int main()
{
char a[100][100] = {"######",
"#o # ",
"# ## #",
"# # #",
"## #",
"######" };//迷宫出口为a[1][5]
//我们需要输出这个迷宫。
for (i = 0; i < 6; i++) //通过数组的遍历,输出定义的迷宫;
puts(a[i]);
return 0;
}
第一步迷宫制作完成后,我们就应该考虑如何让小球移动起来
为了游戏体验感
我们使用W,S,A,D来分别小球控制上下左右的移动
具体操作
在游戏中我们需要输入W,S,A,D中的一个,来控制小球的移动
以W为例我们来看看小球上移时程序该怎么运行
我们想让小球向上移动,基本条件是小球上方没有‘#’
然后小球才可以向上移动;
小球上移后行数X+1,列数Y不变
即小球下一个的位置在a[x+1][y]
这就是我们点击W后小球上移的程序原理
注:为了游戏的体验感,我们输入WSAD是使用getch()
各位如果有兴趣也可以试一下使用getchar和getche是什么效果(吐血小游戏)
ch = _getch();
if (ch == 'a')
{
if (a[x][y - 1] != '#')
{
a[x][y] = ' ';
y--;
a[x][y] = 'o';
}
}
其他的 S,A,D,也是类似的
S原理
ch = _getch();
if (ch == 's')
{
if (a[x + 1][y] != '#')
{
a[x][y] = ' ';
x++;
a[x][y] = 'o';
}
}
A原理
if (ch == 'a')
{
if (a[x][y - 1] != '#')
{
a[x][y] = ' ';
y--;
a[x][y] = 'o';
}
}
D原理
if (ch == 'd')
{
if (a[x][y + 1] != '#')
{
a[x][y] = ' ';
y++;
a[x][y] = 'o';
}
}
我们在利用WSAD移动时,不希望小球出现在原来的位置
我们需要在每一次输入WSAD时用system(“cls”)进行一次清零;
我们需要利用while循环是程序在未到达出口时持续运行
while (x != 1 || y != 5)
{
ch = _getch();
if (ch == 's')
{
if (a[x + 1][y] != '#')
{
a[x][y] = ' ';
x++;
a[x][y] = 'o';
}
}
if (ch == 'w')
{
if (a[x - 1][y] != '#')
{
a[x][y] = ' ';
x--;
a[x][y] = 'o';
}
}
if (ch == 'a')
{
if (a[x][y - 1] != '#')
{
a[x][y] = ' ';
y--;
a[x][y] = 'o';
}
}
if (ch == 'd')
{
if (a[x][y + 1] != '#')
{
a[x][y] = ' ';
y++;
a[x][y] = 'o';
}
}
这个小游戏的器官大致就是这样
以下就是整个小游戏的源码
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
int main()
{
char a[100][100] = { "######",
"#o # ",
"# ## #",
"# # #",
"## #",
"######" };
int i, x = 1, y = 1;//p,q存储迷宫出口的位置
for (i = 0; i < 6; i++)
puts(a[i]);
char ch;
while (x != 1 || y != 5)
{
ch = _getch();
if (ch == 's')
{
if (a[x + 1][y] != '#')
{
a[x][y] = ' ';
x++;
a[x][y] = 'o';
}
}
if (ch == 'w')
{
if (a[x - 1][y] != '#')
{
a[x][y] = ' ';
x--;
a[x][y] = 'o';
}
}
if (ch == 'a')
{
if (a[x][y - 1] != '#')
{
a[x][y] = ' ';
y--;
a[x][y] = 'o';
}
}
if (ch == 'd')
{
if (a[x][y + 1] != '#')
{
a[x][y] = ' ';
y++;
a[x][y] = 'o';
}
}
system("cls");
if(x==1&&y==5)
printf("成功过关\n");
for (i = 0; i < 6; i++)
puts(a[i]);
}
return 0;
}
这就是最后的运行结果,走出迷宫后会出现成功过关四个字
我们也可以对走过的步数进行计数;
定义一个count;每移动一次;count++
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
int main()
{
char a[1000][1000] = {"##########",
"#o # # ",
"# ## ## ##",
"# # ##",
"## ## ##",
"##########" };
int i, x = 1, y = 1;
int count=0;
for (i = 0; i < 11; i++)
puts(a[i]);
char ch;
while (x != 1|| y != 9)
{
ch = _getch();
count++;
if (ch == 's')
{
if (a[x + 1][y] != '#')
{
a[x][y] = ' ';
x++;
a[x][y] = 'o';
}
}
if (ch == 'w')
{
if (a[x - 1][y] != '#')
{
a[x][y] = ' ';
x--;
a[x][y] = 'o';
}
}
if (ch == 'a')
{
if (a[x][y - 1] != '#')
{
a[x][y] = ' ';
y--;
a[x][y] = 'o';
}
}
if (ch == 'd')
{
if (a[x][y + 1] != '#')
{
a[x][y] = ' ';
y++;
a[x][y] = 'o';
}
}
system("cls");
if (x == 1 && y == 9)
printf("成功过关\n");
for (i = 0; i < 6; i++)
puts(a[i]);
}
printf("你一共走了%d步", count);
Sleep(5000);
return 0;
}
最后的结果中会出现你总共移动的步数
tips:
我们可以将迷宫改动的复杂一点,来提高游戏体验感;由你们自己改造迷宫
我们也可以对走的步数进行计数,以此来比较谁到达终点的效率高
好了,学会了就可以快乐游戏了;