掃雷___核心滑鼠邏輯

來源:互聯網
上載者:User
滑鼠邏輯是掃雷最核心的部分。我們需要根據當先前滑鼠位置,所在方塊的狀態和曆史狀態,遊戲狀態等等來綜合考慮介面的體現

     所需要的狀態量:
     雷狀態:正常STATE_NORMAL,空STATE_EMPTY,未知STATE_DECKY,未知按下狀態STATE_DECKY_DOWN 紅旗STATE_FLAG     遊戲狀態:等待GS_WAIT 運行GS_RUN 失敗GS_DEAD 成功GS_VICTORY     為了實現方塊體現狀態(未知 正常 紅旗 等)和方塊內部狀態(方塊是否為雷)的獨立 需要分別用兩個量來表示     為了實現滑鼠移動時的動態變化,每一個雷方塊有兩個狀態 原本狀態 和 現在狀態     以下是方塊結構定義     
     這一塊不是很複雜 但是很繁雜 不知道怎麼整理 做的時候是一點一點的改動和修正累積的。     主要就是在實現滑鼠邏輯的時候,會有很多分支:     滑鼠的點擊地區(笑臉地區, 雷地區, 其他地區)     遊戲的狀態(等待開始,運行中,失敗,成功)     當前滑鼠所在的位置的雷方塊m_pNewMine狀態(標識,正常,未知,等)     上一刻滑鼠所在位置的雷方塊m_pOldMine狀態
     這些都涉及到分支,使得程式很難控制每一個分支的流程都能夠得到正確效果,分支的跳出是用break,continue,還是return 以及分支該跳出到哪一層,都會影響到整個程式的結構是否複雜淩亂     由於滑鼠每一次點擊都會對應笑臉的響應 因此改動分支後經常會遇到笑臉狀態異常或者不能恢複等情形。    My Code在整體上肯定是很糟糕淩亂的,很多該劃分的子模組沒有劃分,以及對整個分支流程的控制也很差。     具體滑鼠邏輯可以參見原始碼。原始碼點擊這裡(本人資源分寥寥無幾了,所以...咳 別說我不厚道啊。如果哪位和我一樣窮的話,就留言吧,我發給他,)     http://download.csdn.net/detail/wudaijun/4709630     接下來 我總結一下在滑鼠邏輯控制時遇到的一些問題和得到的教訓     1.如果實現滑鼠對方塊的動態選擇:          每個雷快設定兩個標識域(uState,uOldState)用於恢複 設定兩個成員變數用於表示此刻(m_pNewMine)和上一刻(m_pOldMine)的選取方塊 當滑鼠移動時 按下m_pNewMine並且鬆開m_pOldMine     2.如何擴充雷:          當選中的方塊周圍沒有雷時,對該方塊周圍的方塊進行擴充 如果周圍有雷 則繪製雷的數目 如果沒有 再遞迴擴充該方塊周圍     3.如何得到或相應滑鼠左右鍵同步選取:          在OnLButtonDown或OnRButtonDown中如果nFlags==(MK_LBUTTON|MK_RBUTTON)即可識別。如果要響應其中任何一個鍵鬆開的訊息。可以通過設定一個成員變數m_bLRBtnDown實現,在OnMouseMove中直接判斷並且做相應的事情。而在OnL(R)ButtonUp中 需要立即將其置為假           if(m_bLRBtnDown)          {               m_bLRBtnDown = FALSE;//避免在放開一個鍵後 還在響應雙鍵移動訊息               。。。。          } 
以上所的m_bLRBtnDown的設定與恢複均需要在左鍵和右鍵中同時實現,因為左右鍵的按下和放開不會是絕對同時的,只有在一個左鍵按下後立即按右鍵 才能在右鍵的RButtonDown中得到nFlags==(MK_LBUTTON|MK_RBUTTON) 反之亦然     4.其他一些比較小的邏輯 如邊界處理 勝利與失敗的判定 等等 在雷方塊結構體和一些必要的資訊擷取的函數確認之後都比較簡單 本身不涉及什麼演算法。此處省略

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.