首页 > 其他分享 >C语言:控制台扫雷游戏的实现(递归实现雷的排查)

C语言:控制台扫雷游戏的实现(递归实现雷的排查)

时间:2024-12-14 17:58:16浏览次数:6  
标签:递归 int 代码 C语言 排查 game && input 控制台

废话少说,直接上主思路代码

一,主思路代码

​
int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请输入选择:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break; 
		case 0:
			break;
		}
	} while (input);
		
	return 0;
}

​

二,其中game()主思路

void game()
{
	//初始化棋盘
	initboard();
	
	//布雷
	srand((unsigned int)time(NULL));
	setmine();

	//打印棋盘
	print_playerboard();
	//print_mineboard();
	
	//排查地雷
	while (stepcount)
	{
		int x, y;
		printf("请输入您要排查的坐标(行 列):\n");
		scanf("%d%d",&x,&y);

		if (x > 0 && x <= 9 && y > 0 && y <= 9)
		{
			if (mineboard[x][y] != '1')
			{
				//统计周围地雷数
				//playerboard[x - 1][y - 1] = count(x, y);
				
				//显示邻近无雷坐标格
				sign(x,y);
				
				//清理屏幕
				clearscreen();

				//打印棋盘
				print_playerboard();
				stepcount--;
			}
			else
			{
				printf("你被炸死了!\n");
				return;
			}
		}
	}
	printf("胜利!!!\n");
}

 三,在其中函数的实现中,本帅b认为较出彩的代码(雷排查和胜利)

附近无雷格的显示函数sign()  以及  以步数stepcount为依据的胜利的实现

​
void sign(int x,int y)
{
	if (x > 0 && x <= 9 && y > 0 && y <= 9)//局限显示范围,设置递归结束点
	{
		if (playerboard[x - 1][y - 1] == '*')//确保为未探索点
		{
			char minearound = count(x, y);
			if (minearound == '0')
			{
				playerboard[x - 1][y - 1] = '0';//显示
				stepcount--;
				sign(x - 1, y);
				sign(x + 1, y);
				sign(x, y - 1);
				sign(x, y + 1);
			}
			else
			{
				playerboard[x - 1][y - 1] = minearound;//显示
				stepcount--;
			}
		}
	}
}

​

有疑惑或者建议或者想看完整代码评论

标签:递归,int,代码,C语言,排查,game,&&,input,控制台
From: https://blog.csdn.net/2402_86078781/article/details/144460403

相关文章

  • c语言实现交换法排序
    文章目录介绍思路代码实现结果介绍交换法排序是将每一位数与其后的所有数一一比较,如果发现符合条件的数据则交换数据。思路具体实现如表格,从表格中可以发现,在第一轮交换排序过程中,先将10和7比较,进行调换(按从小到大排);然后进行7和16的比较,这次则保持;然后进行7和5的比......
  • 星号游走程序(流星雨):一个多彩的控制台动画
    引言在这个项目中,我将介绍一个名为“星号游走程序”的控制台应用程序。该程序通过控制台输出渐变色的星号,并支持多种游走模式和用户交互。本文将详细介绍程序的功能、实现方式以及如何使用它。功能概述1.随机游走模式在随机游走模式下,星号会在控制台内随机移动,形成一种动......
  • C语言(动态内存分配)
    动态内存分配我们要想实现动态内存分配,就需要学习标准C提供的函数库(API):函数所属的库文件函数的原型-函数的声明函数名形参返回值类型函数功能注意:内存分配函数在申请内存时,建议用多少申请多少,可以有少量的预留量;但不能越界访问(虽然编译和运行不报错,但是数据不安全(野......
  • C语言(野指针及内存操作)
    野指针、空指针、空悬指针野指针定义:指向一块未知区域(已经销毁或者访问受限的内存区域外的已存在或不存在的内存区域)的指针,被称作野指针。野指针是危险的。危害:①引用野指针,相当于访问了非法的内存,常常会导致段错误(segmentationfault),也有可能编译运行不报错。②引......
  • C# 面试常见递归算法
    前言今天我们主要总结一下C#面试中常见递归算法。C#递归算法计算阶乘的方法一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。原理:亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义......
  • 举例说明你对尾递归的理解,它有什么应用场景?
    尾递归是递归函数的一种特殊形式,它指的是在函数的最后一个操作是调用自身,即递归调用的结果直接作为函数的返回值,且在递归调用之后没有其他操作需要执行。以下是对尾递归的理解及其应用场景的详细说明:一、尾递归的理解定义:尾递归是指递归调用出现在函数的最后一行,或者是出现在......
  • 在21世纪的我用C语言探寻世界本质——动态内存管理及相关笔试题
    人无完人,持之以恒,方能见真我!!!共同进步!!文章目录一、为什么有动态内存分配二、malloc和free1.malloc函数的使用2.free函数的使用三、calloc和realloc1.calloc函数的使用2.realloc函数的使用四、常见动态内存分配的错误五、动态内存经典笔试题六、总结C/C++中程序内存区......
  • 02-51单片机的C语言基础与最小系统
    C语言基础一个简单的单片机C程序要有什么#include<reg51.h>voidmain(){ while(1) { }}C语言中常用语句略,if,while,do…while,for,switch…case函数略C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr变量名=地址值;*特殊功能寄存器在reg51.H这个头文件里......
  • 7、C语言-标识符、键盘录入scanf
    变量名命名规则由数字、字母、下划线_组成不能以数字开头不能是关键字(如if等)严格区分大小写建议变量名尽量都小写用英文单词,做到见名知意代码文件名尽量都小写键盘录入scanfscanf,是scannerformat的缩写、是C语言提供的一个函数作用:获取用户在键盘上......
  • 函数(C语言)
    前后两个void最好都写上库函数举例:doublesqrt(doublex);//sqrt是函数名//x是函数的参数,表示调用sqrt函数需要传递一个double类型的值。//最前面的double是返回值类型,表示函数的计算结果是double类型的值。a,b未交换原因:实参传递给形参,这时候形参是实参的一份临......