main.cpp

/*********************程序源码***********************************/
# include <stdio.h>
# include <string.h>
# include <stdlib.h>
# include <easyx.h>
# include <time.h>
# include <tool.h>
# include <stdbool.h>
# include <conio.h>
# include <Commctrl.h>
# pragma comment(lib,"winmm.lib")
# define  ROW	10//行
# define	 COLS	10//列
# define  WINDOW_W	ROW*40//地图宽
# define  WINDOW_H	(COLS*40)+50//地图高
# define  IMG_W		40//图片宽
# define  IMG_H		40//图片高
# define  MINE		10//雷的数量
# define  IMG_NUM	14//素材数量
# define   MINUTE		3//关卡限时(分)
# define	  DELAY_X      50
//矩形1
# define   ROUND_X1	185
# define   ROUND_Y1	200
# define   ROUND_X2	320	
# define   ROUND_Y2	230
//矩形2
# define   ROUND2_X1	185
# define   ROUND2_Y1	250
# define   ROUND2_X2	320	
# define   ROUND2_Y2	280
//矩形3
# define   ROUND3_X1	185
# define   ROUND3_Y1	300
# define   ROUND3_X2	320	
# define   ROUND3_Y2	330
//矩形4
# define   ROUND4_X1	185
# define   ROUND4_Y1	350
# define   ROUND4_X2	320	
# define   ROUND4_Y2	380
//客服按钮
# define   SER_X1	0
# define   SER_Y1	31
# define   SER_X2	104	
# define   SER_Y2	55
 
 
 
 
void init(int map[][COLS]);
void create_mine(int map[][COLS]);
void Show(int map[][COLS]);
void mine_Sodoku(int map[][COLS]);
void load_img(IMAGE TP[]);
void draw(int map[][COLS], IMAGE TP[]);
void mouse_handle(ExMessage* m, int map[][COLS], int r, int c,int flag,int m_x,int m_y);
void blank_chain(int map[][COLS], int r, int c);
int win_lose(int map[][COLS]);
void menu(ExMessage* m2);
void count_down(int m, int s, IMAGE TP2[]);
void Loading();
static int min = MINUTE;//分
static int s = 60;//秒
static double t = 0;//当t满足条件s--
static int X = DELAY_X;
bool face = true; //true:笑脸 false:哭脸
bool key = false;//true:开始计时 false:未开始
bool landing = false;
int main()
{
	
//主页面	
HOME:
	{
		static double i =500;//公告字体
		double run3 = 0;
		initgraph(505, 500,EW_SHOWCONSOLE);//EW_SHOWCONSOLE
		system("color fd");
		IMAGE TuPian[3];//背景和标题
		IMAGE Gif[14];//斩杀图
		IMAGE Lightning[8];//闪电图
		IMAGE Bulletin;//公告栏
		IMAGE Woman[8];//女孩
		IMAGE Service;//客服
		mciSendString("open music/wzry.mp3", 0, 0, 0);
		mciSendString("play music/wzry.mp3 repeat", 0, 0, 0);
		char s1[] = "公告:尊敬的扫雷玩家您好:自2022年1月15日开始《扫雷游戏》将推出“防白嫖系统”,请自觉充钱!充钱不白嫖,白嫖要充钱!  修复了一些bug:①修复了平民玩家过多的问题②修复了不充钱还能玩的bug③优化了没钱玩你麻痹的效果";
		int len = strlen(s1);
		char s[10];
		char a2[50];
		for (int i = 1; i < 14; i++)
		{
			sprintf(a2, "gif/%d.png", i);
			loadimage(Gif + i, a2, 300, 300);
		}
		for (int j =0; j <8; j++)
		{
			sprintf(a2, "gif/0%d.png",j);
			loadimage(Lightning +j, a2, 64, 240);
			sprintf(a2, "gif/000%d.png", j);
			loadimage(Woman + j, a2, 88, 78);
		}
		
		loadimage(TuPian + 0, "images/sky.jpg", 505, 500, 0);
		loadimage(TuPian + 2, "images/bt.png", 395, 125, 0);
		loadimage(&Service, "images/kf.png", 104, 26, 0);
		loadimage(&Bulletin,"images/dhk.png", 520,30);
		BeginBatchDraw();	//开始双缓冲绘图
		while (1)
		{
			cleardevice();
			Sleep(5);
			putimage(0, 0, TuPian + 0, SRCPAINT);
			drawImg(20, 50, TuPian + 2);
			drawImg(0,30, &Service);
			static int z2 = 0;
			static int z3 = 0;
			static int flag4 = 0;
			
			drawImg(-5, 0, &Bulletin);
			drawImg(80,100 , Gif + z2);
			drawImg(380, 0, Lightning + z3);
			drawImg(run3, 428, Woman + z3);
			flag4++;
			run3 ++;
			if (flag4 ==7)
			{
				z2++;
				z3++;
				flag4 = 0;
			}
			if (z2 == 14)
			{
				z2 = 0;
			}
			if (z3 == 8)
			{
				z3 = 0;
			}
			if (run3 >= 593)
			{
				run3 =-88;
			}
			settextstyle(20, 0, "华文新魏");
			settextcolor(RGB(128, 255, 255));
		    outtextxy(i, 1,s1);
			 Loading();
			ExMessage m2;
			if (peekmessage(&m2, EM_MOUSE))
			{
				int r2 = m2.x;//行
				int c2 = m2.y;//列
				
				switch (m2.message)
				{
				case WM_LBUTTONDOWN:
				{
					
					if ((r2 >= ROUND_X1 && r2 <= ROUND_X2) && (c2 >= ROUND_Y1 && c2 <= ROUND_Y2))
					{
						PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
						if (landing==true)
						{
							
							i = 500;
							mciSendString("close music/wzry.mp3", 0, 0, 0);
							goto GAME;
						}
						else if (landing ==false)
						{
							int select4= MessageBox(GetHWnd(), "请先登陆!!!!", "麻豆传媒", MB_OKCANCEL);
							if (select4 == IDOK)
							{
								;
							}
							else
							{
								;
							}
						}
							
					}
					else if ((r2 >= ROUND2_X1 && r2 <= ROUND2_X2) && (c2 >= ROUND2_Y1 && c2 <= ROUND2_Y2))
					{
						PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
						i = 500;
						goto Top_up;
					}
					else if ((r2 >= ROUND3_X1 && r2 <= ROUND3_X2) && (c2 >= ROUND3_Y1 && c2 <= ROUND3_Y2))
					{
						if (landing == false)
						{
							PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
							i = 500;
							goto Convert;
						}
						else
						{
							int select5 = MessageBox(GetHWnd(), "已登陆,无须再登陆!", "麻豆传媒", MB_OKCANCEL);
							if (select5 == IDOK)
							{
								;
							}
							else
							{
								;
							}
						}
						
						
					}
					else if ((r2 >= ROUND4_X1 && r2 <= ROUND4_X2) && (c2 >= ROUND4_Y1 && c2 <= ROUND4_Y2))
					{
						int select6 = MessageBox(GetHWnd(), "是否退出?", "麻豆传媒", MB_OKCANCEL);
						if (select6== IDOK)
						{
							exit(0);
						}
						else
						{
							;
						}
					}
					else if ((r2 >= SER_X1 && r2 <= SER_X2) && (c2 >= SER_Y1 && c2 <= SER_Y2))
					{
						PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
						i = 500;
						goto Ser;
					}
					break;
				}
				}
			}
			menu(&m2);
			
			i-=1;
			if (i ==(double)(-40)+(-10*len))
			{
				i = 500;
			}
			
			FlushBatchDraw();	//刷新
			
		}
		EndBatchDraw();
	}
	//客服
Ser:
	{
		initgraph(435,225);
		IMAGE Black;//黑背景
		IMAGE Tx;//头像
		IMAGE TxK[11];//头像框
		IMAGE QQ[2];//QQ图标
		IMAGE Return[2];//返回
		static int z4= 0;
		static int flag6 = 0;
		loadimage(&Black, "images/black.png", 450, 240);
		loadimage(&Tx, "images/Tx.png", 50,50);
		loadimage(Return+0, "images/return2.png", 113, 27);
		loadimage(Return +1, "images/return22.png", 113, 27);
		char a4[20];
		for (int i =0; i <11; i++)
		{
			sprintf(a4, "gif/0000%d.png", i);
			loadimage(TxK + i, a4, 50, 50);
		}
		loadimage(QQ+0, "images/qq1.png", 35, 35);
		loadimage(QQ +1, "images/qq.png", 35, 35);
		BeginBatchDraw();
		while (1)
		{
			
			putimage(-8,-8, &Black);
			putimage(90,60, &Tx);
			drawImg(90,60, TxK + z4);
			putimage(180, 80, QQ + 0, SRCPAINT);//黑白图
			putimage(180, 80, QQ + 1, SRCAND); //原图
			putimage(320, 15, Return + 0, SRCPAINT);//黑白图
			putimage(320, 15, Return + 1, SRCAND); //原图
			
			flag6++;
			if (flag6 ==500)
			{
				z4++;
				flag6 = 0;
			}
			if (z4 == 11)
			{
				z4 = 0;
			}
			setbkmode(TRANSPARENT);//透明
			settextcolor(BLACK);
			settextstyle(20, 0, "华文新魏");
			outtextxy(175, 60, "作者:");
 
			settextcolor(BLUE);
			settextstyle(20,0, "隶书");
			outtextxy(230, 60, "蓝色的羽");
			settextcolor(RGB(0, 255, 255));
			outtextxy(230, 90, "444783764");
 
			settextcolor(BLACK);
			settextstyle(15, 0, "宋体");
			outtextxy(30, 130, "游戏信息:");
			outtextxy(95, 130, "《扫雷简单版》制作于2022.1.15,完成于1.17,");
			outtextxy(95, 150, "代码1000行左右,纯属娱乐");
			ExMessage m4;
			if (peekmessage(&m4, EM_MOUSE))
			{
				int r4 = m4.x;//行
				int c4 = m4.y;//列
				switch (m4.message)
				{
				case WM_LBUTTONDOWN:
				{
					if ((r4 >=330 && r4 <= 420) && (c4 >=16 && c4 <= 40))
					{
						PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
						goto HOME;
					}
				}
				}
			}
 
			
 
			
 
			FlushBatchDraw();	//刷新
		}
		EndBatchDraw();
	}
	
//登陆入口
Convert:
	{
		int flag2 = 0;
		char ID[] = "5201314";
		char PassWord[] = "a123456";
		char R[] = "RETURN";
		char id[100];
		char ch1;
		char password[100];
		int count1 =2;
		int count3 =2;
	Print:
		{
			while (1)
			{
				printf("*********************登陆界面*********************\n");
				printf("**************************************************\n");
				printf("**************************************************\n");
				printf("********************1.请输入账号******************\n");
				printf("********************2.请输入密码******************\n");
				printf("********************3. 回车登陆 ******************\n");
				printf("*********4.任意地方输入'RETURN'则返回主页面*******\n");
 
				while (count1 > 0)
				{
					printf("请输入账号:");
					scanf("%s", id);
					//判断是否相同,相同则返回主页面
					if (strcmp(R, id) == 0)
					{
						system("cls");
						goto HOME;
					}
					int len1 = strlen(ID);
					int len2 = strlen(id);
					if (len1 != len2)
					{
						printf("账号错误!\n");
						Sleep(200);
						system("cls");
						goto Print;
 
					}
					else if (len1 == len2)
					{
						for (int i = 0; i < len2; i++)
						{
							if (id[i] != ID[i])
							{
								count1 = 1;
								i = len2;
								printf("账号错误!\n");
								Sleep(200);
								system("cls");
								goto Print;
							}
							else
							{
								count1 = 0;
								i = len2;
							}
						}
					}
				}
				printf("请输入密码:");
				while (count3 > 0)
				{
					
					while ((ch1 = getch()) != '\r')
					{
 
						if ((ch1 == '\b'))
						{
							if (flag2 > 0)
							{
								flag2--;
								printf("\b \b");
							}
							else
								flag2 = 0;
 
						}
						else
						{
							password[flag2++] = ch1;
							printf("*");
						}
 
					}
					password[flag2] = '\0';
					int len3 = strlen(PassWord);
					int len4 = strlen(password);
					//判断是否相同,相同则返回主页面
					if (strcmp(R, password) == 0)
					{
						system("cls");
						goto HOME;
					}
					if (len3 != len4)
					{
						//密码输入错误则重新回到起点
						password[99] = { 0 };
						flag2 = 0;
						for (int i = 0; i <len4; i++)
						{
							printf("\b \b");
						}
						
						Sleep(200);
					}
					else if (len3 == len4)
					{
						for (int j = 0; j < len4; j++)
						{
 
							if (PassWord[j] != password[j])
							{
								count3++;
								password[99] = { 0 };
								flag2 = 0;
								for (int j = 0; j < len4; j++)
								{
									printf("\b \b");
								}
								Sleep(200);
								
							}
							else if(j==len4-1&&count3==2)
							{
								count3 = 0;
							}
						}
					}
				}
				break;
			}
		}
		
		if (count1 == count3)
		{
			printf("\n");
			printf("登陆成功!\n");
			for (int i = 3; i > 0; i--)
			{
				printf("还有%d秒返回主页面!\n",i);
				Sleep(1000);
			}
			landing = true;
			system("cls");
			
			goto HOME;
		}
	}
	//充值入口
Top_up:
	{
		initgraph(505, 500);
		IMAGE TP3[2];//二维码和返回
		IMAGE Man[8];//男孩
		char a3[20];
		for (int k = 0; k <8; k++)
		{
			sprintf(a3, "gif/00%d.png", k);
			loadimage(Man + k, a3, 80, 74);
		}
		double run2 = 0;
		BeginBatchDraw();	//开始双缓冲绘图
		while (1)
		{
			loadimage(TP3+ 0, "images/QR.jpg", 505, 500, 0);
			loadimage(TP3 +1, "images/return.png", 90,35, 0);
			putimage(0, 0, TP3 + 0);
			drawImg(6,450, TP3 +1);
			static int z3 = 0;
			static int flag5= 0;
			drawImg(run2, 0, Man+z3);
			run2+=0.5;
			flag5++;
			if (flag5==15)
			{
				z3++;
				flag5= 0;
			}
			if (z3 ==8)
			{
				z3 = 0;
			}
			if (run2 >= 505)
			{
				run2 = 0;
			}
			ExMessage m3;
			if (peekmessage(&m3, EM_MOUSE))
			{
				int r3 = m3.x;//行
				int c3 = m3.y;//列
				switch (m3.message)
				{
				case WM_LBUTTONDOWN:
				{
					if ((r3 >= 6 && r3<= 90) && (c3 >= 450 && c3<= 480))
					{
						PlaySound("music/6.wav", NULL, SND_ASYNC | SND_FILENAME);
						goto HOME;
					}
				}
				}
			}
			FlushBatchDraw();	//刷新
		}
		EndBatchDraw();
		
	}
	
	
//游戏页面
GAME:
	{
		initgraph(WINDOW_W, WINDOW_H);//地图 EW_SHOWCONSOLE
		int map[ROW][COLS] = { 0 };
		srand((unsigned int)time(NULL));//随机
		IMAGE TP[IMG_NUM];//定义素材
		IMAGE TP2[5];
		mciSendString("open music/2.mp3", 0, 0, 0);
		mciSendString("open music/3.mp3", 0, 0, 0);
		mciSendString("play music/2.mp3 repeat", 0, 0, 0);
		load_img(TP);
		init(map);
 
		BeginBatchDraw();	//开始双缓冲绘图
		while (1)
		{
			
			int win =1;
			count_down(min, s,TP2);
			
			ExMessage m;//定义鼠标消息
			static int flag = 1;//右键切换标记
		
			draw(map, TP);//绘图
			
			if (peekmessage(&m, EM_MOUSE))//如果获取到一条鼠标消息
			{
 
				//鼠标的坐标对应数组下标
				int r = m.y / IMG_H;//行
				int c = m.x / IMG_W;//列
				int m_x = m.x;//鼠标坐标
				int m_y = m.y;
				mouse_handle(&m, map, r, c, flag,m_x,m_y);
				win = win_lose(map);
				//赢
				if (win == 0)
				{
					X--;
					if (X ==30)
					{
						int select2 = MessageBox(GetHWnd(), "恭喜你,通关!是否返回主页面?", "麻豆传媒", MB_OKCANCEL);
						if (select2 == IDOK)
						{
							mciSendString("close music/3.mp3 ", 0, 0, 0);
							X = DELAY_X;
							min = MINUTE;
							s = 60;
							t = 0;
							init(map);
							goto HOME;
 
						}
						else
						{
							mciSendString("close music/3.mp3 ", 0, 0, 0);
							X = DELAY_X;
							min = MINUTE;
							s = 60;
							t = 0;
							init(map);
						}
							
					}
					
				}
				if (win == -1)
				{
					X--;
					if (X== 0)
					{
						int select3 = MessageBox(GetHWnd(), "踩雷专家! 是否返回主页面?","麻豆传媒" ,MB_OKCANCEL);
						if (select3 == IDOK)
						{
							mciSendString("close music/3.mp3 ", 0, 0, 0);
							mciSendString("close music/2.mp3 ", 0, 0, 0);
							win = 1;
							X = DELAY_X;
							min = MINUTE;
							s = 60;
							t = 0;
							init(map);
							goto HOME;
						}
						else
						{
							mciSendString("close music/3.mp3 ", 0, 0, 0);
							X = DELAY_X;
							min = MINUTE;
							s = 60;
							t = 0;
							init(map);
						}
							
					}
					
 
				}
			}
			
			if (face == false)
			{
				
				mciSendString("close music/3.mp3 ", 0, 0, 0);
					X--;
					if (X==0)
					{
						min = MINUTE;
						s = 60;
						t = 0;
						init(map);
						X=DELAY_X;
						face = true;
					}	
			}
			
			if (key==true)
			{
				t++;
			}
			
			if ((t == 400)&&(win==1))
			{
				s--;
				t = 0;
			}
			else if (s == 0)
			{
				min--;
				s = 60;
			}
			else if (min < 0)//当时间到则弹出提示框选择
			{
				int select = MessageBox(GetHWnd(), "时间到了,重开吧你!按“确定”重新玩,按”否“退出", "麻豆传媒", MB_OKCANCEL);
				if (select == IDOK)//重新玩
				{
					mciSendString("close music/3.mp3 ", 0, 0, 0);
					min = MINUTE;
					s = 60;
					init(map);
				}
				else
				{
					exit(0);
				}
			}
 
			FlushBatchDraw();	//刷新
		}
		EndBatchDraw();
	}
	
	while (1);
	return 0;
}
//初始化
void init(int map[][COLS])
{
	key =false;
	memset(map, 0, sizeof(int) * ROW * COLS);//把map全部初始化为0
	create_mine(map);
	mine_Sodoku(map);
	//Show(map);
}
//显示
void Show(int map[][COLS])
{
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			printf("%2d ", map[i][j]);
		}
		printf("\n");
	}
}
//随机生成雷
void create_mine(int map[][COLS])
{
	for (int i = 0; i <MINE;)
	{
		int r = rand() %ROW;
		int c = rand() %COLS;
		if (map[r][c] == 0)
		{
			map[r][c] = -1;
			++i;
		}
	}
}
//雷周围的九宫格
void mine_Sodoku(int map[][COLS])
{
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			if (map[i][j] == -1)
			{
				for (int r = i - 1; r <= i + 1; r++)
				{
					for (int c = j - 1; c <= j + 1; c++)
					{
						if ((map[r][c]!=-1)&&(r >= 0 && r < 10 && c >= 0 && c < 10))//排除雷并且在范围内
						{
							map[r][c] += 1;
						}
						
					}
				}
			}
		}
	}
	for (int i2 = 0; i2 < ROW; i2++)
	{
		for (int j2 = 0; j2 < COLS; j2++)
		{
			map[i2][j2] += 20;
		}
	}
}
//加载图片
void load_img(IMAGE TP[])
{
	char arr[50];
	for (int i = 0; i < IMG_NUM; i++)
	{
		sprintf(arr, "images/%d.jpg", i);
		loadimage(TP+i, arr, IMG_W,IMG_H, 0);
	}
	
}
//绘制图片
void draw(int map[][COLS], IMAGE TP[])
{
	for (int i = 0; i <ROW; i++)
	{
		for (int j = 0; j <COLS; j++)
		{
			if (map[i][j] >= -1 && map[i][j] <= 8)
			{
				switch (map[i][j])
				{
				case 0:putimage(j * IMG_W, i * IMG_H, TP + 0); break;//注意这里不要反了不然数据和实际图片不同
				case 1:putimage(j * IMG_W, i * IMG_H, TP + 1); break;
				case 2:putimage(j * IMG_W, i * IMG_H, TP + 2); break;
				case 3:putimage(j * IMG_W, i * IMG_H, TP + 3); break;
				case 4:putimage(j * IMG_W, i * IMG_H, TP + 4); break;
				case 5:putimage(j * IMG_W, i * IMG_H, TP + 5); break;
				case 6:putimage(j * IMG_W, i * IMG_H, TP + 6); break;
				case 7:putimage(j * IMG_W, i * IMG_H, TP + 7); break;
				case 8:putimage(j * IMG_W, i * IMG_H, TP + 8); break;
				case -1:putimage(j * IMG_W, i * IMG_H, TP + 9); break;
				}
			}
			else if (map[i][j] >= 19 && map[i][j] <= 28)//贴白盒子
			{
				putimage(j * IMG_W, i * IMG_H, TP +10);
			}
			else if (map[i][j] >= 39 && map[i][j] <= 48)//贴旗
			{
				putimage(j * IMG_W, i * IMG_H, TP + 11);
			}
			else if (map[i][j] >= 59 && map[i][j] <= 68)//贴问号
			{
				putimage(j * IMG_W, i * IMG_H, TP + 12);
			}
			else if (map[i][j] == -2)
			{
				putimage(j * IMG_W, i * IMG_H, TP + 13);
			}
			
		}
	}
	
}
 
//鼠标操作
void mouse_handle(ExMessage* m,int map[][COLS],int r,int c,int flag,int m_x,int m_y)
{
	
	switch ((*m).message)
	{
		
	case WM_LBUTTONDOWN://左键打开盒子
	{
		key = true;
		if (map[r][c] > 19 && map[r][c] <= 28&&map[r][c]!=20)
		{
			
			
			PlaySound("music/0.wav", NULL, SND_ASYNC | SND_FILENAME);//异步播放,只能播放wav格式
			Sleep(80);
			map[r][c] -= 20;
			
			break;
		}
		else if (map[r][c] == 20)//如果点到空白就展开
		{	
			PlaySound("music/1.wav", NULL, SND_ASYNC | SND_FILENAME);
			blank_chain(map,r,c);
			break;
		}
		else if (map[r][c] == 19)//如果点到炸弹
		{
			mciSendString("play music/3.mp3 ", 0, 0, 0);
			map[r][c] -=21;
			for (int i = 0; i < ROW; i++)
			{
				for (int j = 0; j < COLS; j++)
				{
					if (map[i][j] == 19)
					{
						map[i][j] -= 20;
						
					}
				}
			}	
		}
		else if (m_x >= 166 && m_x <= 206 && m_y >= 405 && m_y <= 445)
		{
			PlaySound("music/5.wav", NULL, SND_ASYNC | SND_FILENAME);
			face = !face;
		}
		break;
	}
	case WM_RBUTTONDOWN://右键插旗/插问号
	{
		
		switch (flag)
		{
		case 1:
		{
			if (map[r][c] >= 19 && map[r][c] <= 28)
			{
				PlaySound("music/4.wav", NULL, SND_ASYNC | SND_FILENAME);
				map[r][c] += 20;
				flag = 2;
				break;
			}
		}
		case 2:
		{
			if (map[r][c] >= 39 && map[r][c] <= 48)
			{
				PlaySound("music/4.wav", NULL, SND_ASYNC | SND_FILENAME);
				map[r][c] += 20;
				flag = 3;
				break;
			}
		}
		case 3:
		{
			if (map[r][c] >= 59 && map[r][c] <= 68)
			{
				PlaySound("music/4.wav", NULL, SND_ASYNC | SND_FILENAME);
				map[r][c] -= 40;
				flag = 1;
				break;
			}
		}
		}
 
	}
	}
	
}
//空白就炸开当前点击的下标
void blank_chain(int map[][COLS],int r,int c)
{
	for (int i = r - 1; i <= r + 1; i++)
	{
		for (int j = c - 1; j <= c + 1; j++)
		{
			if ((map[i][j] != -1) && (i >= 0
				&& i < 10 && j >= 0 && j < 10) 
				&& (map[i][j] >= 19 && map[i][j] <= 28))//不是炸弹并且是关闭状态,不能越界
			{
				map[i][j] -= 20;
				blank_chain(map, r, c);//递归
			}
		}
	}
}
//倒计时
void count_down(int m,int s, IMAGE TP2[])
{
	loadimage(TP2+0, "images/14.jpg", WINDOW_W, WINDOW_H, 0);
	loadimage(TP2+1, "images/face1.jpg", IMG_W+13, IMG_H+13, 0);
	loadimage(TP2+2, "images/face.jpg", IMG_W+13,IMG_H+13, 0);
	loadimage(TP2 +3, "images/cry1.jpg", IMG_W+13, IMG_H+13, 0);
	loadimage(TP2 +4, "images/cry.jpg", IMG_W+13, IMG_H+13, 0);
	putimage(0, 300, TP2+0);
	if (face)
	{
		putimage(160, 400, TP2 + 1, SRCPAINT);//黑白图
		putimage(160, 400, TP2 + 2, SRCAND); //原图
	}
	else
	{
		putimage(160, 400, TP2 + 3, SRCPAINT);//黑白图
		putimage(160, 400, TP2 + 4, SRCAND); //原图
	}
		char arr[50];
		sprintf(arr, "剩余时间:%d :%d",m,s);
		setbkmode(TRANSPARENT);//透明
		settextstyle(20, 0, "华文新魏");
		settextcolor(BLACK);
		outtextxy(250, 420, arr);
}
int win_lose(int map[][COLS])
{
	int count = 0;//记录打开盒子的个数
	int count2= 0;
	for (int i = 0; i < ROW; i++)
	{
		for (int j = 0; j < COLS; j++)
		{
			if (map[i][j] >= 0 && map[i][j] <= 8)
				count++;
			if (map[i][j] == -2)
			{
				count2++;
			}
		}
 
	}
	if (count == ROW * COLS - MINE)
	{
		return 0;
	}
	else if (count2>0)
	{
		return -1;
	}
	else
		return 1;
}
 
void menu(ExMessage* m2)
{
	//感应鼠标的位置
	setbkmode(TRANSPARENT);//透明
	if ((m2->x >= ROUND_X1 && m2->x <= ROUND_X2) && (m2->y >= ROUND_Y1 && m2->y <= ROUND_Y2))
	{
		setlinecolor(RED);
		setfillcolor(BLACK);
		fillroundrect(ROUND_X1, ROUND_Y1, ROUND_X2, ROUND_Y2, 20, 30);
	}
	else
	{
		setlinecolor(RED);
		setfillcolor(LIGHTMAGENTA);
		fillroundrect(ROUND_X1, ROUND_Y1, ROUND_X2, ROUND_Y2, 20, 30);
	}
	settextstyle(30, 0, "华文新魏");
	settextcolor(YELLOW);
	outtextxy(195, 200, "进入游戏");
	
	
	if ((m2->x >= ROUND2_X1 && m2->x <= ROUND2_X2) && (m2->y >= ROUND2_Y1 && m2->y <= ROUND2_Y2))
	{
		setlinecolor(RED);
		setfillcolor(BLACK);
		fillroundrect(ROUND2_X1, ROUND2_Y1, ROUND2_X2, ROUND2_Y2, 20, 30);
	}
	else
	{
		setlinecolor(RED);
		setfillcolor(LIGHTMAGENTA);
		fillroundrect(ROUND2_X1, ROUND2_Y1, ROUND2_X2, ROUND2_Y2, 20, 30);
	}
	settextstyle(30, 0, "华文新魏");
	settextcolor(YELLOW);
	outtextxy(195, 250, "充值入口");
	
	if ((m2->x >= ROUND3_X1 && m2->x <= ROUND3_X2) && (m2->y >= ROUND3_Y1 && m2->y <= ROUND3_Y2))
	{
		setlinecolor(RED);
		setfillcolor(BLACK);
		fillroundrect(ROUND3_X1, ROUND3_Y1, ROUND3_X2, ROUND3_Y2, 20, 30);
	}
	else
	{
		setlinecolor(RED);
		setfillcolor(LIGHTMAGENTA);
		fillroundrect(ROUND3_X1, ROUND3_Y1, ROUND3_X2, ROUND3_Y2, 20, 30);
	}
	settextstyle(30, 0, "华文新魏");
	settextcolor(RED);
	settextcolor(YELLOW);
	outtextxy(195, 300, "登陆入口");
 
	if ((m2->x >= ROUND4_X1 && m2->x <= ROUND4_X2) && (m2->y >= ROUND4_Y1 && m2->y <= ROUND4_Y2))
	{
		setlinecolor(RED);
		setfillcolor(BLACK);
		fillroundrect(ROUND4_X1, ROUND4_Y1, ROUND4_X2, ROUND4_Y2, 20, 30);
	}
	else
	{
		setlinecolor(RED);
		setfillcolor(LIGHTMAGENTA);
		fillroundrect(ROUND4_X1, ROUND4_Y1, ROUND4_X2, ROUND4_Y2, 20, 30);
	}
	settextstyle(30, 0, "华文新魏");
	settextcolor(YELLOW);
	outtextxy(195, 350, "退出程序");
}
	
//加载图片
void Loading()
{
	
	static double run =-160;
	IMAGE Dog[6];
	IMAGE Gif[14];
	
	//定义结构体
	struct Sprite
	{
	    int x;
		int y;
		int w;
		int h;
 
	};
	Sprite dog
	{
		dog.x = run,
		dog.y = 435,
		dog.w = 102,
		dog.h = 72,
	};
	char a[50];
	for (int i = 1; i <6; i++)
	{
		sprintf(a, "images/0%d.png", i);
		loadimage(Dog + (i - 1), a, dog.w, dog.h);
	}
	
	static int z = 0;
	static int flag3 = 0;
 
	drawImg(dog.x, dog.y, Dog + z);
	flag3++;
	run++;	
	if (flag3 ==5)
	{
		z++;
		flag3 = 0;
	}
	if (z ==5)
	{
		z = 0;
	}
	if (dog.x >=505)
	{
		run = -160;
	}
	
	
}

运行示例: