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;
}

那么最后依旧附上一张自认为的美照
在这里插入图片描述
我们扫雷见咯~~~

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值