C语言第十课----------------扫雷----------数组的经典练手题

这篇具有很好参考价值的文章主要介绍了C语言第十课----------------扫雷----------数组的经典练手题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

作者前言

🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

   🎂      作者介绍:                              🎂🎂

       🎂 🎉🎉🎉🎉🎉🎉🎉              🎂

          🎂作者id:老秦包你会,         🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨         🎂🎂🎂🎂🎂🎂🎂🎂

                 🎂个人主页::小小页面🎂

                  🎂gitee页面:秦大大🎂

                   🎂🎂🎂🎂🎂🎂🎂🎂
        🎂  一个爱分享的小博主 欢迎小可爱们前来借鉴🎂

_______________________________________________________

______________________________________________________________________

目录

扫雷

        分析

        代码

——————————————————————————————————————

扫雷

C语言第十课----------------扫雷----------数组的经典练手题,开发语言,c语言

 如上图,玩扫雷的原理就是避开雷找出所有的雷就胜利,废话不多说,我们直接开始扫雷分析

分析

俗话说的好,玩游戏第一步进入游戏,我们就写出一个游戏菜单出来,让玩家选择

void meun()
{
	printf("*********        扫雷       ********\n");
	printf("************************************\n");
	printf("*********       0.exit      ********\n");
	printf("*********       1.paly      ********\n");
	printf("************************************\n");


}

下面我们要写一个框架,选择玩或者不玩,

int input;
	srand((unsigned)time(NULL));
	do
	{
		meun();
		printf("进入扫雷界面,请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			printf("开始游戏\n");
			game();
			break;
		default :
			printf("输入不符合规定,请重新输入\n");
			break;

		}

下面我们就要开始写扫雷的内容了,首先扫雷我们要给出扫雷的游戏画面,在这个过程中我们可以创建两个数组,一个用于计算,一个用于显示

C语言第十课----------------扫雷----------数组的经典练手题,开发语言,c语言

 左边是计算,右边是显示 然后我们就要设计一下输出的界面,要玩家有好的体验

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			
			mine[i][j] = str;
		}
	}


}
void Carving(char mine[ROWS][COLS], int row, int col)
{

	int i = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	printf("--------------------\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d|", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			
			printf("%c ", mine[i][j]);
		}
		printf("\n");
	}
}

然后我们就要布置雷了,雷的设计要随机可以使用rand(),记得设计出源点srand((unsigned)time(NULL))

代码如下:

void Production(char mine[ROWS][COLS], int row, int col)
{
	int count = Count;
	while (count)
	{
		int x = ((rand() % (row)) + 1);
		int y = ((rand() % (col)) + 1);
		
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

下面我们就要模拟玩家扫雷了,玩家扫雷要输入坐标, 然后判断是否踩到雷或者已经排查过了,如果没有就要统计周边雷的个数,然后反馈给显示数组,最后判断是否排除完全部雷了,

void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{
	int count = 0;
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请玩家输入坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (mine[x][y] == '0')
			{
				mine[x][y] = ' ';
				count++;
				//统计周边的雷数
				int sum = 0;
				int i = x - 1;
				for (i = x - 1; i <= x + 1; i++)
				{
					int j = y - 1;
					for (j = y - 1; j <= y + 1; j++)
					{
						if (i != x && j != y)
							sum = sum + (mine[i][j] - '0');
					}
				}
				show_mine[x][y] = '0' + sum;
				printf("扫雷情况:\n");
				Carving(show_mine, ROW, COL);
				printf("\n");
				if (count == (row * col) - Count)
				{
					printf("你胜利了\n");
					goto  aa;


				}
			}
			else if (mine[x][y] == '1')
			{
				printf("你被炸死了,游戏结束\n");
				break;
			}

		}
		else
		{
			printf("请重新输入,你输入的不符合规定\n");
		}
	}
aa:
	;

}

 下面是全部代码:

扫雷.c

#include"扫雷.h"
void meun()
{
	printf("*********        扫雷       ********\n");
	printf("************************************\n");
	printf("*********       0.exit      ********\n");
	printf("*********       1.paly      ********\n");
	printf("************************************\n");


}
int main()
{
	int input;
	srand((unsigned)time(NULL));
	do
	{
		meun();
		printf("进入扫雷界面,请选择>");
		scanf("%d", &input);
		switch (input)
		{
		case 0:
			printf("退出游戏\n");
			break;
		case 1:
			printf("开始游戏\n");
			game();
			break;
		default :
			printf("输入不符合规定,请重新输入\n");
			break;

		}


	} while (input);





	return 0;
}

扫雷函数.c

#include"扫雷.h"
void game()
{
	char mine[ROWS][COLS];
	char show_mine[ROWS][COLS];
	//数组初始化
	initialization(mine, ROWS, COLS, '0');
	initialization(show_mine, ROWS, COLS, '*');

	//布置雷
	Production(mine, ROW, COL);

	//雕刻扫雷棋盘
	Carving(mine, ROW, COL);
	printf("\n");
	Carving(show_mine, ROW, COL);
	
	//玩家扫雷
	paly_mine(mine, show_mine, ROW, COL);
	/*printf("%p", &mine);
	printf("%p", &show_mine);*/

}

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{
	int i = 0;
	for (i = 0; i < rows; i++)
	{
		int j = 0;
		for (j = 0; j < cols; j++)
		{
			
			mine[i][j] = str;
		}
	}


}

void Carving(char mine[ROWS][COLS], int row, int col)
{

	int i = 0;
	for (i = 0; i <= row; i++)
	{
		printf("%d ", i);
	}
	printf("\n");
	printf("--------------------\n");
	for (i = 1; i <= row; i++)
	{
		printf("%d|", i);
		int j = 0;
		for (j = 1; j <= col; j++)
		{
			
			printf("%c ", mine[i][j]);
		}
		printf("\n");
	}
}
//布置雷
void Production(char mine[ROWS][COLS], int row, int col)
{
	int count = Count;
	while (count)
	{
		int x = ((rand() % (row)) + 1);
		int y = ((rand() % (col)) + 1);
		
		if (mine[x][y] == '0')
		{
			mine[x][y] = '1';
			count--;
		}
	}
}

//玩家扫雷
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{
	int count = 0;
	int x = 0;
	int y = 0;
	while (1)
	{
		printf("请玩家输入坐标:>");
		scanf("%d %d", &x, &y);
		if (x >= 1 && x <= 9 && y >= 1 && y <= 9)
		{
			if (mine[x][y] == '0')
			{
				mine[x][y] = ' ';
				count++;
				//统计周边的雷数
				int sum = 0;
				int i = x - 1;
				for (i = x - 1; i <= x + 1; i++)
				{
					int j = y - 1;
					for (j = y - 1; j <= y + 1; j++)
					{
						if (i != x && j != y)
							sum = sum + (mine[i][j] - '0');
					}
				}
				show_mine[x][y] = '0' + sum;
				printf("扫雷情况:\n");
				Carving(show_mine, ROW, COL);
				printf("\n");
				if (count == (row * col) - Count)
				{
					printf("你胜利了\n");
					goto  aa;


				}
			}
			else if (mine[x][y] == '1')
			{
				printf("你被炸死了,游戏结束\n");
				break;
			}

		}
		else
		{
			printf("请重新输入,你输入的不符合规定\n");
		}
	}
aa:
	;

}

扫雷.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define Count 10
//
void game(void);
//初始化
void initialization(char mine[ROWS][COLS], int row, int col, char str);
//打印棋盘
void Carving(char mine[ROWS][COLS], int row, int col);
//布置雷
void Production(char mine[ROWS][COLS], int row, int col);
//玩家扫雷
vo

总结:

扫雷代码就在这里了,这个代码还可以进一步改进,但是由于时间原因,其他功能没写,有不懂的小可啊可以私聊我文章来源地址https://www.toymoban.com/news/detail-646646.html

到了这里,关于C语言第十课----------------扫雷----------数组的经典练手题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络安全入门学习第十课——DNS欺骗

    域名系统(英文:Domain Name System,缩写:DNS) 是互联网的一项服务。 作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53。 我们本地的计算机在接入网络的时候,都会自动分配一个DNS服务器的IP地址,这个DNS服务器叫做本地

    2024年02月06日
    浏览(48)
  • 网络安全进阶学习第十课——MySQL手工注入

    重点库: information_schema PHP的网站,常用数据库为MYSQL、PostgreSQL 判断数据库类型: MYSQL:3306 PostgreSQL:5432 MSSQL:1433 使用场景:数据库在页面中存在显示位。 UNION操作符 用于连接两个以上的SELECT语句的结果组合到一个结果集合中。前提是两个select必有 相同列 。 1)首先判断

    2024年02月10日
    浏览(45)
  • 【C语言】从零开始学数组,让你也能写出三子棋和扫雷

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 👉其他专栏:数据结构探索 💻代码仓库:江池俊的代码仓库 🎪 社区:GeekHub社区 (欢迎大家加入与我一起探讨学习经验) 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 一、一维数

    2024年02月14日
    浏览(40)
  • MySQL数据库第十课-------join连接的再续------强强连锁

     欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com __________________________________________________________ join连接  内连接 左连接 右连接 外连接 其他连接 ______________________________________________________________         最近学校课程很多,无法及时更新,还望各位小可爱多多包含,你的

    2024年02月16日
    浏览(38)
  • 孩子都能学会的FPGA:第十课——UART通信增加CRC校验

    (原创声明:该文是 作者的原创 ,面向对象是 FPGA入门者 ,后续会有进阶的高级教程。宗旨是 让每个想做FPGA的人轻松入门 , 作者不光让大家知其然,还要让大家知其所以然 !每个工程作者都搭建了全自动化的仿真环境,只需要双击 top_tb.bat 文件就可以完成整个的仿真(前

    2024年02月05日
    浏览(49)
  • C语言经典算法实例3:数组元素排序

    求数组的排序 问题的描述 如下几点所示 使用rand()库函数随机生成10个1-100之间的数字。 声明数组的大小为10。 随机生成的10个数字赋值给数组。 给数组内的元素由小到大排序。 本文C语言经典算法实例的编译环境,使用的是集成开发环境:Visual Studio 2019 Visual Studio 2019官网链

    2024年02月01日
    浏览(39)
  • (自己动手开发自己的语言练手级应用)JSON(JavaScript Object Notation) 产生式(BNF)

     写自己的开发语言时,很多人都会拿JSON当第一个练习对象 开源net json FJSON 解析工具 https://dbrwe.blog.csdn.net/article/details/107611540?spm=1001.2014.3001.5502 以上是JSON的简化产生式表示形式。其中, json 是最顶层的规则,可以是一个对象或一个数组。 object 表示一个对象,由一对大括号

    2024年02月10日
    浏览(50)
  • 入门C语言第三话:数组之实战篇——扫雷(进阶版——图形化界面,递归展开,播放音乐与音效,标记取消雷,记录雷的个数,鼠标点击,文末附有完整代码)

     不为模糊不清的未来过分担忧,只为清清楚楚的现在奋发图强。  如果思路不是特别清晰的兄弟,建议多看一下基础版扫雷:数组之实战篇——带你从0到1实现扫雷(简易版)  如果EasyX图形库不是特别明白:可以看一下这篇文章:入门EasyX图形库(带你进入不一样的程序

    2024年02月09日
    浏览(44)
  • 值得苦练的100道Python经典练手题,(附详细答案)

    嗨喽大家好卷子又来了,100道Python经典练手题奉上 花了一周的时间,整理了100道Python的练习题,如果你是一位初学者,那么这一份练习题将会给你带来极大的帮助,如果你能够完全独立的完成这份练习题,你已经入门的Python了,练习题涵盖Python基础的大部分内容: Python100经

    2024年01月25日
    浏览(47)
  • 【小黑嵌入式系统第十课】μC/OS-III概况——实时操作系统的特点、基本概念(内核&任务&中断)、与硬件的关系&实现

    上一课: 【小黑嵌入式系统第九课】PSoC 5LP第一个实验——LED、字符型LCD显示实验 下一课: 【小黑嵌入式系统第十一课】μC/OS-III程序设计基础(一)——任务设计、任务管理(创建基本状态内部任务)、任务调度、系统函数 一. 凡从事嵌入式系统开发工作的人,必须对嵌入

    2024年02月05日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包