大家好,又见面了,我是你们的朋友全栈君。
第一步
要制作迷宫小游戏,我们要利用二维数组搭建场景,制作一个简易的迷宫
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>//小游戏所需的所有头文件
int main()
{
char a[100][100] = {"######",
"#o # ",
"# ## #",
"# # #",
"## #",
"######" };//迷宫出口为a[1][5]
//我们需要输出这个迷宫。
for (int 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:
我们可以将迷宫改动的复杂一点,来提高游戏体验感;由你们自己改造迷宫
我们也可以对走的步数进行计数,以此来比较谁到达终点的效率高
好了,学会了就可以快乐游戏了;
升级版来了(增加了步数统计和登陆界面,游戏菜单等)
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
int main()
{
printf(" 小球球走迷宫小游戏 \n\n");
printf("______________________________________________________________________________________________________________________\n");
printf(" 开始游戏 1\n\n");
printf(" 游戏音量 2\n\n");
printf(" 游戏设置 3\n\n");
printf(" 关闭游戏 4\n\n");
int k;
scanf_s("%d",&k);
system("cls");
if(k==1)
{
printf("使用adsw控制上下左右移动\n\n\n");
char a[100][100] = { "######",
"#o # ",
"# ## #",
"# # #",
"## #",
"######" };
int i, x = 1, y = 1;//p,q存储迷宫出口的位置
for (i = 0; i < 6; i++)
puts(a[i]);
char ch;
int count=0;
while (x != 1 || y != 5)
{
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==5)
printf("成功过关\n\n\n");
for (i = 0; i < 6; i++)
puts(a[i]);
}
printf("你一共走了%d步\n\n",count);
}
else if(k==4)
printf("游戏结束\n\n");
else if(k==2)
printf("打开qq音乐,放战歌,乌拉...\n\n\n");
else if(k==3)
printf("请联系作者,并告诉他你想要的游戏设置,访问CSDN——2654501228\n\n\n");
system("pause");
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144713.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...