?

基于MTK的連連看游戲的開發與實現

2012-07-06 13:32匡皓璐易葉青
湖南人文科技學院學報 2012年5期
關鍵詞:手機游戲界面設計圖標

匡皓璐,易葉青

(湖南人文科技學院計算機科學技術系,湖南婁底417000)

由于手機擁有龐大的潛在用戶群體以及便攜性、網絡化等特點,手機游戲的出現就是一個必然的結果[1-2]。手機游戲發展到今天,無論是在種類和內容都有著飛速的發展,現有的手機游戲大體可分為模擬類、戰略類、動作類和益智類等,各類游戲的市場份額如圖1所示。連連看游戲起源于《四川麻將》和《中國龍》,游戲的主要內容是從給出的一堆圖像中尋找相同圖像進項簡單的配對[3]。連連看游戲在PC上實現后,立即吸引了眾多玩家,并迅速傳遍了世界各地[1—4]。

圖1 各類手機游戲的市場份額

由于連連看游戲規則簡單,只要將相同的兩個圖標用三根以內(包括三根)的直線連在一起就可以消除,游戲速度節奏快,畫面可以根據不同類型用戶的需要而設計,清晰可愛,因此比較適合細心、反應敏捷的玩家[5]。多樣式多變化的地圖,使玩家在各個游戲水平都可以找到挑戰的目標,長期保持游戲的新鮮感。連連看游戲也吸引了眾多程序員開發出多種版本。隨著移動通信的飛速發展,各種大屏幕觸摸手機的推出,使得在手機上玩連連看這一類的游戲成為可能,如果在手機上能成功地開發出連連看游戲則必然會受到用戶的青睞。然而不幸的是這種針對傳統PC機的連連看游戲很難直接移植到MTK手機平臺上,這是因為[1-2]:(1)手機的內存容量和處理速度還遠達不到PC機的水平;(2)手機大都采用電池供電其能量受限。

為此,筆者對已有針對PC機的連連看游戲的核心算法和代碼質量進行了優化,并在MTK手機平臺上成功實現了一款連連看游戲軟件。

二 連連看游戲軟件的總體設計

連連看游戲應具有基本功能:圖像處理、聲音處理和事件處理。這些功能均需要在MTK手機上運行(如圖2)。

Windows XP系統下提供的開發環境包括MRE SDK和Microsoft Visual Studio 2008,采用C語言實現圖像處理,聲音處理,調用MTK底層借口實現事件處理等基本功能。實現完成后,在載入MTK手機硬件運行之前,可以在Windows環境進行模擬調試工作。MTK平臺提供的MRE SDK模擬器可以使開發人員省去了在真實手機設備中的測試麻煩,從而提高了應用程序的開發效率。

圖2 連連看游戲的總體方案

關于圖像處理的問題,MTK提供了mimoResourceDrawPairImage和mimoDrawImg FromBuf接口,它們可以實現各種不同格式的圖形的繪制。

關于聲音的處理,MTK提供了 mimoAudio-SetVolume接口,由于不同的手機使用的聲音播放軟件不同,所以支持的聲音格式也不相同。聲音格式有 WMV、MP3、MIDI等,手機支持的聲音格式,可以根據手機型號不同去查閱文檔。

事件處理是通過MTK應用程序中注冊的事件處理函數來處理的。

三 連連看游戲軟件的界面設計

(一)Logo界面設計

Logo界面是應用程序啟動后顯示的第一個界面,目的是展示開發游戲的公司和增加游戲的炫彩效果。在界面中,應用程序在屏幕中間位置繪制了動態圖像,并繪制了動態的進度加載效果,同時提示用戶在游戲過程中可能出現的收費問題。

(二)主菜單界面設計

Logo界面演示完了之后程序自動進入主菜單界面。設計菜單界面的目的是為了對即將運行的游戲做些相關設置,從而產生不同的游戲效果,同時菜單也提供了一些與游戲有關的信息介紹,幫助新老玩家更快的熟悉該游戲。

根據功能需求,菜單主界面包括:開始游戲、聲音設置、美女圖庫(游戲過關的獎勵,第一次進入游戲未過關之前不能選擇)、幫助菜單、以及退出應用游戲。每個菜單項都對應了一個屬于自己的功能界面。只要事件觸發,就會切換到相應界面。游戲主菜單界面的層次結構(如圖3)。

開始游戲:直接進入游戲界面(如圖4),游戲正式開始,游戲界面的設計及事件處理在后面小結介紹。

聲音設置:設置游戲音樂的音量大小。程序中設置5個等級,調用KDE底層的接口函數mimoAudioSetVolume(MIMO_AUDIO_VOLUME_LEVEL level)來實現,參數level代表音量的大小,取值范圍在0-5之間,其中0表示靜音,5表示最大音量。主要事件:觸屏點擊調節音量大小,觸屏點擊返回主菜單。

圖3 主菜單界面

圖4 游戲的游戲界面

美女圖庫:進入美女圖庫查看過關獎勵,每過一關解鎖一張美女圖片,共15張,全部解鎖就通關。第一次進入游戲未過關之前不能選擇,圖標呈灰色狀態。主要事件:觸屏點擊前后翻看美女圖片,觸屏點擊返回主菜單。

幫助菜單:圖片顯示幫助信息,顯示游戲規則,怎樣消除圖片,只處理一個事件,返回主菜單。

退出菜單:關閉應用程序。

(三)游戲界面設計

根據連連看游戲的特點和對用戶需求的分析,游戲界面設計為全屏模式,包括屏幕下方的時間進度條和工具,屏幕中央的游戲區域,以及屏幕下方的返回區域(即暫停),如圖4所示的布局去設計。

游戲界面的主要功能包括時間控制,布局算法,連通算法,繪制屏幕,消除效果動畫,將在以下各小結進行描述(如圖5)。

用戶的每一次有效操作都會觸發一個事件,程序將調用相應的事件處理機制,如連通算法。程序每隔一段時間進行一次刷屏。它將根據當前剩余時間和處理事件時改變了的地圖參數信息,重新繪制屏幕。

圖5 連連看游戲界面功能

用戶的事件操作包括觸屏點擊選中圖片。如果當前選中的是第一個圖形,則不做任何操作,只將該圖形變灰處理,改變結構curPic中的參數。如果選中的是第二個圖表,先判斷選中的是否是相同的圖片,如果是的,就需要進行連通判斷,即調用連通算法mmHavePath。連通的算法的實現后面部分詳細介紹。

四 核心算法的優化

(一)連通算法的優化

在本文的游戲系統中,對已有連連看的連通算法[6-7]進行了優化,減少運算,優化了執行效率,分為以下兩種情況討論:

1.直線連通:兩個圖片的縱坐標或橫坐標相等,且兩者連線間沒有其他圖片阻隔。實現代碼:

if(c1.x==c2.x&& absolute(c1.y -c2.y)= =1||c1.y= =c2.y && absolute(c1.x -c2.x)==1)

return mimoTrue;

2.不相鄰的兩個圖片,分為水平方向和垂直方向:如圖6和圖7,為了找出A,B兩點之間的連接路徑,首先過這兩點作4條線段,線段的兩端便是地圖邊緣,兩條與橫坐標軸平行,另兩條與縱坐標軸平行,先考慮與橫坐標軸平行的兩條。

在兩條線段上各取一點C和D,此兩點處在一條與縱坐標軸平行的直線上,那么,ACDB這條路徑便是一條可能的A,B兩點的連通路徑。

C,D兩點在兩條線段上移動,直到找出一條有效的連通路徑,或者最終得出結論不存在這樣的路徑。

按同樣的方式在與縱坐標軸平行的兩條線段上查找。

圖6 水平方向

圖7 水平方向

兩點的連通路徑應該是最短的,所以,查找從A,B所處的矩形的中線開始,同時從上下左右4個方面查找,可以找到看起來最短的連通路徑.

根據以上說明,可以看出,本游戲系統在連通算法上面相較于外面的連連看游戲連通算法思路更為清晰,也節約了運行時間(如圖8)。

圖8 為連通算法流程圖

(二)游戲地圖布局算法

由于連連看游戲的配對特性,在設計游戲地圖時,一定要保證地圖上生產的小方塊是成對出現的[8]。如10*10的地圖表示地圖每行和每列均含10個地圖塊。每個地圖塊是隨機給予賦值的,而這些值都來自圖像資源編輯時對應的ID號,所以保證了載入的圖像也是隨機的。市面上已經發布的連連看游戲一般都是采用生成隨機地圖,將成對的圖案放進臨時地圖存儲空間中,然后從臨時地圖中取走一個圖案放到空塊上:隨機挑選位置,int nIndex=(int(rand()*0.1+rand()*0.01+rand()))%tmpMap.GetSize();,再將選定的團放到空快上,最后在臨時地圖上刪除該方塊。如果采用這種方法,增加了內存的消耗,而手機因為自身的原因受到內存的限制,所以我對地圖布局的算法進行了優化。為了盡可能保證各種圖像出現機會的均等性,需調用mimoGetRandom函數獲取隨機數。首先,將所有地圖塊分兩部分賦值。第一部分地圖是為地圖的前面一半隨機賦值,而產生地圖種類需要調用mimoGetRandom隨機產生在18—24(一共有24種不同的地圖圖片)之間的一個數。第二部分是在第一部分完成之后,將第一部分的地圖拷貝到整張地圖的后半部分,這樣就滿足了所有的地圖都是成對出現的。最后將整張地圖上面的小方塊隨機排列。

(三)全地圖搜索算法

圖9 兩次連通配對之間的相關操作流程

連連看游戲在每做一次連通配對之后,都有相應的后續操作,目的是為下次連通配對做準備。首先判斷游戲地圖上是否還有未消掉的圖標對,即判斷是否過關。然后需要對剩余的地圖進行搜索,有無可連通圖標對。若有,直接準備下一對圖標的連通,若沒有,則調用重列函數(mmDrawMap_Again),對地圖上尚未配對的剩余圖標重新布局,直到有可連通圖標對為止。游戲在連續兩次連通配對之間的相關操作流程圖(如圖9)。

全地圖搜索可配對圖標算法的實質是對每個地圖塊進行遍歷,相互之間兩兩比較,圖標值相等的話,則調用連通算法,直至找到第一對可連通的圖標,搜索提前結束,對應流程圖中返回true。如果都相互比較了一遍,搜索已經結束——仍無可連通圖標,則返回false,此時,若要想游戲繼續進行,必須調用重列機制,對地圖上的剩余圖標進行重新布局。

至此,我們在MTK平臺上成功完成了連連看游戲的開發工作,游戲在手機模擬器上運轉順暢,也在真機上運行順暢,可以滿足用戶要求。

[1]KENNETH A R.Pointers on C[M].北京:人民郵電出版社,2008.

[2]石民勇,稅琳琳,等.手機游戲設計與制作教程[M].北京:中國傳媒大學大學出版社,2007.

[3]羅偉堅.Visual C++經典游戲程序設計[M].北京:人民郵電出版社,2006.

[4]手機游戲未來發展趨勢預測[EB/OL].http://wenku.baidu. com/view/0e563f335a8102d276a22f35. html,2012.1.

[5]陳凱.三維游戲引擎的設計與實現[D].浙江:浙江大學,2007(6).

[6]楊科選.人工智能尋路算法及其在游戲中的應用研究[D].長沙:中南大學,2009.

[7]張亮亮,夏正友.基于遺傳算法求解游戲關卡問題[J].信息通信,2009,3(1):32 -36.

[8]威爾斯.J2ME游戲編程[M].北京:清華大學出版社,2005.

猜你喜歡
手機游戲界面設計圖標
中醫養生APP界面設計
“共享員工”平臺界面設計
中國傳統元素在界面設計中的應用
面向智能手機的UI界面設計
陜西省大學生手機游戲迷戀度實證分析
Android手機上那些好看的第三方圖標包
讓手機游戲成為傳統文化的傳播新渠道
手機游戲對大學生的負面影響及對策分析
圖標
中國風圖標設計
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合