扫雷 完整版代码 有四个模式可供选择 完全实现扫雷小游戏 (进阶版)

主函数(源文件):

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

int main()
{
	srand((unsigned int)time(NULL));
	int a = 0;
	int b = 1;//重新开始游戏标志位
	int biaoleishu = 0; //表示标的雷数
	int biaoleishu1 = 0;//表示有效的标雷数(标记点确实有雷)
	
 do{
		do
		{
			menu();
			scanf("%d", &a);
			if ((a != 1) && (a != 2))
				printf("\n输入错误,请重新输入\n");
			else
				break;

		} while (1);
		
		
					switch (a)
					{
								case 1:
								{
									int nandu;
									while(1)
									{
										printf("*************************************\n");
										printf("*************************************\n");
										printf("****** 1 初级模式   2 中级模式 ******\n");
										printf("*************************************\n");
										printf("****** 3 高级模式   4 满屏模式 ******\n");
										printf("*************************************\n");
										printf("*************************************\n");
										printf("请选择需要的难度—>:");
										scanf("%d", &nandu);
										if ((nandu == 1) || (nandu == 2) || (nandu == 3) || (nandu == 4))
											break;
										else
											printf("\n\n输入有误请重新选择:\n");
									 }
									
													

													
														switch(nandu)
														{

																case 1:
																{
																	char youxipan[X11][Y11];
																	int leipan[X11][Y11];
																	chushihua(leipan, youxipan, X11, Y11, X1, Y1, LEI1);
																	dayin1(youxipan, X1, Y1);
																	/*dayin2(leipan, X1, Y1);*/

																	int mark = 0;//标记游戏状态
																	do
																	{
																		mark = player(leipan, youxipan, X11, Y11, X1, Y1, LEI1, &biaoleishu, &biaoleishu1);
																		printf("\n");
																		dayin1(youxipan, X1, Y1);
																		printf("\n\n总雷数:%d\n", LEI1);
																		printf("已标记雷的个数为:%d\n\n", biaoleishu);

																	} while (mark);
																	dayin2(leipan, X1, Y1);
																	printf("\n游戏结束,欢迎下次试玩\n\n\n");
																	biaoleishu = 0; biaoleishu1 = 0;					b = 1; break;

																}


																	case 2:
																	{
																		char youxipan[X22][Y22];
																		int leipan[X22][Y22];
																		chushihua2(leipan, youxipan, X22, Y22, X2, Y2, LEI2);
																		dayin12(youxipan, X2, Y2);
																		dayin22(leipan, X2, Y2);

																		int mark = 0;//标记游戏状态
																		do
																		{
																			mark = player2(leipan, youxipan, X22, Y22, X2, Y2, LEI2, &biaoleishu, &biaoleishu1);
																			printf("\n");
																			dayin12(youxipan, X2, Y2);
																			printf("\n\n总雷数:%d\n", LEI2);
																			printf("已标记雷的个数为:%d\n\n", biaoleishu);

																		} while (mark);
																		dayin22(leipan, X2, Y2);
																		printf("\n游戏结束,欢迎下次试玩\n\n\n");
																		b = 1; 
																		biaoleishu = 0; biaoleishu1 = 0;
																		break;
																	
																	}


																	case 3:;
																	{	
																		
																	char youxipan[X33][Y33];
																	int leipan[X33][Y33];
																	chushihua3(leipan, youxipan, X33, Y33, X3, Y3, LEI3);
																	dayin13(youxipan, X3, Y3);
																	dayin23(leipan, X3, Y3);

																	int mark = 0;//标记游戏状态
																	do
																	{
																		mark = player3(leipan, youxipan, X33, Y33, X3, Y3, LEI3, &biaoleishu, &biaoleishu1);
																		printf("\n");
																		dayin13(youxipan, X3, Y3);
																		printf("\n\n总雷数:%d\n", LEI3);
																		printf("已标记雷的个数为:%d\n\n", biaoleishu);

																	} while (mark);
																	dayin23(leipan, X3, Y3);
																	printf("\n游戏结束,欢迎下次试玩\n\n\n");
																	b = 1;
																	biaoleishu = 0; biaoleishu1 = 0;
																	break;

																	}




																	case 4:;

																	{
																		char youxipan[X44][Y44];
																		int leipan[X44][Y44];
																		chushihua4(leipan, youxipan, X44, Y44, X4, Y4, LEI4);
																		dayin14(youxipan, X4, Y4);
																		dayin24(leipan, X4, Y4);

																		int mark = 0;//标记游戏状态
																		do
																		{
																			mark = player4(leipan, youxipan, X44, Y44, X4, Y4, LEI4, &biaoleishu, &biaoleishu1);
																			printf("\n");
																			dayin14(youxipan, X4, Y4);
																			printf("\n\n总雷数:%d\n", LEI4);
																			printf("已标记雷的个数为:%d\n\n", biaoleishu);

																		} while (mark);
																		dayin24(leipan, X4, Y4);
																		printf("\n游戏结束,欢迎下次试玩\n\n\n");
																		b = 1;
																		biaoleishu = 0; biaoleishu1 = 0;
																		break;
																	}


														}


								
									
									
									
														break;
								}

								
								
								
								
								
								
								
								
								
								
								case 2:printf("\n游戏已结束,期待你的下一次加入\n"); b = 0;
					}




 } while (b);
	
	





	return 0;
}

申明文件(头文件):

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


#define X1 9
#define Y1 9
#define X11 11
#define Y11 11
#define LEI1 10//初级模式 9*9格  10个雷


#define X2 16
#define Y2 16
#define X22 18
#define Y22 18
#define LEI2 40//中级模式 16*16格  40个雷


#define X3 30
#define Y3 16
#define X33 32
#define Y33 18
#define LEI3 99//高级模式 30*16格  99个雷



#define X4 54
#define Y4 29
#define X44 56
#define Y44 31
#define LEI4 322//满屏模式 54*29格  322个雷



void menu(); // 游戏开头



void chushihua(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei);//埋雷初始化  (雷盘 1雷 0安全)  (游戏盘未操作格 *)


void dayin1(char youxipan[X11][Y11], int x1, int y1);//打印游戏盘
void dayin2(int leipan[X11][Y11], int x1, int y1);//打印雷盘



int player(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);

void saolei(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);//扫雷显示雷数

void digui1(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui2(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui3(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui4(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);//递归会栈溢出 手搓5个函数 代替递归四次  基本可以完全实现递归的效果



//中级模式
void chushihua2(int leipan[X22][Y22], char youxipan[X22][Y22], int x22, int y22, int x2, int y2, int lei2);
void dayin12(char youxipan[X22][Y22], int x1, int y1);//打印游戏盘
void dayin22(int leipan[X22][Y22], int x1, int y1);//打印雷盘
int player2(int leipan[X22][Y22], char youxipan[X22][Y22], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei2(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui12(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui22(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui32(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui42(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);



//高级模式
void chushihua3(int leipan[X33][Y33], char youxipan[X33][Y33], int x33, int y33, int x3, int y3, int lei3);
void dayin13(char youxipan[X33][Y33], int x1, int y1);//打印游戏盘
void dayin23(int leipan[X33][Y33], int x1, int y1);//打印雷盘
int player3(int leipan[X33][Y33], char youxipan[X33][Y33], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei3(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui13(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui23(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui33(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui43(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);




//满屏模式
void chushihua4(int leipan[X44][Y44], char youxipan[X44][Y44], int x44, int y44, int x4, int y4, int lei4);
void dayin14(char youxipan[X44][Y44], int x1, int y1);//打印游戏盘
void dayin24(int leipan[X44][Y44], int x1, int y1);//打印雷盘
int player4(int leipan[X44][Y44], char youxipan[X44][Y44], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei4(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui14(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui24(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui34(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui44(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);


初级模式 函数库(源文件):

#define _CRT_SECURE_NO_WARNINGS
#include"game.h"

void menu()
{
	printf("*********   佰木learning   **********\n");
	printf("*************************************\n");
	printf("*************************************\n");
	printf("*************************************\n");
	printf("*********    1  开始游戏    *********\n");
	printf("*********    2  退出游戏    *********\n");
	printf("*************************************\n");
	printf("*************************************\n");
	printf("*************************************\n");
	printf("请输入—>: ");

}

void chushihua(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei)
{
	int i = 0, j = 0;
		
	for(i = 0; i <=(x11-1);++i)
	{
		for (j = 0; j<= (y11 - 1); ++j)
		{
			leipan[i][j] = 0;
		}
	}//雷盘初始化  0表示安全 1表示有雷
	
	for (i = 0; i <= (x11 - 1); ++i)
	{
		for (j = 0; j <= (y11 - 1); ++j)
		{
			youxipan[i][j] ='*';
		}
	}//游戏盘未被扫的区域为O

	int a = 0;//计雷数
	while (a < lei)
	{

	int x = (rand()% x1 + 1);
	int y = (rand()% x1 + 1);
	
	
		if (leipan[x][y] == 0)
		{
			a++;
			leipan[x][y] = 1;
		}
	}
}



void dayin1(char youxipan[X11][Y11], int x1, int y1)//打印游戏盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf(" | ");
		else
			printf("%d   ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("--");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%d| ", i );
		for (j = 1; j <=y1; ++j)
		{

			printf("%c | ", youxipan[i][j]);
		}
		
		printf("\n");
	}
	printf("\n");
}


void dayin2(int leipan[X11][Y11], int x1, int y1)//打印雷盘
{
	int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
	if (j == 0)
		printf(" | ");
	else
		printf("%d   ", j);
}
printf("\n");//行号

for (j = 0; j <= (y1); ++j)
{
	if (j < y1)
		printf("----");
	else
		printf("--");
}

printf("\n");//下划线


for (i = 1; i <= x1; ++i)
{
	printf("%d| ", i);
	for (j = 1; j <= y1; ++j)
	{

		printf("%d | ",leipan[i][j]);
	}

	printf("\n");
}
printf("\n");
}



int player(int leipan[X11][Y11],char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei,int *biaoleishu,int *biaoleishu1)//出游戏结果了返回0 未出返回1
{
	int a = 0;	
	int n = 0;
	do {
				while (1)
				{
					printf("\n*************************************\n");
					printf("** 1打开该位置  2标记问号  3标记雷 **\n");
					printf("*************************************\n");
					printf("** 4取消标记的雷   5取消标记的问号 **\n");
					printf("*************************************\n");
					printf("请选择你需要进行的操作->:");
					scanf("%d", &a);
					if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
						break;
					else
						printf("\n输入有误,请重新选择:\n");
				}
			
				printf("\n返回上一步 请输入0  继续则输入1 ->:");
				scanf("%d", &n);
	} while (!n);
	int x = 0, y = 0;
	
   while (1)
	{
		printf("\n请输入你需要操作的位置->:");
		scanf("%d %d", &x, &y);
		if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
		{
			printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
		}
		else
			printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
	}

	switch (a)
	{
					case 1: 
					{   
						if (youxipan[x][y] =='*')
						{
							if (leipan[x][y] == 1)
							{
								printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
                            }
							else 
							{
							saolei(leipan,youxipan,x,y,x1,y1);//游戏盘显示雷数 
							break;
							}
						}
		
						else 
						{
							printf("\n操作失败,该位置已被操作\n"); break;
						
						}


					}



					case 2:
					{
						if (youxipan[x][y] == '*')
						{
							youxipan[x][y] = '?'; break;
						}
						else
						{
							printf("\n操作失败,该位置已被操作\n"); break;
						}
					}
	


					case 3: 
					{
						if (youxipan[x][y]=='*')
						{
							if ((*biaoleishu) < lei)
							{
								youxipan[x][y] = 'X';
								*biaoleishu = ((*biaoleishu) + 1);

								if (leipan[x][y] == 1)
									*biaoleishu1 = (*biaoleishu1) + 1;
								if ((*biaoleishu1) == lei)
								{
									printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
									return 0;
								}
								break;
							}
							else
							{
								printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
								break;
							}
						}
						else
						{
							printf("\n操作失败,该位置已被操作\n"); break;
						}

					}

					case 4: 
					{
						if (youxipan[x][y] == 'X')
						{
							youxipan[x][y] = '*';
							break;
						}
						else
						{
							printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
						}

					}

					case 5:
					{
						if (youxipan[x][y] == '?')
						{
							youxipan[x][y] = '*';
							break;
						}
						else
						{
							printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
						}
					}





	}


	return 1;
}










void saolei(int leipan[X11][Y11], char youxipan[X11][Y11],int x,int y,int x1, int y1)
{
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))      //递归不动  栈溢出
			{
				digui1(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
				digui1(leipan, youxipan, x - 1, y - 1, x1, y1);
				digui1(leipan, youxipan, x - 1, y + 1, x1, y1);
				digui1(leipan, youxipan, x, y - 1, x1, y1);
				digui1(leipan, youxipan, x, y + 1, x1, y1);
				digui1(leipan, youxipan, x + 1, y - 1, x1, y1);
				digui1(leipan, youxipan, x + 1, y, x1, y1);
				digui1(leipan, youxipan, x + 1, y + 1, x1, y1);
           }
			
		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码
	}
}









void digui1(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))     
	{
		m= leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui2(leipan, youxipan, x - 1, y, x1, y1);
			digui2(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui2(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui2(leipan, youxipan, x, y - 1, x1, y1);
			digui2(leipan, youxipan, x, y + 1, x1, y1);
			digui2(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui2(leipan, youxipan, x + 1, y, x1, y1);
			digui2(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码
	
	}

}

void digui2(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))     
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui3(leipan, youxipan, x - 1, y, x1, y1);
			digui3(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui3(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui3(leipan, youxipan, x, y - 1, x1, y1);
			digui3(leipan, youxipan, x, y + 1, x1, y1);
			digui3(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui3(leipan, youxipan, x + 1, y, x1, y1);
			digui3(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}




void digui3(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))     
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui4(leipan, youxipan, x - 1, y, x1, y1);
			digui4(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui4(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui4(leipan, youxipan, x, y - 1, x1, y1);
			digui4(leipan, youxipan, x, y + 1, x1, y1);
			digui4(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui4(leipan, youxipan, x + 1, y, x1, y1);
			digui4(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}



	void digui4(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
	
	{

		int m = 0;
		if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
		{
			m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
			if (m == 0)
			{
				youxipan[x][y] = ' ';

			}
			else
				youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

		}
	}

中级模式函数库(源文件):

#define _CRT_SECURE_NO_WARNINGS 
#include"game.h"


void chushihua2(int leipan[X22][Y22], char youxipan[X22][Y22], int x22, int y22, int x2, int y2, int lei2)
{
	int i = 0, j = 0;

	for (i = 0; i <= (x22 - 1); ++i)
	{
		for (j = 0; j <= (y22 - 1); ++j)
		{
			leipan[i][j] = 0;
		}
	}//雷盘初始化  0表示安全 1表示有雷

	for (i = 0; i <= (x22 - 1); ++i)
	{
		for (j = 0; j <= (y22 - 1); ++j)
		{
			youxipan[i][j] = '*';
		}
	}//游戏盘未被扫的区域为O

	int a = 0;//计雷数
	while (a < lei2)
	{

		int x = (rand() % x2 + 1);
		int y = (rand() % y2 + 1);


		if (leipan[x][y] == 0)
		{
			a++;
			leipan[x][y] = 1;
		}
	}
}


void dayin12(char youxipan[X22][Y22], int x1, int y1)//打印游戏盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if (j == 9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%c | ", youxipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}



void dayin22(int leipan[X22][Y22], int x1, int y1)//打印雷盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if(j==9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%d | ", leipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}





int player2(int leipan[X22][Y22], char youxipan[X22][Y22], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
	int a = 0;
	int n = 0;
	do {
		while (1)
		{
			printf("\n*************************************\n");
			printf("** 1打开该位置  2标记问号  3标记雷 **\n");
			printf("*************************************\n");
			printf("** 4取消标记的雷   5取消标记的问号 **\n");
			printf("*************************************\n");
			printf("请选择你需要进行的操作->:");
			scanf("%d", &a);
			if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
				break;
			else
				printf("\n输入有误,请重新选择:\n");
		}

		printf("\n返回上一步 请输入0  继续则输入1 ->:");
		scanf("%d", &n);
	} while (!n);
	int x = 0, y = 0;

	while (1)
	{
		dayin12(youxipan, X2, Y2);
        printf("\n请输入你需要操作的位置->:");
		scanf("%d %d", &x, &y);
		if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
		{
			printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
		}
		else
			printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
	}

	switch (a)
	{
	case 1:
	{
		if (youxipan[x][y] == '*')
		{
			if (leipan[x][y] == 1)
			{
				printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
			}
			else
			{
				saolei2(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数 
				break;
			}
		}

		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;

		}


	}



	case 2:
	{
		if (youxipan[x][y] == '*')
		{
			youxipan[x][y] = '?'; break;
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}
	}



	case 3:
	{
		if (youxipan[x][y] == '*')
		{
			if ((*biaoleishu) < lei)
			{
				youxipan[x][y] = 'X';
				*biaoleishu = ((*biaoleishu) + 1);

				if (leipan[x][y] == 1)
					*biaoleishu1 = (*biaoleishu1) + 1;
				if ((*biaoleishu1) == lei)
				{
					printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
					return 0;
				}
				break;
			}
			else
			{
				printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
				break;
			}
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}

	}

	case 4:
	{
		if (youxipan[x][y] == 'X')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
		}

	}

	case 5:
	{
		if (youxipan[x][y] == '?')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
		}
	}





	}


	return 1;
}



void saolei2(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))      //递归不动  栈溢出
			{
				digui12(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
				digui12(leipan, youxipan, x - 1, y - 1, x1, y1);
				digui12(leipan, youxipan, x - 1, y + 1, x1, y1);
				digui12(leipan, youxipan, x, y - 1, x1, y1);
				digui12(leipan, youxipan, x, y + 1, x1, y1);
				digui12(leipan, youxipan, x + 1, y - 1, x1, y1);
				digui12(leipan, youxipan, x + 1, y, x1, y1);
				digui12(leipan, youxipan, x + 1, y + 1, x1, y1);
			}

		}
		else
		youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码
	}
}


void digui12(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui22(leipan, youxipan, x - 1, y, x1, y1);
			digui22(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui22(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui22(leipan, youxipan, x, y - 1, x1, y1);
			digui22(leipan, youxipan, x, y + 1, x1, y1);
			digui22(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui22(leipan, youxipan, x + 1, y, x1, y1);
			digui22(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}

void digui22(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui32(leipan, youxipan, x - 1, y, x1, y1);
			digui32(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui32(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui32(leipan, youxipan, x, y - 1, x1, y1);
			digui32(leipan, youxipan, x, y + 1, x1, y1);
			digui32(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui32(leipan, youxipan, x + 1, y, x1, y1);
			digui32(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}




void digui32(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui42(leipan, youxipan, x - 1, y, x1, y1);
			digui42(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui42(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui42(leipan, youxipan, x, y - 1, x1, y1);
			digui42(leipan, youxipan, x, y + 1, x1, y1);
			digui42(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui42(leipan, youxipan, x + 1, y, x1, y1);
			digui42(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}



void digui42(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)

{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}
}

高级函数函数库(源文件):

#define _CRT_SECURE_NO_WARNINGS 
#include"game.h"


void chushihua3(int leipan[X33][Y33], char youxipan[X33][Y33], int x33, int y33, int x3 ,int y3, int lei3)
{
	int i = 0, j = 0;

	for (i = 0; i <= (x33 - 1); ++i)
	{
		for (j = 0; j <= (y33 - 1); ++j)
		{
			leipan[i][j] = 0;
		}
	}//雷盘初始化  0表示安全 1表示有雷

	for (i = 0; i <= (x33 - 1); ++i)
	{
		for (j = 0; j <= (y33 - 1); ++j)
		{
			youxipan[i][j] = '*';
		}
	}//游戏盘未被扫的区域为O

	int a = 0;//计雷数
	while (a < lei3)
	{

		int x = (rand() % x3 + 1);
		int y = (rand() % y3 + 1);


		if (leipan[x][y] == 0)
		{
			a++;
			leipan[x][y] = 1;
		}
	}
}


void dayin13(char youxipan[X33][Y33], int x1, int y1)//打印游戏盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if (j == 9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%c | ", youxipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}



void dayin23(int leipan[X33][Y33], int x1, int y1)//打印雷盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if (j == 9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%d | ", leipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}





int player3(int leipan[X33][Y33], char youxipan[X33][Y33], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
	int a = 0;
	int n = 0;
	do {
		while (1)
		{
			printf("\n*************************************\n");
			printf("** 1打开该位置  2标记问号  3标记雷 **\n");
			printf("*************************************\n");
			printf("** 4取消标记的雷   5取消标记的问号 **\n");
			printf("*************************************\n");
			printf("请选择你需要进行的操作->:");
			scanf("%d", &a);
			if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
				break;
			else
				printf("\n输入有误,请重新选择:\n");
		}

		printf("\n返回上一步 请输入0  继续则输入1 ->:");
		scanf("%d", &n);
	} while (!n);
	int x = 0, y = 0;

	while (1)
	{
		dayin13(youxipan, X3, Y3);
        printf("请输入你需要操作的位置->:");
		scanf("%d %d", &x, &y);
		if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
		{
			printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
		}
		else
			printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
	}

	switch (a)
	{
	case 1:
	{
		if (youxipan[x][y] == '*')
		{
			if (leipan[x][y] == 1)
			{
				printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
			}
			else
			{
				saolei3(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数 
				break;
			}
		}

		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;

		}


	}



	case 2:
	{
		if (youxipan[x][y] == '*')
		{
			youxipan[x][y] = '?'; break;
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}
	}



	case 3:
	{
		if (youxipan[x][y] == '*')
		{
			if ((*biaoleishu) < lei)
			{
				youxipan[x][y] = 'X';
				*biaoleishu = ((*biaoleishu) + 1);

				if (leipan[x][y] == 1)
					*biaoleishu1 = (*biaoleishu1) + 1;
				if ((*biaoleishu1) == lei)
				{
					printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
					return 0;
				}
				break;
			}
			else
			{
				printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
				break;
			}
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}

	}

	case 4:
	{
		if (youxipan[x][y] == 'X')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
		}

	}

	case 5:
	{
		if (youxipan[x][y] == '?')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
		}
	}





	}


	return 1;
}



void saolei3(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))      //递归不动  栈溢出
			{
				digui13(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
				digui13(leipan, youxipan, x - 1, y - 1, x1, y1);
				digui13(leipan, youxipan, x - 1, y + 1, x1, y1);
				digui13(leipan, youxipan, x, y - 1, x1, y1);
				digui13(leipan, youxipan, x, y + 1, x1, y1);
				digui13(leipan, youxipan, x + 1, y - 1, x1, y1);
				digui13(leipan, youxipan, x + 1, y, x1, y1);
				digui13(leipan, youxipan, x + 1, y + 1, x1, y1);
			}

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码
	}
}


void digui13(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui23(leipan, youxipan, x - 1, y, x1, y1);
			digui23(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui23(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui23(leipan, youxipan, x, y - 1, x1, y1);
			digui23(leipan, youxipan, x, y + 1, x1, y1);
			digui23(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui23(leipan, youxipan, x + 1, y, x1, y1);
			digui23(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}

void digui23(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui33(leipan, youxipan, x - 1, y, x1, y1);
			digui33(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui33(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui33(leipan, youxipan, x, y - 1, x1, y1);
			digui33(leipan, youxipan, x, y + 1, x1, y1);
			digui33(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui33(leipan, youxipan, x + 1, y, x1, y1);
			digui33(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}




void digui33(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui43(leipan, youxipan, x - 1, y, x1, y1);
			digui43(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui43(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui43(leipan, youxipan, x, y - 1, x1, y1);
			digui43(leipan, youxipan, x, y + 1, x1, y1);
			digui43(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui43(leipan, youxipan, x + 1, y, x1, y1);
			digui43(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}



void digui43(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)

{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}
}

全屏模式函数库(源文件):

#define _CRT_SECURE_NO_WARNINGS 
#include"game.h"


void chushihua4(int leipan[X44][Y44], char youxipan[X44][Y44], int x44, int y44, int x4, int y4, int lei4)
{
	int i = 0, j = 0;

	for (i = 0; i <= (x44 - 1); ++i)
	{
		for (j = 0; j <= (y44 - 1); ++j)
		{
			leipan[i][j] = 0;
		}
	}//雷盘初始化  0表示安全 1表示有雷

	for (i = 0; i <= (x44 - 1); ++i)
	{
		for (j = 0; j <= (y44 - 1); ++j)
		{
			youxipan[i][j] = '*';
		}
	}//游戏盘未被扫的区域为O

	int a = 0;//计雷数
	while (a < lei4)
	{

		int x = (rand() % x4 + 1);
		int y = (rand() % y4 + 1);


		if (leipan[x][y] == 0)
		{
			a++;
			leipan[x][y] = 1;
		}
	}
}


void dayin14(char youxipan[X44][Y44], int x1, int y1)//打印游戏盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if (j == 9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%c | ", youxipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}



void dayin24(int leipan[X44][Y44], int x1, int y1)//打印雷盘
{
	int i = 0, j = 0;
	for (j = 0; j <= (y1); ++j)
	{
		if (j == 0)
			printf("  | ");
		else if (j < 9)
			printf("%d   ", j);
		else if (j == 9)
			printf("%d ", j);
		else printf(" %d ", j);
	}
	printf("\n");//行号

	for (j = 0; j <= (y1); ++j)
	{
		if (j < y1)
			printf("----");
		else
			printf("---");
	}

	printf("\n");//下划线


	for (i = 1; i <= x1; ++i)
	{
		printf("%-2d| ", i);
		for (j = 1; j <= y1; ++j)
		{

			printf("%d | ", leipan[i][j]);
		}

		printf("\n");
	}
	printf("\n");
}





int player4(int leipan[X44][Y44], char youxipan[X44][Y44], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
	int a = 0;
	int n = 0;
	do {
		while (1)
		{
			printf("\n*************************************\n");
			printf("** 1打开该位置  2标记问号  3标记雷 **\n");
			printf("*************************************\n");
			printf("** 4取消标记的雷   5取消标记的问号 **\n");
			printf("*************************************\n");
			printf("请选择你需要进行的操作->:");
			scanf("%d", &a);
			if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
				break;
			else
				printf("\n输入有误,请重新选择:\n");
		}

		printf("\n返回上一步 请输入0  继续则输入1 ->:");
		scanf("%d", &n);
	} while (!n);
	int x = 0, y = 0;

	while (1)
	{
		dayin14(youxipan, X4, Y4);
		printf("请输入你需要操作的位置->:");
		scanf("%d %d", &x, &y);
		if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
		{
			printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
		}
		else
			printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
	}

	switch (a)
	{
	case 1:
	{
		if (youxipan[x][y] == '*')
		{
			if (leipan[x][y] == 1)
			{
				printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
			}
			else
			{
				saolei4(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数 
				break;
			}
		}

		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;

		}


	}



	case 2:
	{
		if (youxipan[x][y] == '*')
		{
			youxipan[x][y] = '?'; break;
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}
	}



	case 3:
	{
		if (youxipan[x][y] == '*')
		{
			if ((*biaoleishu) < lei)
			{
				youxipan[x][y] = 'X';
				*biaoleishu = ((*biaoleishu) + 1);

				if (leipan[x][y] == 1)
					*biaoleishu1 = (*biaoleishu1) + 1;
				if ((*biaoleishu1) == lei)
				{
					printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
					return 0;
				}
				break;
			}
			else
			{
				printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
				break;
			}
		}
		else
		{
			printf("\n操作失败,该位置已被操作\n"); break;
		}

	}

	case 4:
	{
		if (youxipan[x][y] == 'X')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
		}

	}

	case 5:
	{
		if (youxipan[x][y] == '?')
		{
			youxipan[x][y] = '*';
			break;
		}
		else
		{
			printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
		}
	}





	}


	return 1;
}



void saolei4(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))      //递归不动  栈溢出
			{
				digui14(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
				digui14(leipan, youxipan, x - 1, y - 1, x1, y1);
				digui14(leipan, youxipan, x - 1, y + 1, x1, y1);
				digui14(leipan, youxipan, x, y - 1, x1, y1);
				digui14(leipan, youxipan, x, y + 1, x1, y1);
				digui14(leipan, youxipan, x + 1, y - 1, x1, y1);
				digui14(leipan, youxipan, x + 1, y, x1, y1);
				digui14(leipan, youxipan, x + 1, y + 1, x1, y1);
			}

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码
	}
}


void digui14(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui24(leipan, youxipan, x - 1, y, x1, y1);
			digui24(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui24(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui24(leipan, youxipan, x, y - 1, x1, y1);
			digui24(leipan, youxipan, x, y + 1, x1, y1);
			digui24(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui24(leipan, youxipan, x + 1, y, x1, y1);
			digui24(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}

void digui24(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui34(leipan, youxipan, x - 1, y, x1, y1);
			digui34(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui34(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui34(leipan, youxipan, x, y - 1, x1, y1);
			digui34(leipan, youxipan, x, y + 1, x1, y1);
			digui34(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui34(leipan, youxipan, x + 1, y, x1, y1);
			digui34(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}




void digui34(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';
			digui44(leipan, youxipan, x - 1, y, x1, y1);
			digui44(leipan, youxipan, x - 1, y - 1, x1, y1);
			digui44(leipan, youxipan, x - 1, y + 1, x1, y1);
			digui44(leipan, youxipan, x, y - 1, x1, y1);
			digui44(leipan, youxipan, x, y + 1, x1, y1);
			digui44(leipan, youxipan, x + 1, y - 1, x1, y1);
			digui44(leipan, youxipan, x + 1, y, x1, y1);
			digui44(leipan, youxipan, x + 1, y + 1, x1, y1);

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}

}



void digui44(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)

{

	int m = 0;
	if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
	{
		m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
		if (m == 0)
		{
			youxipan[x][y] = ' ';

		}
		else
			youxipan[x][y] = m + '0';//字符1 2 3  用的ASC||码

	}
}

实操展示(vs2019环境):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值