亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? minewnd.cpp

?? visual c++編寫的掃雷游戲的代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
		InvalidateRect(rcBtn);
		// both of the left button and the right button are pushing down 
		if (nFlags == (MK_LBUTTON | MK_RBUTTON)) 
		{
			m_bLRBtnDown = TRUE;
			OnLRBtnDown(m_pOldMine->uRow, m_pOldMine->uCol);
		}
		InvalidateRect(rcMineArea);
	}
	else 
	{											// click in other area
		if (m_uGameState == GS_WAIT || m_uGameState == GS_RUN)
		{
			m_uBtnState = BUTTON_CLICK;
			InvalidateRect(rcBtn);
		}
	}
	
	CWnd::OnLButtonDown(nFlags, point);
}

void CMineWnd::OnLButtonUp(UINT nFlags, CPoint point) 
{
		//笑臉圖按鈕所在的區域
	CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39);
	//雷區所在的區域
	CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP, 
		MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, 
		MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);
	
	if (rcBtn.PtInRect(point)) 
	{// 點擊笑臉圖

			Invalidate();
			InitGame();
	}
	else if (rcMineArea.PtInRect(point)) 
	{//點擊雷區域
		CString value;		
		UINT around = 0;

		//根據不同的游戲狀態作處理
		switch(m_uGameState) 
		{
			//游戲進行狀態
		case GS_WAIT: case GS_RUN:
			// first get the MINEWND which if pushing down
			m_pOldMine = GetMine(point.x, point.y);
			if (!m_pOldMine) 
			{
				ReleaseCapture();
				return;
			}
			// do normal process
			// judge whether the lr button are both pushed down
			//檢測判斷當前狀態是否為左右鼠標同時按下
			if (m_bLRBtnDown) 
			{
				m_bLRBtnDown = FALSE;
				OnLRBtnUp(m_pOldMine->uRow, m_pOldMine->uCol);
				if (m_uGameState == GS_WAIT)
				{
					m_uBtnState = BUTTON_NORMAL;
					Invalidate();
					ReleaseCapture();
					return;
				}
				// if the around flags number equal to the around mines number, expand.
				//假若周圍已經標識的雷=周圍真正的雷數,拓展
				if (m_pOldMine->uState != STATE_FLAG)
				{
					OpenAround(m_pOldMine->uRow, m_pOldMine->uCol);
				}
				// check whether the MINEWND around the special MINEWND is a mine, if it is then dead.
				if (ErrorAroundFlag(m_pOldMine->uRow, m_pOldMine->uCol))
				{

					Dead(m_pOldMine->uRow, m_pOldMine->uCol);
					ReleaseCapture();
					return;
				}
			}
			else 
			{
				// start the game, init the mines area
				//如果游戲尚未開始,點擊左鍵啟動游戲
				if (m_uGameState == GS_WAIT) 
				{
					if (m_uTimer)
					{
						KillTimer(ID_TIMER_EVENT);
						m_uTimer = 0;
					}
					// the following five lines refresh the remining mine num rect immediately 
					// when click in the mine area at the first time
					m_uSpendTime = 1;
					Invalidate();
					if (m_bSoundful) 
					{
						sndPlaySound((LPCTSTR)LockResource(m_pSndClock), SND_MEMORY | SND_ASYNC | SND_NODEFAULT);
					}
					//啟動定時器
					m_uTimer = SetTimer(ID_TIMER_EVENT, 1000, NULL);
					//布雷
					LayMines(m_pOldMine->uRow, m_pOldMine->uCol);		// lay all the mines down 
					//改變游戲狀態為"運行/GS_RUN"
					m_uGameState = GS_RUN;

				}

				if (m_pOldMine->uOldState == STATE_NORMAL)
				{//當該雷區域為正常未作標記才打開
					// first judge if the special MINEWND is a mine
					//如果該區域為雷,則死亡
					if (IsMine(m_pOldMine->uRow, m_pOldMine->uCol)) 
					{
						Dead(m_pOldMine->uRow, m_pOldMine->uCol);
						ReleaseCapture();
						return;
					}
					// the special MINEWND is not a mine 
					//不是雷的時候,獲取其周圍的雷數目
					around = GetAroundNum(m_pOldMine->uRow, m_pOldMine->uCol);
				// 如果為空白區域,拓展,否則打開該區域(顯示周圍有多少雷數)
					if (around == 0) ExpandMines(m_pOldMine->uRow, m_pOldMine->uCol);
					else DrawDownNum(m_pOldMine, around);
				}
				else if (m_pOldMine->uOldState == STATE_DICEY)
				{//標志為“?”問號的時候
					m_pOldMine->uState = STATE_DICEY;
				}

				//判斷是否為勝利
				if (Victory())
				{
					Invalidate();
					ReleaseCapture();
					return;
				}
			}
			break;
		case GS_VICTORY:
		case GS_DEAD:
			ReleaseCapture();		// release the cursor
			return;
		default :
			break;
		}
		m_uBtnState = BUTTON_NORMAL;
		Invalidate();
	}
	else 
	{//點擊非雷區域
		if (m_uGameState == GS_WAIT || m_uGameState == GS_RUN)
		{
			m_uBtnState = BUTTON_NORMAL;
			InvalidateRect(rcBtn);
		}
	}
	
	ReleaseCapture();		// release the cursor
	CWnd::OnLButtonUp(nFlags, point);
}

void CMineWnd::OnRButtonDown(UINT nFlags, CPoint point) 
{
		//笑臉圖按鈕所在的區域
	CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39);
	//雷區所在的區域
	CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP, 
		MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, 
		MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);
	
	m_bLRBtnDown = FALSE;
		
	if (rcMineArea.PtInRect(point)) 
	{//點擊雷區域			
		if (m_uGameState == GS_WAIT || m_uGameState == GS_RUN) 
		{
			m_pNewMine = GetMine(point.x, point.y);
			if (!m_pNewMine) return;
			// both of the left button and the right button are pushing down 
			if (nFlags == (MK_LBUTTON | MK_RBUTTON))
			{
				m_bLRBtnDown = TRUE;
				OnLRBtnDown(m_pNewMine->uRow, m_pNewMine->uCol);
			}
			else
			{
				switch(m_pNewMine->uState) 
				{
				case STATE_NORMAL:
					m_pNewMine->uState = STATE_FLAG;
					m_pNewMine->uOldState = STATE_FLAG;
					m_nLeaveNum--;
					break;
				case STATE_FLAG:
					m_pNewMine->uState = STATE_DICEY;
					m_pNewMine->uOldState = STATE_DICEY;
					m_nLeaveNum++;
					break;
				case STATE_DICEY:
					m_pNewMine->uState = STATE_NORMAL;
					m_pNewMine->uOldState = STATE_NORMAL;
					break;
				default: 
					break;
				}
			}
			Invalidate();

		}
	}
	
	CWnd::OnRButtonDown(nFlags, point);
}

void CMineWnd::OnRButtonUp(UINT nFlags, CPoint point) 
{
	CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39);
	CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP, 
		MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);
	
	m_pOldMine = GetMine(point.x, point.y);
	if (!m_pOldMine) return;
	// judge whether the lr button are both pushed down
	if (m_bLRBtnDown) 
	{
		m_bLRBtnDown = FALSE;
		OnLRBtnUp(m_pOldMine->uRow, m_pOldMine->uCol);
		if (m_uGameState == GS_WAIT) 
		{
			m_uBtnState = BUTTON_NORMAL;
			Invalidate();
			return;
		}
		// if the around flags number equal to the around mines number, expand.
		if (m_pOldMine->uState != STATE_FLAG)
		{
			OpenAround(m_pOldMine->uRow, m_pOldMine->uCol);
		}
		// check whether the MINEWND around the special MINEWND is a mine, if it is then dead.
		if (ErrorAroundFlag(m_pOldMine->uRow, m_pOldMine->uCol))
		{
			//			Dead(m_pOldMine->uRow, m_pOldMine->uCol);
			//			ReleaseCapture();
			return;
		}
	}
	else
	{
		Victory();
	}
				
	CWnd::OnRButtonUp(nFlags, point);
}

void CMineWnd::OnMouseMove(UINT nFlags, CPoint point) 
{
	if (nFlags == MK_LBUTTON || nFlags == (MK_LBUTTON | MK_RBUTTON))
	{
		CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39);
		CRect rcMineArea(MINE_AREA_LEFT, MINE_AREA_TOP, 
			MINE_AREA_LEFT + m_uXNum * MINE_WIDTH, MINE_AREA_TOP + m_uYNum * MINE_HEIGHT);
		
		if (rcBtn.PtInRect(point)) 
		{				// point in button area
			switch(m_uGameState)
			{
			case GS_RUN:
				m_uBtnState = (m_bClickBtn) ? BUTTON_DOWN : BUTTON_CLICK;
				break;
			case GS_DEAD: case GS_VICTORY:
				if (m_bClickBtn) m_uBtnState = BUTTON_DOWN;
				break;
			default: 
				break;
			}
			InvalidateRect(rcBtn);
		}
		else if (rcMineArea.PtInRect(point)) 
		{		// point in mine area
			switch(m_uGameState) 
			{
			case GS_RUN:
				m_pNewMine = GetMine(point.x, point.y);
				if (!m_pNewMine || !m_pOldMine) return;
				if (m_pNewMine->uCol != m_pOldMine->uCol ||
					m_pNewMine->uRow != m_pOldMine->uRow) 
				{
					// change the new mine rect state
					switch(m_pNewMine->uState)
					{
					case STATE_NORMAL:
						m_pNewMine->uState = STATE_EMPTY;
						break;
					case STATE_DICEY:
						m_pNewMine->uState = STATE_DICEY_DOWN;
						break;
					}
					// resume the old mine rect state
					switch(m_pOldMine->uOldState) 
					{
					case STATE_NORMAL:
						m_pOldMine->uState = STATE_NORMAL;
						break;
					case STATE_DICEY:
						m_pOldMine->uState = STATE_DICEY;
						break;
					default :
						break;
					}
					// judge whether the lr button are pushed down
					if (m_bLRBtnDown) 
					{
						OnLRBtnUp(m_pOldMine->uRow, m_pOldMine->uCol);
						OnLRBtnDown(m_pNewMine->uRow, m_pNewMine->uCol);
					}
					m_pOldMine = m_pNewMine;
				}
				InvalidateRect(rcMineArea);
				break;
			case GS_VICTORY: case GS_DEAD:
				return;
			default: 
				break;
			}
		}
		else
		{										// point in other area
			switch(m_uGameState) 
			{
			 case GS_RUN:
				m_uBtnState = (m_bClickBtn) ? BUTTON_NORMAL : BUTTON_CLICK;
				if (m_pNewMine) 
				{
					if (m_pNewMine->uOldState == STATE_NORMAL)
					{
						m_pNewMine->uState = STATE_NORMAL;
					}
					else if (m_pNewMine->uOldState == STATE_DICEY)
					{
						m_pNewMine->uState = STATE_DICEY;
					}
				}
				break;
			case GS_DEAD: 
				m_uBtnState = BUTTON_DEAD;
				break;
			case GS_VICTORY:
				m_uBtnState = BUTTON_VICTORY;
				break;
			default: 
				break;
			}
			Invalidate();
		}
	}
	
	CWnd::OnMouseMove(nFlags, point);
}

void CMineWnd::OnMemuStart() 
{	
	InitGame();
	Invalidate();
}

void CMineWnd::OnMemuPrimary() 
{
	m_uLevel = LEVEL_PRIMARY;
	m_uXNum = PRIMARY_XNUM;
	m_uYNum = PRIMARY_YNUM;
	m_uMineNum = PRIMARY_MINENUM;
	
	SetCheckedLevel();
	InitGame();
	Invalidate();
	SizeWindow();
}

void CMineWnd::OnMemuSecond() 
{
	m_uLevel = LEVEL_SECONDRY;
	m_uXNum = SECONDRY_XNUM;
	m_uYNum = SECONDRY_YNUM;
	m_uMineNum = SECONDRY_MINENUM;
	
	SetCheckedLevel();
	InitGame();
	Invalidate();
	SizeWindow();
}

void CMineWnd::OnMemuAdvance() 
{
	m_uLevel = LEVEL_ADVANCE;
	m_uXNum = ADVANCE_XNUM;
	m_uYNum = ADVANCE_YNUM;
	m_uMineNum = ADVANCE_MINENUM;
	
	SetCheckedLevel();
	InitGame();
	Invalidate();
	SizeWindow();
}

void CMineWnd::OnMemuCustom() 
{
	m_uLevel = LEVEL_CUSTOM;
	SetCheckedLevel();
	CDlgCustom dlg;
	dlg.InitData(m_uXNum, m_uYNum, m_uMineNum);
	dlg.DoModal();
	
	InitGame();
	Invalidate();
	SizeWindow();
}

void CMineWnd::OnMemuCheat() 
{
//	m_bCheat = !m_bCheat;
//	SetCheckedCheat();
//	Invalidate();
}

void CMineWnd::OnMemuMark() 
{
	m_bMarkful = !m_bMarkful;
	SetCheckedMark();
	Invalidate();
}

void CMineWnd::OnMemuColor() 
{	
	m_bColorful = !m_bColorful;
	LoadBitmap();
	SetCheckedColor();
	Invalidate();
}

void CMineWnd::OnMemuSound() 
{	
	m_bSoundful = !m_bSoundful;
	SetCheckedSound();
	if (m_bSoundful) 
	{
		LoadWaveSrc();
	}
	else
	{
		FreeWaveSrc();
	}
}

void CMineWnd::OnMemuHero() 
{	
	CDlgHero dlg;
	dlg.SetBRecord(m_uPrimary);
	dlg.SetBHolder(m_szPrimary);
	dlg.SetIRecord(m_uSecond);
	dlg.SetIHolder(m_szSecond);
	dlg.SetERecord(m_uAdvance);
	dlg.SetEHolder(m_szAdvance);
	dlg.DoModal();
}

void CMineWnd::OnMemuExit() 
{	
	PostQuitMessage(0);
}

void CMineWnd::OnMemuHelpList() 
{	
	::WinExec("HH	WINMINE.CHM", SW_SHOW);
}

void CMineWnd::OnMemuHelpFind() 
{	
	::WinExec("HH	WINMINE.CHM", SW_SHOW);
}

void CMineWnd::OnMemuHelpUse() 
{	
	::WinExec("HH	NTHelp.CHM", SW_SHOW);
}

void CMineWnd::OnMemuAbout() 
{	
	ShellAbout(this->m_hWnd, "掃雷", "skybluehacker@yahoo.com.cn",NULL);
}

void CMineWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{	
	switch(nChar)
	{
	case VK_F1:
		OnMemuHelpList();
		break;
	case VK_F2:
		OnMemuStart();
		break;
	default: 
		break;
	}
	
	CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CMineWnd::OnInitMenu(CMenu* pMenu) 
{
	CWnd::OnInitMenu(pMenu);
	if ((m_pSubMenu = pMenu->GetSubMenu(0)) == 0) 
	{
		AfxMessageBox("初始化菜單失敗!");
		PostQuitMessage(0);
	}
	else
	{
		SetCheckedLevel();
		SetCheckedMark();
		SetCheckedColor();
		SetCheckedSound();
	//	SetCheckedCheat();
	}
}

void CMineWnd::OnMemuClose() 
{
	SaveConfig();
	KillTimer(ID_TIMER_EVENT);
	
	CWnd::OnClose();
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美久久久久免费播放网| 久久久久久久久久久久久久久99| 7777精品伊人久久久大香线蕉最新版 | 成人精品视频.| 色久综合一二码| 欧美一区二区私人影院日本| 久久精品网站免费观看| 日韩码欧中文字| 秋霞午夜av一区二区三区| 国产乱色国产精品免费视频| 在线免费观看视频一区| 亚洲国产你懂的| 久久精品国产久精国产| www.欧美.com| 欧美一区二区三区免费在线看| 中文字幕乱码久久午夜不卡| 亚洲成人激情社区| 国产69精品久久久久777| 欧美日韩视频在线观看一区二区三区| 久久亚洲精精品中文字幕早川悠里| 亚洲免费观看高清完整版在线| 精品一区二区在线观看| 一本色道久久综合亚洲aⅴ蜜桃| 欧美成人vps| 亚洲午夜免费视频| 成人av资源下载| 欧美mv和日韩mv的网站| 亚洲男女一区二区三区| 国产精选一区二区三区| 欧美电影影音先锋| 亚洲免费观看高清完整版在线观看 | 2020国产精品自拍| 亚洲欧美国产高清| 国产精品一区二区91| 欧美三级三级三级爽爽爽| 国产精品免费丝袜| 精品中文字幕一区二区小辣椒| 色噜噜偷拍精品综合在线| 欧美激情综合五月色丁香小说| 婷婷一区二区三区| 色av成人天堂桃色av| 久久久久免费观看| 久久电影网站中文字幕| 精品视频1区2区3区| 玉米视频成人免费看| 国产精品69毛片高清亚洲| 日韩美女天天操| 性做久久久久久免费观看| 色婷婷亚洲一区二区三区| 国产精品视频一二| 国产麻豆精品在线观看| 欧美丰满高潮xxxx喷水动漫| 一区二区欧美国产| av一区二区不卡| 欧美激情中文不卡| 国产成人午夜高潮毛片| 久久综合色综合88| 欧美性感一区二区三区| 亚洲色图制服丝袜| 99国产精品国产精品毛片| 国产人伦精品一区二区| 国产精品一区专区| 精品电影一区二区三区| 久久er99精品| 日韩免费视频一区二区| 秋霞电影网一区二区| 91精品国产欧美一区二区18| 天堂影院一区二区| 欧美一区二区精品| 久久机这里只有精品| 精品三级av在线| 精品一区二区三区在线观看国产 | 久久精品国产精品青草| 欧美一区二区三区视频| 麻豆国产一区二区| 精品国产一区二区三区忘忧草| 精品在线你懂的| 精品国产乱码久久久久久老虎| 精品一区中文字幕| 国产三级一区二区| av男人天堂一区| 亚洲欧美视频一区| 国产精品第五页| 91一区二区在线| 亚洲综合在线免费观看| 欧美日韩国产一区| 奇米一区二区三区| 久久奇米777| 成人免费看片app下载| 亚洲三级久久久| 欧美自拍偷拍午夜视频| 日韩高清在线不卡| 久久午夜羞羞影院免费观看| 国产精品一区二区在线看| 国产精品网站在线播放| 97se亚洲国产综合自在线观| 亚洲一二三四区不卡| 91精品一区二区三区久久久久久| 久久国产日韩欧美精品| 中文在线免费一区三区高中清不卡 | 欧美一二三在线| 国产乱妇无码大片在线观看| 亚洲欧洲成人av每日更新| 欧美三级在线视频| 国产一区二区看久久| 亚洲天堂中文字幕| 欧美精品久久久久久久多人混战| 久久99国产乱子伦精品免费| 老司机精品视频导航| 国产片一区二区| 色先锋aa成人| 蜜臀久久99精品久久久久久9| 国产色产综合色产在线视频| 色一情一乱一乱一91av| 麻豆中文一区二区| 中文一区在线播放| 欧美日韩精品高清| 国产激情视频一区二区在线观看 | 国产ts人妖一区二区| 一区二区久久久久| 精品美女在线播放| 色综合久久中文综合久久97 | 日韩欧美国产高清| 成人动漫精品一区二区| 亚洲国产日韩在线一区模特| 欧美videos中文字幕| 91蝌蚪porny九色| 久久草av在线| 樱桃视频在线观看一区| 精品国产乱码久久久久久老虎| 91视视频在线直接观看在线看网页在线看 | 精品国产电影一区二区| 一本久久精品一区二区| 国产精品白丝jk白祙喷水网站| 亚洲国产一区二区在线播放| 久久精品人人做人人爽97| 欧美女孩性生活视频| jlzzjlzz国产精品久久| 寂寞少妇一区二区三区| 亚洲第一久久影院| 国产精品不卡一区| 欧美大片在线观看| 欧美曰成人黄网| av电影在线观看一区| 韩国女主播成人在线| 亚洲国产一区二区三区青草影视| 欧美激情综合在线| 日韩欧美电影一区| 精品视频一区二区三区免费| 99re免费视频精品全部| 国产成人免费视| 久99久精品视频免费观看| 午夜精品福利在线| 亚洲一区免费观看| 亚洲视频网在线直播| 欧美国产乱子伦| 国产亚洲一区二区三区在线观看| 91精品国产综合久久久久久久久久 | 这里只有精品视频在线观看| 97久久超碰国产精品电影| 日韩午夜在线观看| 欧美性生交片4| 91捆绑美女网站| 成人激情开心网| 国产乱妇无码大片在线观看| 久久99精品国产.久久久久| 日本不卡一区二区三区 | 欧美精品日韩一区| 在线看日韩精品电影| 91免费国产在线观看| 99精品视频一区| 99久久综合99久久综合网站| 福利一区二区在线观看| 国产一区高清在线| 精彩视频一区二区三区| 久久99久国产精品黄毛片色诱| 午夜精品福利在线| 偷偷要91色婷婷| 丝袜亚洲另类欧美| 日韩av中文在线观看| 丝袜a∨在线一区二区三区不卡| 丝袜亚洲精品中文字幕一区| 婷婷激情综合网| 日韩精品一二三区| 日本不卡不码高清免费观看 | 久久亚洲私人国产精品va媚药| 精品国产成人在线影院| 精品伦理精品一区| 久久天天做天天爱综合色| 久久这里都是精品| 国产午夜精品理论片a级大结局| 无吗不卡中文字幕| 香蕉影视欧美成人| 日本成人在线看| 狠狠久久亚洲欧美| 懂色中文一区二区在线播放| 99re这里只有精品首页| 色爱区综合激月婷婷| 欧美一区三区四区| 久久亚洲精品小早川怜子|