C|c语言小游戏 迷宫小游戏(附源码)
第一步 要制作迷宫小游戏,我们要利用二维数组搭建场景,制作一个简易的迷宫
#include
#include
#include
#include//小游戏所需的所有头文件
int main()
{
char a[100][100] = {"######",
"#o #",
"# ## #",
"## #",
"###",
"######" };
//迷宫出口为a[1][5]
//我们需要输出这个迷宫。
for (i = 0;
i < 6;
i++)//通过数组的遍历,输出定义的迷宫;
puts(a[i]);
return 0;
}
【C|c语言小游戏 迷宫小游戏(附源码)】第一步迷宫制作完成后,我们就应该考虑如何让小球移动起来
为了游戏体验感
我们使用W,S,A,D来分别小球控制上下左右的移动
具体操作
在游戏中我们需要输入W,S,A,D中的一个,来控制小球的移动这就是我们点击W后小球上移的程序原理
以W为例我们来看看小球上移时程序该怎么运行
我们想让小球向上移动,基本条件是小球上方没有‘#’
然后小球才可以向上移动;
小球上移后行数X+1,列数Y不变
即小球下一个的位置在a[x+1][y]
注:为了游戏的体验感,我们输入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
#include
#include
#include
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
#include
#include
#include
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:
我们可以将迷宫改动的复杂一点,来提高游戏体验感;由你们自己改造迷宫
我们也可以对走的步数进行计数,以此来比较谁到达终点的效率高
好了,学会了就可以快乐游戏了;
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- C语言解方程的根和判断是否是闰年
- C语言的版本比较
- 【C】题目|【C语言】题集 of ⑥
- echart|echart 双轴图开发