c语言写扫雷新手详解

本文详细介绍了如何使用C语言编写扫雷游戏,从分支语句、循环语句和二维数组等基础知识入手,逐步构建游戏框架,包括创建菜单、初始化棋盘、放置雷、扫雷逻辑等关键步骤,最后鼓励读者进行优化和扩展。
摘要由CSDN通过智能技术生成

c语言写扫雷新手详解

一、用到的知识点

1、分支语句

其中主要应用了if else语句

2、循环语句

循环需要do while 语句和for()语句还有while语句

3、二维数组

二维数组在定义的时候,行可以为不写为空,但是列必须要写,例如arr[][5]={0}

4、最好分块,使代码的功能更加独立,思维逻辑更加清楚,此程序我写了:test.c用来存放我的主函数,game.h用来定义和声明函数,还有放置头文件,然后定义了game.c来实现函数

二、思绪和代码

1、想要做出这个游戏,最起码有一个菜单让人选择是否开始游戏,因此我们需要先写出一个菜单程序,最简单的菜单数据如下:

//头文件放入game.h里面
#include<stdio.h>
//主体部分放入test.c
void menu()
{
   
	printf("*********************************\n");
	printf("*******     1.  play     ********\n");
	printf("*******     0.  exit     ********\n");
	printf("*********************************\n");
}

2、当我们有菜单了,我们现在就可以开始选择是否进行游戏了,也就可以开始书写我们的主函数了,写的时候需要考虑到玩家可能想玩不止一次,因此我们需要用到循环,因为最起码要玩一次,所以这里建议使用do while语句,并且要考虑到玩家可能选择错误,没有选择到play和exit,这里建议将switch语句嵌套进do while语句里面,下面实现代码:

//放入test.c里面
int main()
{
   
	srand((unsigned int)time(NULL));
	int input = 0;
	do
	{
   
		menu();
		printf("请做出你的选择:");
		scanf("%d", &input);
		switch (input)
		{
   
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("输入错误,请重新输入!\n");
			break;
		}
	} while (input);
	return 0;
}

3、当我们的菜单框架做出来以后,现在开始填充游戏内容,用函数game(),这里面写选择进入游戏后的操作,运用函数进行分块,可以使你的代码更有逻辑,建议运用,下面将详细解说如何思考和书写这个game()函数:

//放入test.c里面
void game()
{
   
//这里进行函数的填充
}

(1)我们想要实现一个比较简单的9*9的扫雷,最起码我们需要棋盘,可以进行放雷和扫雷,因为需要两个功能,这里我们尽量让他们的功能独立起来,因此定义两个二维数组,并且我们需要考虑到,如果扫雷的时候,我们需要排查最边上的格子,如果直接进行排查,将会发生越界,因为你只定义了9*9,其实排查边上的格子的时候你已经扫描到了11*11大小的格子,因此定义的时候,我们最好定义一个11*11的棋盘,但是我们只打印9*9的出来,这样就可以防止他越界,示例代码如下:

//这样将其全部定义出来,如果以后想要修改大小的话,可以直接在此处修改
//放入game.h里面
#define ROW 11
#define COL 11
#define ROWS ROW-2
#define COLS COL-2
//填充game()函数
放入test.c里面
void game()
{
   
	char mine[ROW][COL] = {
    0 };//定义放置雷的二维数组
	char show[ROW][COL] = {
    0 };//定义进行扫雷的二维数组
}

(2)现在两个二维数组已经构造好了,我们需要对其进行初始化,使得我们可以更好地打印扫雷的棋盘,这里在初始化放雷棋盘的时候,将其初始化为字符’0’,这里需要注意,此处是个伏笔,为了方便后面的排雷程序,初始化代码如下:

//继续对game()函数进行填充
//放入test.c里面
void game()
{
   
	char mine[ROW][COL] = {
    0 };//定义放置雷的二维数组
	char show[ROW][COL] = {
    0 };//定义进行扫雷的二维数组
	Init(mine, ROW, COL, '0');//初始化雷数组,令其全部为字符‘0’,令其为‘0’,方便一会统计雷数
	Init(show, ROW, COL, '*');//初始化扫雷数组,令其全部为字符‘*’
}
//放入game.h里面
void Init(char arr[ROW][COL], int row, int col, char set);
//放入game.c里面去实现
//对雷数组还有扫雷数组进行初始化
void Init(char arr[ROW][COL],int row,int col,char set)
{
   
	int i = 0;
	int j = 0;
	for (i = 0; i < row; i++)
	{
   
		for (j = 0; j < col; j++)
		{
   
			arr[i][j] = set;
		}
	}
}

(3)现在我们需要将我们设计好的棋盘打印出来,注意,我们设计了11*11的,但是我们只打印9*9的,在打印的时候,我们还可以顺便检查一下,我们的放雷数组是否初始化成功,代码如下:

//放入test.c里面
void game()
{
   
	char mine[ROW][COL] = {
    0 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值