helloPe的android項目實戰之連連看—設計篇

來源:互聯網
上載者:User

  此篇為本系列文章第一篇,只為記下android小項目的是設計,實現過程。本文將首先介紹連連看項目的設計,以及涉及到的相關的內容與項目中所需演算法.

本系列文章記錄只是為了增加android項目實戰經驗,將所學的知識用於相應的項目開發當中。首先介紹一下android中連連看項目的架構及所用到的技術進行簡要分析,架構基本如所示:

本程式主要包含兩大模組:即(1)展示層模組;(2)後台邏輯模組;

其中展示層模組可以理解為遊戲的UI及一些遊戲輔助效果,展示層模組中,重要的是實現遊戲的布局地圖,項目中實現中,遊戲的布局將使用自訂View的方式,在螢幕上貼圖實現。而菜單模組及選關的dialog,只是為使用者提供一些常見的選擇,如重玩,過關繼續,音效開關等等,為了有一個更好的使用者互動環境,dialog的實現將通過自訂dialog的方式。而遊戲音效是MediaPlayer在不同的狀態情境下播放不同的遊戲音效。

後台邏輯模組中,即時對於程式計算的實現與程式各種狀態的監聽,將是整個程式啟動並執行基礎。此模組中將實現對於遊戲剩餘時間限制和遊戲狀態的監聽與處理。對於遊戲剩餘時間的監聽,將開啟單獨的線程進行處理,從而不至於影響主程式邏輯的運行;遊戲的狀態的監控處理中,將會實現對於連通的兩個表徵圖的消除(即遊戲介面的更新),遊戲輸贏的監聽判斷,遊戲暫停與否等(暫停狀態需要同時將剩餘時間暫停,而時間監聽線程需要知道所處狀態,此二者緊密聯絡)。對於本程式中最重要的還是程式中核心演算法模組的實現,在遊戲中,最主要的演算法是判斷兩個選中的表徵圖是否能夠連通,其餘兩個演算法也依賴於此演算法而進行。下面著重介紹一下串連演算法:

  在介紹串連演算法之前,先簡單介紹一下連連看的布局演算法,為了簡單起見,我們使用4*4的棋盤,假設棋子有四種:

首先在程式初始化時,我們先將要載入的圖片在棋盤上按序繪製出來,注意每一種表徵圖我們繪製的時候需要一次性繪製兩次,這樣,才能保重繪製出來的每種表徵圖的個數都是偶數個。假設最初如(1):

                                                 

                                 圖(1)最初繪製                     圖(2)調換後棋盤

這樣繪製後,我們進行一次遍曆,隨機的調換棋盤中的表徵圖(是現有棋盤中的表徵圖之間的調換,並不是更改成為其他的表徵圖)。經過調換的棋盤可能(2)所示這樣就完成了棋盤的初始化,當然我們的棋盤在最外面一層中是不添加表徵圖的,為的是我們連線時候能夠使用最外層畫線,而不會出現穿過表徵圖畫線的情況,棋盤如:

                                             

  現在看看串連演算法的原理:

首先兩個表徵圖能夠串連的充分條件是:(1)兩個表徵圖是相同的;(2)兩個表徵圖之間有一條路相連,其中這條“路上”沒有其他的表徵圖“阻礙”;(3)這一條路不能有兩個以上的拐角;滿足這三個條件即可認為兩個表徵圖是相連通的;對於連通的判斷中,表徵圖連通時有三種情況,分為以下:

(1)直線型:這就是橫向或者是縱向方向判斷即可,這種情況最容易判斷,只要兩者之間沒有其他表徵圖即可,就不多說;

(2)一折型:其實在兩個選中表徵圖確定的兩個對角頂點畫一個矩形,若是其餘兩個頂點中有能夠滿足與兩個選中表徵圖都能夠“直線型”相連的,即可認為此兩個選中表徵圖可以相連,執行個體如下,判斷兩個紅色的表徵圖相連的情況:

                                               

                   一折型的樣本

(3)二折型:對於二折型的判斷是重點。判斷二折型主要是做兩個方向的掃描,即橫向掃描與縱向掃描:

首先說橫向掃描:

                                      

                          需要判斷的兩個紅色表徵圖                進行橫向擴充                              擴充中兩點能夠滿足直線型相連

橫向掃描中:首先將兩個需要判斷的比表徵圖進行橫向的擴充,擴張規則是在沒有遇到其他表徵圖時一直擴充,知道遇到此行的其他表徵圖或者到達棋盤的邊緣,擴充後的點中X表示,如果擴充後的點種能夠存在兩點滿足直線型相連通的情況,即可判斷兩個表徵圖是可以相連通的,連通的畫線也是根據這兩個輔助點相連而成的;

類似的,對於縱向掃描中:

                                     

                           需要判斷的兩個紅色表徵圖                  進行縱向擴充                           擴充中存在兩點能夠滿足”直線型“

連連看串連演算法到此也算完成了,至於hint的協助演算法,判斷當前棋盤是否還有解的演算法都是依賴於次演算法。

    此項目文章下一步將是進行每一個功能模組及演算法的一步步實現。之所以寫本系列的文章,為了記錄android小項目的經曆,增加實戰的能力,做個總結。並不是為了做出多麼新穎的項目,當然也向不少的網友學習了!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.