freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)論文-基于visualc的新版掃雷游戲設計與實現(xiàn)(編輯修改稿)

2025-02-12 22:38 本頁面
 

【文章內(nèi)容簡介】 _RUN) { m_uBtnState = BUTTON_NORMAL。 InvalidateRect(rcBtn)。 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 17 頁 共 28 頁 } } ReleaseCapture()。 CWnd::OnLButtonUp(nFlags, point)。 } 在函數(shù)體的開始部分,先用 rcBtn 和 rcMineArea 兩個矩形變量存儲游戲的用戶提示區(qū)域位置中的笑臉圖區(qū)域以及雷區(qū)域的位置。利用接口函數(shù) PtInRect()判斷當前鼠標的位置(由參數(shù) point 攜帶鼠標當前位置信息)是否在這兩個區(qū)域內(nèi),如果檢測到鼠標左鍵點擊并釋放在笑臉圖的按鈕區(qū)域 rcBtn 上,則調(diào)用初始化函數(shù)重新開始游戲,如果檢測到鼠標左鍵點擊并釋放在雷區(qū)域 rcMineArea,假若當前游戲狀態(tài)處于已初始化完成但尚 未開始的狀態(tài) GS_WAIT 時,則打開計時器,并且調(diào)用 LayMines()函數(shù)進行布雷,然后修改游戲狀態(tài)為 GS_RUN 進入游戲。接著判斷點擊在小方塊的狀態(tài)是否被用于通過右鍵標記(可以標記為雷或者未知,此時游戲規(guī)則規(guī)定左鍵點擊不生效),如果未標記,該狀態(tài)為普通狀態(tài) STATE_NORMAL 時,先通過 IsMine()檢測是否點中地雷而失敗地結束游戲,如果是,則調(diào)用函數(shù) Dead()來進行失敗后的工作處理,反之對它進行打開顯示與拓展操作。先通過 GetAroundNum()函數(shù)獲取當前小方塊相鄰的 8 個位置的雷數(shù)。如果當前 小方塊相鄰區(qū)域的雷數(shù)為 0,則可以向 8 個方向進行拓展,并顯示該方塊區(qū)域,直到不可拓展為止;如果當前小方塊相鄰區(qū)域的雷數(shù)不為0,則顯示該方塊區(qū)域的相鄰雷數(shù),用作提供用戶對其他位置的信息判斷的提示。拓展操作的實現(xiàn)代碼如下。 void CMineWnd::ExpandMines(UINT row, UINT col) { UINT i, j。 UINT minRow = (row == 0) ? 0 : row 1。 UINT maxRow = row + 2。 UINT minCol = (col == 0) ? 0 : col 1。 UINT maxCol = col + 2。 UINT around = GetAroundNum(row, col)。 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 18 頁 共 28 頁 //顯示該區(qū)域的方塊狀態(tài) m_pMines[row][col].uState = 15 around。 m_pMines[row][col].uOldState = 15 around。 // “ 打開 ” 該區(qū)域,重繪 DrawSpecialMine(row, col)。 //對周圍一個雷都沒有的空白區(qū)域 if (around == 0) { for (i = minRow。 i maxRow。 i++) { for (j = minCol。 j maxCol。 j++) {//對于周圍可以拓展的區(qū)域進行的規(guī)拓展 if (!(i == row amp。amp。 j == col) amp。amp。 m_pMines[i][j].uState == STATE_NORMAL amp。amp。 m_pMines[i][j].uAttrib != ATTRIB_MINE) { if (!IsInMineArea(i, j)) continue。 ExpandMines(i, j)。 // 遞歸拓展操作 } } } } } 經(jīng)過打開或拓展后,最后通過 Victory()判斷游戲是否已經(jīng)勝利結束,如果是則作勝利處理。 鼠標右擊事件 其流程如圖 12 所示。 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 19 頁 共 28 頁 圖 12 右擊事件 其實現(xiàn)代碼如下所示。 void CMineWnd::OnRButtonDown(UINT nFlags, CPoint point) { //笑臉圖按鈕所在的區(qū)域 CRect rcBtn(m_uBtnRect[1], 15, m_uBtnRect[2], 39)。 //雷區(qū)所在的區(qū)域 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 ((point)) {//點擊雷區(qū)域 if (m_uGameState == GS_WAIT || m_uGameState == GS_RUN) { 開始 雷方塊定位 判斷歷史屬性以及相關狀態(tài) 修改相關狀態(tài) 顯示 結束 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 20 頁 共 28 頁 m_pNewMine = GetMine(, )。 if (!m_pNewMine) return。 //檢測判斷當前狀態(tài)是否為左右鼠標同時按下 if (nFlags == (MK_LBUTTON | MK_RBUTTON)) { m_bLRBtnDown = TRUE。 OnLRBtnDown(m_pNewMineuRow, m_pNewMineuCol)。 } else { switch(m_pNewMineuState) { //普通狀態(tài) case STATE_NORMAL: m_pNewMineuState = STATE_FLAG。 m_pNewMineuOldState = STATE_FLAG。 m_nLeaveNum。 break。 //標記狀態(tài) case STATE_FLAG: m_pNewMineuState = STATE_DICEY。 m_pNewMineuOldState = STATE_DICEY。 m_nLeaveNum++。 break。 //未知狀態(tài) case STATE_DICEY: m_pNewMineuState = STATE_NORMAL。 m_pNewMineuOldState = STATE_NORMAL。 break。 default: 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 21 頁 共 28 頁 break。 } } Invalidate()。 } } CWnd::OnRButtonDown(nFlags, point)。 } 繪圖界面的設計 ( 1) 雷區(qū)、笑臉模塊的繪制 添加三個位圖資源如圖 13 所示。 圖 13 位圖的繪制 ID 分別為 ID_BTN_COLOR、 ID_MINE_COLOR、 ID_NUM_COLOR,并分別添加三個位圖類型的變量,然后調(diào)用 LoadBitmap(UINT nIDResource)函數(shù)來實現(xiàn)位圖 資源與變量的關聯(lián)并添加函數(shù) DrawButton()、 DrawMineArea()、 DrawNumber()分別實現(xiàn)笑臉按鈕、雷區(qū)、數(shù)字圖像 (計時器數(shù)字和剩余雷數(shù)數(shù)字 )的繪圖。繪制雷區(qū)的函數(shù)DrawMineArea()的實現(xiàn)代碼如下。繪制笑臉按鈕的函數(shù)實現(xiàn)類似。 void CMineWnd::DrawMineArea(CPaintDC amp。dc) { CDC dcMemory。 //用作內(nèi)存設備 //源設備 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 22 頁 共 28 頁 (amp。dc)。 //使得這個設備與 dc 兼容 //dc 是目標設備 (m_bmpMine)。 //將內(nèi)存設備與位圖資源關聯(lián) for (UINT i = 0。 im_uYNum。 i++) { for (UINT j = 0。 jm_uXNum。 j++) {//根據(jù) [i][j]區(qū)域的雷方塊狀態(tài)拷貝相應的圖像到 [i][j]雷區(qū)的特定區(qū)域 (MINEAREA_FRAME_X+16*j, MINEAREA_FRAME_Y+16*i, 16, 16, amp。dcMemory, 0, 16*m_pMines[i][j].uState, 16, 16, SRCCOPY)。 } } } ( 2) 3D 效果外殼模塊的繪制 首先調(diào)用 FillSolidRect()在框架的左部和頂部分別繪制 2 個小白條,這樣看起來有點立體的,然后調(diào)用 Draw3dRect()在笑臉以及計時顯示區(qū)域周圍繪上一個較小的3D 邊框,最后在雷區(qū)周圍繪上一個較大的 3D 邊框。 3D 效果外殼繪制結果顯示如圖16。 ( 3) 數(shù)字模塊的繪制 數(shù)字圖像的繪制不是由鼠標事件觸發(fā)的,而是由系統(tǒng)時間觸發(fā)的。首先在CMineWnd 類中添加定時器標識的成員變量 m_uTimer 和一個記錄游戲開始直到目前所花費的時間的成員變量 m_uSpendTime。接著在游戲的開始函數(shù)布下時間種子,時間間隔為 1000us,然后選擇到預定時間間隔后發(fā)送 Windows 命令消息函數(shù)WM_TIMER。接著在 CMineWnd 類中找到對應的消息 WM_TIMER,并為其添加重寫函數(shù) OnTimer(),該函數(shù)首先判斷這次的 WM_TIMER 命令是否為所布下的時間種子到時而產(chǎn)生的,如果是則讓使用的時間變量 m_uSpendTime 自增,然后通知系統(tǒng)重繪圖像。 雷區(qū)、 笑臉按鈕、 3D 效果外殼和數(shù)字圖像的繪制都是在 OnPaint()函數(shù)中實現(xiàn)的。其函數(shù)代碼如下所示。 void CMineWnd::OnPaint() 淮陰工學院畢業(yè)設計 說明書 ( 論 文 ) 第 23 頁 共 28 頁 { CPaintDC dc(this)。 //創(chuàng)建一
點擊復制文檔內(nèi)容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1