C 游戏 - 走进迷宫
几周不见,甚是想念
今天我们将学习一个小游戏-走迷宫,你可以通过键盘上的w s a d四个按键来控制小球上下左右移动,从而走出迷宫.
1.自定义迷宫
首先我们总得来自定义一个迷宫吧,先来搞个简单的迷宫
char a[50][50] = { "######",
"#O # ",
"# ## #",
"# # #",
"## #",
"######" };
大写字母O表示小球,迷宫定义好后,我们就要想办法输出到屏幕上,那么是不是想到用printf呢?但是在这,我们用另一个函数puts,那么就是这样
for (i = 0; i <= 5; i++)
puts(a[i]);
puts(a[i])表示输出每一行的字符串。我们是不是得把小球的初始位置和出口的位置存下来啊,不妨就用x,y,p,q存下来
int x=1,y=1,p=1,q=5;
那现在我们是不是就要想办法来控制小球呢,我们来看下面
2.控制小球移动
那第一步是不是向下移动呢,我们要按s键,也就是我们输入了s这个字符,那么就要读取这个字符s,读取字符有四种方法:
scanf("%c",&ch);
ch=getchar();
ch=getche();
ch=getch();
scanf我们很熟悉,那么其他3个有什么区别呢,我们该使用哪一个呢,区别如下:
getchar()读取一个字符,输入后等待用户按回车键结束,显示输入的字符;
getche()读取一个字符,输入后立即获取字符,显示输入的字符;
getch()读取一个字符,输入后立即获取字符,不显示输入的字符。
这样说相信大家能懂,那么我们在这里是不是选择最后一个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");
for (i = 0; i <= 5; i++)
puts(a[i]);
使用清屏这个命令记得加上对应的头文件<windows.h>
小结一下:
#include <stdio.h>
#include<windows.h>
int main()
{
char a[50][50] = { "######",
"#O # ",
"# ## #",
"# # #",
"## #",
"######" };
int i, x = 1, y = 1, p = 1, q = 5;
char ch;
for (i = 0; i <= 5; i++)
puts(a[i]);
ch = getch();
if (ch == 's')
{
if (a[x + 1][y] != '#')
{
a[x][y] = ' ';
x++;
a[x][y] = 'O';
}
}
system("cls");
for (i = 0; i <= 5; i++)
puts(a[i]);
Sleep(3000);//暂停3000ms
return 0;
}
那我们怎么来实现连续移动呢,很简单,while循环就可以解决了,那么应是这样:
#include <stdio.h>
#include<windows.h>
int main()
{
char a[50][50] = { "######",
"#O # ",
"# ## #",
"# # #",
"## #",
"######" };
int i, x = 1, y = 1, p = 1, q = 5;
char ch;
while (x != p1 || y != q1) {
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");
for (i = 0; i <= 5; i++)
puts(a[i]);
}
Sleep(3000);//暂停3000ms
return 0;
}
这样一简单的走迷宫小游戏就完成了,还有许多可以添加拓展的地方,大家可以自己点缀,那附上我添加了一点的:(大家将就看)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<windows.h>
int main()
{
char a[50][50] = { "######",
"#O # ",
"# ## #",
"# # #",
"## #",
"######" };
char b[50][50] = { "##############################",
"#O # ## # ### ####",
"# ###### # # # # # ### ####",
"# # ## # # #### # ### ##",
"# # ## ### # # ## ####",
"##### # # ##### ## ####",
"# # ##### # # # # # #",
"# # # ## # #### ## # # ####",
"# # # ## ## # # ####",
"# # # ####### ## ###### # ##",
"# # ## # ## ###### ### #",
"# ###### # ##### # # #",
"# # # ##### ### # ",
"# ######## ##### ### ### # #",
"# # ## ##### ### ###",
"##### # ## # ######## # #",
"# # ## ## ### # #",
"# # ### ###### ####### #",
"# # ### ## # #",
"##############################" };
int i, x = 1, y = 1, p1 = 1, q1 = 5, p2 = 12, q2 = 29;
char ch;
int p = 0;
printf("-----欢迎来到走迷宫-----\n");
printf("----- 其它.退出游戏 -----\n");
printf("----- 1. 第一关 ------\n");
printf("----- 2. 第二关 ------\n请选择:->");
scanf("%d", &p);
switch (p)
{
default:
return 0;
case 1:
while (x != p1 || y != q1) {
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");
for (i = 0; i <= 5; i++)
puts(a[i]);
}
break;
case 2:
while (x != p2 || y != q2) {
ch = getch(b);
if (ch == 's')
{
if (b[x + 1][y] != '#')
{
b[x][y] = ' ';
x++;
b[x][y] = 'O';
}
}
if (ch == 'w')
{
if (b[x - 1][y] != '#')
{
b[x][y] = ' ';
x--;
b[x][y] = 'O';
}
}
if (ch == 'a')
{
if (b[x][y - 1] != '#')
{
b[x][y] = ' ';
y--;
b[x][y] = 'O';
}
}
if (ch == 'd')
{
if (b[x][y + 1] != '#')
{
b[x][y] = ' ';
y++;
b[x][y] = 'O';
}
}
system("cls");
for (i = 0; i <= 19; i++)
puts(b[i]);
}
break;
}
printf("恭喜你,游戏通关!");
Sleep(3000);
return 0;
}
那么最后依旧附上一张自认为的美照
我们扫雷见咯~~~
上一篇: 迷宫问题 - 球寻找出口(经典递归问题)
下一篇: 迷宫回溯