初识C语言——扫雷小游戏

本文详细介绍了用C语言编写的扫雷游戏,包括game.h中的头文件定义、zhuti.c中的主函数和game.c中的自定义函数,如初始化、布置雷、排除雷等,展示了如何使用二维数组模拟棋盘和雷区。
摘要由CSDN通过智能技术生成

  这个小游戏由VS使用C语言编译,总计两个源文件(zhuti.c和game.c)和一个头文件(game.h)。

  陈列如下,而后附有编译说明,最后附有运行结果。

  制作不易,请给个点赞吧,球球你了!!!

  有问题可以发在评论区或者与作者私聊。

  game.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define Hang 9
#define Lie 9
#define Hangd Hang+2
#define Lied Lie+2
#define shuliang 10
//初始化数组
void chushihua(char zu[Hangd][Lied], int hangd, int lied, char chu);
//打印数组,即扫雷的区域
void dayin(char zu[Hangd][Lied], int hang, int lie);
//布置雷
void set(char zu[Hangd][Lied], int hang, int lie);
//排雷
void pai(char zu1[Hangd][Lied],char zu2[Hangd][Lied], int hang, int lie);

   如上,将使用库函数所需的头文件和定义的数值以及自定义函数的声明放在头文件(game.h)中,在源文件中直接应用game.h即可。  

zhuti.c

#include"game.h"
void shi()
{
	printf("*****************************\n");
	printf("********是否开始游戏********\n");
	printf("********1.开始游戏  ********\n");
	printf("********0.退出      *********\n");
	printf("*****************************\n");
	printf("请选择: ");
}
//构建游戏主体
void game()
{
	char buzhi[Hangd][Lied] = { 0 };//布置排雷区域
	char zhanshi[Hangd][Lied] = { 0 };//展示排雷区域
	//初始化雷区
	chushihua(buzhi, Hangd, Lied, '0');
	chushihua(zhanshi, Hangd, Lied, '*');
	//dayin(buzhi, Hang, Lie);
	//dayin(zhanshi, Hang, Lie);
	//布置雷
	set(buzhi, Hang, Lie);
	dayin(buzhi, Hang, Lie);
	//dayin(zhanshi, Hang, Lie);
	//排雷
	pai(buzhi,zhanshi, Hang, Lie);
}
int main()
{
	srand((unsigned int)time(NULL));
	int a = 0;
	do
	{
		shi();
		scanf_s("%d", &a);
		switch (a)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新弄输入\n");
			break;
		}
	} 
	while (a);
	return 0;
}

先确定函数主体,即由“int main()”开始,及以后部分。其上为两个自定义函数,其中"game()"中又包含大量自定义函数,都在game.c中。

而后大量使用自定义函数实现目的。

分析扫雷游戏,使用二维数组代替棋盘,需要两个二维数组,一个用于布置雷,另一个用于展示并排除雷。


如上,使用1来表示雷,0来表示没有雷(第一个数组)。在展示时不能透露信息,所以全部都是“*”。

game.c

#include"game.h"
void chushihua(char zu[Hangd][Lied], int hangd, int lied, char chu)
{
	int a, b;
	for (a = 0; a < hangd; a++)
	{
		for (b = 0; b < lied; b++)
		{
			zu[a][b] = chu;
		}
	}
}
void dayin(char zu[Hangd][Lied], int hang, int lie)
{
	int a, b;
	for (a = 0; a <= hang; a++)
	{
		printf("%d ", a);
	}
	printf("\n");
	for (a = 1; a <= hang; a++)
	{
		printf("%d ", a);
		for (b = 1; b <= lie; b++)
		{
			printf("%c ", zu[a][b]);
		}
		printf("\n");
	}
}
void set(char zu[Hangd][Lied], int hang, int lie)
{
	int x, y;
	int z = shuliang;
	while (z)
	{
		x = rand() % hang + 1;
		y = rand() % lie + 1;
		if (zu[x][y] == '0')
		{
			zu[x][y] = '1';
			z--;
		}
	}
}
int bian(char zu[Hangd][Lied], int x, int y)
{
	int e=0;
	e = zu[x - 1][y - 1] + zu[x - 1][y] + zu[x - 1][y + 1] + zu[x][y - 1] + zu[x][y + 1] + zu[x + 1][y - 1]  + zu[x + 1][y] + zu[x + 1][y + 1] - 8 * '0';
	return e;
}
void pai(char zu1[Hangd][Lied],char zu2[Hangd][Lied], int hang, int lie)
{	
	
	int x = 0;
	int y = 0;
	int z = 0;
	int h = Hang * Lie - shuliang;//即没有雷的区域个数
	while (h)
	{
		printf("请输入想排除的坐标:");
		scanf_s("%d %d", &x, &y);
		if (zu1[x][y] == '1')
		{
			printf("你被炸死了\n");
			break;
		}
		
		
		if(zu1[x][y]=='0')
		{
			z=bian(zu1,x,y);
			zu2[x][y] =z+'0';
			dayin(zu2, Hang, Lie);
			h--;
		}
	}
	printf("恭喜你,排除了所有的雷\n");
}

chushihua() : 先让数组全为“0”或“*”。

dayin() : 利用循环语句打印出数组(棋盘),包含行号及列号。效果如下:

             下为本人分支循环语句解析:​​​​​​CSDNicon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/135820530

set() : 布置雷,应用了分支循环语句。

pai() : 排除雷,需注意"bian()",为自定义用于展现排除区域周边的雷的个数的函数。

然后,雷的个数,区域大小是可以改变的。"game.h"中lshulian之后的数字影响雷的数量,lie和hang之后的数字影响区域大小。

最后,附上运行效果(为了方便,设置了80个雷):

  • 33
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

you-_ling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值