⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 saolei.cpp

📁 经典扫雷程序 和windows自带扫雷一模一样 供学习使用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				{
					if (stop)
						FcNum = Cry;
					else
					    FcNum = SmileUp ;             
				}
				Rect.left   = (cxClient-cxFace)/2 ;
			    Rect.top    = 15 ;
			    Rect.right  = (cxClient+cxFace)/2 ;
			    Rect.bottom = 15+cyFace ;
			    InvalidateRect (hwnd, &Rect, TRUE);			
			}
						
			return 0 ;

        case WM_RBUTTONUP:
			//右键抬起
			if (stop)
				return 0;

			x = LOWORD (lParam) ;
			y = HIWORD (lParam) ;
			
			if ((x >= 10) && (x < 10+cxBrick*LeiQuWidth) && (y >= 55) && (y < 55+cyBrick*LeiQuHight)) 
				//若在雷区内,则设旗帜
			{
				x = (int ((x-10) / cxBrick));
				y = (int ((y-55) / cyBrick));
				FlagSetter (x, y);
			}

			InvalidateRect (hwnd, NULL, TRUE);			
			return 0 ;

		case WM_COMMAND:
			//菜单消息
			hMenu = GetMenu (hwnd) ;       //拿菜单句柄
			switch (LOWORD (wParam))
		    //判断为哪个菜单消息
			{
			case IDM_BEGIN:              
				//开局
				if(TmNum != 1000)                 //若正在游戏中,停止计时
					KillTimer (hwnd, ID_TIMER) ;

				LeiQu.resize(LeiQuWidth);        //重新设置雷区数组大小
				for(i=0; i < LeiQuWidth; i++) 
					LeiQu[i].resize(LeiQuHight);
				for (i = 0; i < LeiQuWidth; i++)
					for (j = 0; j < LeiQuHight; j++)
						LeiQu[i][j] = 0 ;
				CtNum = LeiNum;
				TmNum = 1000 ;                   //设为游戏未开始状态
				stop = 0;
				LeiTurn = 0 ;
				FcNum = SmileUp ;
				InvalidateRect (hwnd, NULL, TRUE);
				break;

				case IDM_CATALOG:
					//目录
				    if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\winmine.chm",HH_DISPLAY_INDEX,NULL)==0)   //系统帮助不存在,在当前目录寻找
					{	
				     GetCurrentDirectory(sizeof(buffer),buffer);
			       	 strcat(buffer,TEXT("\\help\\winmine.chm")); 
				      if (HtmlHelp(NULL,buffer,HH_DISPLAY_INDEX,NULL)==0)                          //仍然无法打开,显示错误消息					
					      MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
						  TEXT("错误信息"),MB_ICONERROR);
					}
		 	         break;
				case IDM_SearchHelp:
					//查找帮助主题
			         if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\winmine.chm",HH_DISPLAY_TOC,NULL)==0)       //系统帮助不存在,在当前目录寻找
					{	
				        GetCurrentDirectory(sizeof(buffer),buffer);
				        strcat(buffer,TEXT("\\help\\winmine.chm"));
				        if (HtmlHelp(NULL,buffer,HH_DISPLAY_TOC,NULL)==0)                              //仍然无法打开,显示错误消息				    
					    MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
						TEXT("错误信息"),MB_ICONERROR);
					 }
			         break;
		        case IDM_UserHelp:
					//使用帮助
			        if (HtmlHelp(NULL,"C:\\WINDOWS\\Help\\nthelp.chm",HH_DISPLAY_TOC,NULL)==0)         //系统帮助不存在,在当前目录寻找
					{	
				      GetCurrentDirectory(sizeof(buffer),buffer);
				      strcat(buffer,TEXT("\\help\\nthelp.chm"));
				      if (HtmlHelp(NULL,buffer,HH_DISPLAY_TOC,NULL)==0)                                //仍然无法打开,显示错误消息			
					MessageBox(hwnd,TEXT("产生一个错误:\r\n应用程序无法找到帮助文件\"WinMine.chm\"\t\r\n请确认文件存在,或者重新安装程序。"),
					TEXT("错误信息"),MB_ICONERROR);
					}
			         break;
		      case IDM_ABOUT:
				  //关于扫雷
			      ShellAbout(hwnd,TEXT("扫雷 ..."),"by Qi Fang,18th of May,2008",NULL);
			      break;

			case IDM_LOW:	
				//初级
				LeiQuWidth = LeiQuWidthL ;
				LeiQuHight = LeiQuHightL ;
				LeiNum = LeiNumL ;
				CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
			    iSelection = LOWORD (wParam) ;
				SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
				break;
			case IDM_MIDDLE:
				//中级
				LeiQuWidth = LeiQuWidthM ;
				LeiQuHight = LeiQuHightM ;
				LeiNum = LeiNumM ;
				CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
				iSelection = LOWORD (wParam) ;
				SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
				break;
			case IDM_HIGH:
				//高级
				LeiQuWidth = LeiQuWidthH ;
				LeiQuHight = LeiQuHightH ;
				LeiNum = LeiNumH ;	
				CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
				iSelection = LOWORD (wParam) ;			
				SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
				break;
			case IDM_DEFINE:
				//自定义
				DialogBox (hInstance,MAKEINTRESOURCE(IDD_DEFINE),hwnd,DefineProc); //弹出自定义对话框
				CheckMenuItem (hMenu, iSelection, MF_UNCHECKED) ;
				iSelection = LOWORD (wParam) ;
				SendMessage (hwnd, WM_COMMAND, IDM_BEGIN, 0) ; //重新开始
				break;

			case IDM_MARK:
				//标记
				mark = !mark;				
				break;
			case IDM_COLOR:
				//颜色
				color = !color;			
				break;				
			case IDM_SOUND:
				//声音
				sound = !sound;				
				break;
			case IDM_HEROLIST:
				//英雄榜
				DialogBox (hInstance,MAKEINTRESOURCE(IDD_HEROLIST),hwnd,DefineProc);  //弹出英雄榜
				return 0;
			case IDM_EXIT:
				//退出
				SendMessage (hwnd, WM_CLOSE, 0, 0) ;
				return 0;
			}
            CheckMenuItem (hMenu, iSelection, MF_CHECKED) ;	      //在所选项前画勾
			if(mark)
				CheckMenuItem (hMenu, IDM_MARK, MF_CHECKED) ;
			else
				CheckMenuItem (hMenu, IDM_MARK, MF_UNCHECKED) ;
			if(sound)
				CheckMenuItem (hMenu, IDM_SOUND, MF_CHECKED) ;
			else
				CheckMenuItem (hMenu, IDM_SOUND, MF_UNCHECKED) ;
			if(color)                    //彩色,读取彩色各图
			{
				hBrick = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Bricks16)) ;
				GetObject (hBrick, sizeof (BITMAP), &brick) ;			
				hCounter = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Counter12)) ;
				GetObject (hCounter, sizeof (BITMAP), &counter) ;					
				hFace = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_Faces5)) ;
				GetObject (hFace, sizeof (BITMAP), &face) ;	
				CheckMenuItem (hMenu, IDM_COLOR, MF_CHECKED) ;
				InvalidateRect (hwnd, NULL, TRUE);
			}
			else                        //黑白,读取黑白各图
			{
				hBrick = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BBricks16)) ;
				GetObject (hBrick, sizeof (BITMAP), &brick) ;
				hCounter = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BCounter12)) ;
				GetObject (hCounter, sizeof (BITMAP), &counter) ;		
				hFace = LoadBitmap (hInstance, MAKEINTRESOURCE (IDB_BFaces5)) ;
				GetObject (hFace, sizeof (BITMAP), &face) ;
				CheckMenuItem (hMenu, IDM_COLOR, MF_UNCHECKED) ;
				InvalidateRect (hwnd, NULL, TRUE);
			}
			
			return 0;

		case WM_DESTROY:                                                   
			//销毁窗口
            SaveFile();                //保存各变量到文件                              
			KillTimer (hwnd, ID_TIMER) ; //销毁计时器
			DeleteObject (hBrick) ;      //销毁对象
			DeleteObject (hCounter) ;
			DeleteObject (hFace) ; 
			PostQuitMessage (0) ;       //向操作系统发出退出请求
			return 0 ;
	}

	return DefWindowProc (hwnd, message, wParam, lParam);      //处理一些闲杂消息
}

BOOL CALLBACK DefineProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
//对话框回调函数,由函数DialogBox调用
{
	static HINSTANCE hInstance;
	int hight,width,num;

	switch (uMsg)
	{
	case WM_CREATE:
		//创建对话框
		hInstance = ((LPCREATESTRUCT)lParam)->hInstance;
		return 0;
	case WM_INITDIALOG:
		//初始化对话框
		SetDlgItemInt(hwndDlg, IDC_HIGHT, LeiQuHight, true);
		SetDlgItemInt(hwndDlg, IDC_WIDTH, LeiQuWidth, true);
		SetDlgItemInt(hwndDlg, IDC_MINENUM, LeiNum, true);
		SetDlgItemText(hwndDlg, IDC_NAME, TEXT("匿名"));
		SetDlgItemInt(hwndDlg, IDC_TIME1, herotime[0], true);
		SetDlgItemInt(hwndDlg, IDC_TIME2, herotime[1], true);
		SetDlgItemInt(hwndDlg, IDC_TIME3, herotime[2], true);
		SetDlgItemText(hwndDlg, IDC_NAME1, (LPCSTR)heroname[0].c_str());
		SetDlgItemText(hwndDlg, IDC_NAME2, (LPCSTR)heroname[1].c_str());
		SetDlgItemText(hwndDlg, IDC_NAME3, (LPCSTR)heroname[2].c_str());
		return 0;

	case WM_COMMAND:
		//按键消息
		switch(LOWORD(wParam))
		{
		case IDOK:
			//自定义对话框,确定
			hight  = GetDlgItemInt(hwndDlg, IDC_HIGHT, false, true);    //取文本框数值
			width  = GetDlgItemInt(hwndDlg, IDC_WIDTH, false, true);			
			num    = GetDlgItemInt(hwndDlg, IDC_MINENUM, false, true);
			if (hight < 9)
				hight = 9 ;
			if (width < 9)
				width = 9 ;
			if (num < 10)
				num = 10 ;
			if (hight > 24)
				hight = 24 ;
			if (width > 30)
				width = 30 ;
			if (num > (hight-1) * (width-1))
				num = (hight-1) * (width-1) ;
			LeiQuHight  = hight ;                //符合限制,赋给对应的长宽及雷数
			LeiQuWidth  = width ;
			LeiNum = num ;
			EndDialog(hwndDlg, true);
			return 0;
		
		case IDC_OK:
			//英雄榜输入,确定
			TCHAR lpBuffer[255] ;
			GetDlgItemText(hwndDlg,IDC_NAME,lpBuffer,sizeof(lpBuffer)); //取文本框文字
			switch(iSelection)
			{
			case IDM_LOW:
				heroname[0] = lpBuffer ;
				break ;
			case IDM_MIDDLE:
				heroname[1] = lpBuffer ;
				break ;
			case IDM_HIGH:	
				heroname[2] = lpBuffer ;
				break ;
			}
			EndDialog(hwndDlg, true);
			return 0;

		case IDC_RECOUNT:
			//英雄榜重新计数,英雄榜记录归为默认值
			int i ;
		    for (i=0 ; i < 3 ;i++)
			{
			  herotime[i] = 999 ;
			  heroname[i] = TEXT("匿名") ;			
			}
			SendMessage(hwndDlg,WM_INITDIALOG,wParam,lParam); //重画英雄榜对话框
			return 0;

		case IDCANCEL:
			//取消
			EndDialog(hwndDlg, true);         //关闭对话框
			return 0;
		}
	}
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -