【正文】
a語(yǔ)言成為程序員首選的程序設(shè)計(jì)開(kāi)發(fā)工具就在情理之中了。本程序?qū)⑺哪陙?lái)所學(xué)的專(zhuān)業(yè)知識(shí)和其他方面的知識(shí)融入到實(shí)際應(yīng)用中。游戲速度節(jié)奏快,畫(huà)面清晰可愛(ài)。鑒于現(xiàn)階段Android游戲研究開(kāi)發(fā)的人數(shù)較少,游戲產(chǎn)品數(shù)量也較小的現(xiàn)狀,對(duì)Android游戲的研究具有很大的意義,不僅僅需要研究Android游戲開(kāi)發(fā)中的圖形圖像、人工智能等關(guān)鍵技術(shù),更重要的是研究Android游戲的開(kāi)發(fā)框架,以及Android游戲開(kāi)發(fā)不同于別的平臺(tái)游戲開(kāi)發(fā)的相關(guān)技術(shù)實(shí)現(xiàn)等內(nèi)容。為此已經(jīng)有越來(lái)越多的研發(fā)機(jī)構(gòu)或部門(mén)著手研究開(kāi)發(fā)手機(jī)應(yīng)用軟件。4) 開(kāi)發(fā)手機(jī)軟件不受任何限制Android平臺(tái)提供給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境。開(kāi)放的平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的手機(jī)。當(dāng)然,也有其它的方法使得這些文件同樣能為別的應(yīng)用程序所訪問(wèn)。應(yīng)用程序可以輕松地嵌入HTML、JavaScript和樣式表,還可以通過(guò)WebView顯示網(wǎng)絡(luò)內(nèi)容;5) 應(yīng)用程序可以并行運(yùn)行。后臺(tái)服務(wù)Service。View也包含一些子類(lèi),如:TextView(布局文件中的文本顯示)、EditText(布局文件中的文本編輯)、Button(按鈕)、ListView(顯示列表)。并采用較符合商用限制的Apache 版權(quán)。這些函數(shù)庫(kù)包括::標(biāo)準(zhǔn)C函數(shù)庫(kù)、媒體功能庫(kù)、瀏覽器引擎、2D和3D圖形庫(kù)等[2]。Android軟件平臺(tái)主要由五部分構(gòu)成,它們分別是:關(guān)鍵應(yīng)用程序、應(yīng)用程序框架和組件、C/C ++函數(shù)庫(kù)、Java程序運(yùn)行環(huán)境、優(yōu)化了的Linux內(nèi)核。 Android技術(shù)簡(jiǎn)介 Android基本知識(shí)Android是Google開(kāi)發(fā)的基于Linux平臺(tái)的開(kāi)源手機(jī)操作系統(tǒng)。第三章為需求分析與系統(tǒng)概要設(shè)計(jì)。通過(guò)完成一個(gè)比較完善的安卓游戲,我對(duì)圖像編輯、程序設(shè)計(jì)等各方面的知識(shí)有了更深的理解,也為以后的工作和學(xué)習(xí)打下了很好的鋪墊。如水晶連連看、果蔬連連看等,流行的水晶連連看以華麗界面吸引了一大批玩家。而在中國(guó),根據(jù)易觀智庫(kù)產(chǎn)業(yè)數(shù)據(jù)庫(kù)最新發(fā)布的《2010 年第4季度中國(guó)手機(jī)游戲市場(chǎng)季度監(jiān)測(cè)》數(shù)據(jù)顯示, 億元,繼續(xù)保持了較快的發(fā)展。從不同角度來(lái)說(shuō),Android 代表著一個(gè)嶄新的開(kāi)放原始碼作業(yè)系統(tǒng)平臺(tái)、一個(gè)友善的免費(fèi)應(yīng)用程式開(kāi)發(fā)環(huán)境、一個(gè)與世界各地的程式開(kāi)發(fā)者,站在相同起跑點(diǎn)上的公平競(jìng)爭(zhēng)機(jī)會(huì)。Android平臺(tái)支援各種先進(jìn)的網(wǎng)路,具備繪圖、3D 處理等能力,可以給使用者提供更好的體驗(yàn)。Android是一個(gè)基于Linux 核心(kernel)的開(kāi)放手機(jī)平臺(tái)作業(yè)系統(tǒng)。最后,就是最關(guān)鍵的算法設(shè)計(jì)部分了,論文詳細(xì)介紹該游戲涉及到的算法:游戲布局算法、連通算法和僵局判定算法。在對(duì)系統(tǒng)進(jìn)行詳細(xì)需求分析的基礎(chǔ)上,確定了系統(tǒng)的功能和性能要求,對(duì)游戲的菜單界面、屏幕繪制、時(shí)間控制、布局算法、連通算法、關(guān)卡設(shè)置、音效和動(dòng)畫(huà)進(jìn)行了詳細(xì)設(shè)計(jì)。s menu interface, screen drawing, time control, layout algorithm, connectivity algorithm, level set, sound and animation have been detail designed. In the detailed design stage of the game. At first, we have to build the necessary environment for the development of a good game, including download and install Eclipse development environment downloading and intall ADT Extensions. After we have built the development environment, then we have to achieve single function of the game. These functions including eliminating after connected, game countdowned to start the game, pausing the game and selecting game modes. And then customize the game view that can display pictures according to the layout of the data provided by the controller, and provide functions includeing selected highlights, connections and elimination. Then, we would design the game controller which implements the main control logic. Finally, there is the most critical part that is the algorithm design, in this thesis we describe the algorithms involved in the game including Game layout algorithm, connectivity algorithms and deadlock decision algorithm. After pleting these steps, a userfriendly, efficient and stable and entertaining puzzle game called lianliankan has been realized. Key words: Android;Java;Game;Algorithms;Puzzle IV 第一章 緒 論第一章主要是對(duì)課題的總體介紹,包括課題的背景資料簡(jiǎn)介、國(guó)內(nèi)外一些研究的現(xiàn)狀成果外,還深入地介紹了課題研究的價(jià)值以及對(duì)未來(lái)的影響,為本系統(tǒng)的編寫(xiě)調(diào)試提供了強(qiáng)大的理論依據(jù)。Android作業(yè)系統(tǒng)讓設(shè)備制造商免除每出一臺(tái)手機(jī),就得被手機(jī)作業(yè)系統(tǒng)廠商限制的情況。當(dāng)用戶想換一臺(tái)手機(jī)時(shí),就可以在同樣使用Android作業(yè)系統(tǒng)平臺(tái)的不同廠牌手機(jī)之間選擇,并且很容易地將聯(lián)絡(luò)簿等個(gè)人資料轉(zhuǎn)換到新手機(jī)上。 手機(jī)游戲(Mobile Game或Wireless Game),是指消費(fèi)者利用隨身攜帶并具有無(wú)線網(wǎng)絡(luò)聯(lián)機(jī)功能的智能移動(dòng)終端設(shè)備,能隨時(shí)隨地來(lái)進(jìn)行的游戲。經(jīng)過(guò)多年的發(fā)展,第三代數(shù)字通信(3G)技術(shù)獲得了廣泛的接受,它為移動(dòng)終端用戶帶來(lái)了更快的數(shù)據(jù)傳輸速率。連連看與個(gè)人空間相結(jié)合,被快速的傳播,成為一款熱門(mén)的社交游戲,其中以開(kāi)發(fā)者Jonevey在Manyou開(kāi)放平臺(tái)上推出的寵物連連看最為流行。包括課題的背景資料簡(jiǎn)介、國(guó)內(nèi)外研究現(xiàn)狀、深入地介紹了課題研究的價(jià)值以及對(duì)未來(lái)的影響。這部分主要介紹了連連看游戲的各個(gè)功能是如何實(shí)現(xiàn)的,描述了系統(tǒng)的設(shè)計(jì)理念、基本流程和風(fēng)格定位,展示了各個(gè)模塊的模型和界面圖,全面深刻的解析了游戲所具有的全部功能及其實(shí)現(xiàn)的方法。Android作為Google企業(yè)戰(zhàn)略的重要組成部分,將進(jìn)一步推進(jìn)“隨時(shí)隨地為每個(gè)人提供信息”這一企業(yè)目標(biāo)的實(shí)現(xiàn),Google的目標(biāo)是讓移動(dòng)通信不依賴于設(shè)備甚至是平臺(tái)。應(yīng)用程序框架及組件。Linux內(nèi)核。Activity具有生命周期,它包含運(yùn)行、暫停、停止等幾個(gè)狀態(tài),狀態(tài)間的轉(zhuǎn)換可通過(guò)調(diào)用onCreate()、onStart()、onRestart()、onResume()、onFreeze()、onPause()、onStop()、onDestory()等方法來(lái)實(shí)現(xiàn)。Intent最重要的作用還是加載activity,它是不同activity間的橋梁。 Android系統(tǒng)特點(diǎn)Android系統(tǒng)具有如下5個(gè)特點(diǎn):1) 開(kāi)放性。每個(gè)Android應(yīng)用程序都存在于它自己的世界之中:默認(rèn)情況下,每個(gè)應(yīng)用程序均運(yùn)行于它自己的Linux進(jìn)程中。 Android手機(jī)平臺(tái)的優(yōu)勢(shì)現(xiàn)在常見(jiàn)的智能手機(jī)平臺(tái)有:Symbian、Windows Mobile、PALM、Blackberry、iOS等。隨著EDGE、HSDPA這些2G至3G移動(dòng)網(wǎng)絡(luò)的逐步過(guò)渡和提升,手機(jī)隨意接入網(wǎng)絡(luò)已不再是運(yùn)營(yíng)商口中的笑談。5) 無(wú)縫結(jié)合的Google應(yīng)用如今叱咤互聯(lián)網(wǎng)的Google已經(jīng)走過(guò)了10年度的歷史。Android平臺(tái)上的游戲相比應(yīng)用軟件,不需要進(jìn)行嚴(yán)格的市場(chǎng)細(xì)分,不需要針對(duì)目標(biāo)用戶量身定制。在這一前提下,手機(jī)終端游戲的開(kāi)發(fā)成了熱門(mén)行業(yè)。游戲制作的目的是滿足了人們休閑的需要,在緊張工作之余休閑類(lèi)的小游戲能夠給人帶來(lái)最大程度的放松,也可以增進(jìn)人們之間的交流、溝通,通過(guò)游戲還可以認(rèn)識(shí)更多的朋友。進(jìn)行開(kāi)發(fā)前先要建立合適的開(kāi)發(fā)環(huán)境,其中基于Java的整合型可擴(kuò)展平臺(tái)Eclipse是我們的首選。另外現(xiàn)在熱炒的RIA富客戶端的概念下的技術(shù)除了AJAX外還有Adobe的Flash/Flex,微軟的Silver Light,SUN的JavaFX等,個(gè)人更看好Flash/Flex,原因是Flash插件在瀏覽器端占用率很高[10]。當(dāng)然還有Java SE 。JavaME(Java Platform,Micro Edition)這個(gè)版本以前叫做J2ME。這一決定保證了游戲的正常完成,同時(shí)也是考慮到了制作時(shí)間的限制。它完全符合面向?qū)ο缶幊痰囊螅蟠蟮奶嵘顺绦蚓帉?xiě)的能力。畢業(yè)設(shè)計(jì)是基于一般的連連看游戲規(guī)則與游戲模式完成的。這個(gè)環(huán)節(jié)保障了該游戲的可玩性和人性化設(shè)計(jì)。游戲開(kāi)始以及游戲暫停功能。如果玩家臨時(shí)有事需要暫停游戲。游戲開(kāi)始時(shí),時(shí)間顯示100秒。玩家在游戲過(guò)程中,可以點(diǎn)擊菜單按鈕,選擇重新開(kāi)始游戲、重新排列圖片和退出游戲。如果產(chǎn)生死鎖,系統(tǒng)給予提示,玩家可以通過(guò)點(diǎn)擊按鈕重新生成游戲布局并繼續(xù)游戲。本次系統(tǒng)設(shè)計(jì)總共分為四個(gè)模塊:菜單設(shè)計(jì)、界面設(shè)計(jì)、算法設(shè)計(jì)和消息響應(yīng)設(shè)計(jì):菜單設(shè)計(jì)。本次設(shè)計(jì)的連連看游戲主要設(shè)計(jì)到一下三個(gè)核心算法:游戲布局、連通算法、僵局判定算法。根據(jù)連連看規(guī)則,其可以連接必須符合兩個(gè)圖片的畫(huà)面一樣,而且兩個(gè)圖片所在位置之間連線的轉(zhuǎn)折點(diǎn)不能超過(guò)兩個(gè)也就是連線不能超過(guò)三條線。對(duì)游戲UI、核心算法進(jìn)行了詳細(xì)的解釋。下載完同樣先解壓縮到適當(dāng)目錄下。選擇HelpSoftware Updates選項(xiàng),這選項(xiàng)會(huì)帶出一個(gè)新視窗。將解壓縮后的Android SDK檔案夾命名為Android_sdk。本程序選擇的是豎直布局。WRAP_CONTENT意味著當(dāng)前View的大小只需要包裹住View里邊的內(nèi)容即可[20]。state變量被初始化為STATE_MENU,這是程序最初始的菜單。將這些變量定義為靜態(tài)變量,只要程序進(jìn)程不退出,每次用戶進(jìn)入程序時(shí)都可重復(fù)使用這些變量資源,這樣程序的狀態(tài)可以記錄下來(lái),圖標(biāo)資源也只需要加載一次。for(int i=0。 連連看在游戲中點(diǎn)擊圖標(biāo)后的界面上圖為單擊動(dòng)物頭像的游戲界面,可以明顯地看到圖片四周出現(xiàn)紅色準(zhǔn)心。用戶在規(guī)定的時(shí)間內(nèi)沒(méi)有完成游戲,此時(shí)剩余時(shí)間remainTime=0,則STATE_LOSE賦給state,系統(tǒng)得知要顯示游戲失敗的界面,程序回到菜單,提示游戲失敗,并可以選擇開(kāi)始新游戲或退出,同時(shí)播放music2這一段比較憂傷的背景音樂(lè)。所以當(dāng)我們點(diǎn)擊再玩一遍時(shí),游戲又重新加載一次圖標(biāo)資源,重新進(jìn)入了初始化布局界面。Map數(shù)組是游戲的布局?jǐn)?shù)組,在前面的算法介紹中提到過(guò),是帶邊界的,而邊界如果在界面中與其他位置統(tǒng)一處理會(huì)浪費(fèi)很多屏幕空間,因此通過(guò)offsetX、offsetY變量來(lái)調(diào)整。因?yàn)檫吔绮恍枰@么寬,需要將圖片橫坐標(biāo)向左移的距離為兩者之差。我們提供的index2screen方法轉(zhuǎn)換出來(lái)的是對(duì)應(yīng)位置的圖片的左上角坐標(biāo),需要取中間的坐標(biāo)。OnItem ClickListener是個(gè)接口。這個(gè)監(jiān)聽(tīng)者是在控制器中實(shí)現(xiàn)的,后面將會(huì)看到。這個(gè)變量上面提到的自定義的視圖,用它來(lái)呈現(xiàn)游戲界面。由于Timer會(huì)另起一個(gè)線程,而刷新界面需要在UI線程中執(zhí)行,所以程序用到了Handler。還需要更新剩余時(shí)間,剩余時(shí)間的計(jì)算方法remainTime=totalTime((()startTime)/1000);剩余時(shí)間的計(jì)算方法,得除以1000才是秒計(jì)時(shí)。如果你想對(duì)游戲數(shù)據(jù)持久化,除了activity中的游戲狀態(tài)還需要保存控制其中的map以及remainTime變量。 char column。 struct _CELL_NODE *next。如果是路徑節(jié)點(diǎn),則value為1;如果是圖案節(jié)點(diǎn),其范圍為[0,Enum],在本次設(shè)計(jì)的瘋狂連連看中 Enum的數(shù)值為所有配對(duì)的可消除圖案組數(shù)目。typedef struct _CELL_LIST{int count。隨著游戲的進(jìn)展,節(jié)點(diǎn)將逐漸從列表中移除,從而成為“路徑”節(jié)點(diǎn);在某些游戲模式中,例如左移或右移模式,隨著游戲的進(jìn)展,有些節(jié)點(diǎn)會(huì)在列表之間移動(dòng);最終游戲結(jié)束時(shí)該鏈表為空;該鏈表的作用有三個(gè):一是初始化游戲布局時(shí);二是在需要判斷游戲是否“死鎖”時(shí);三是發(fā)生“死鎖”需要重新生成游戲布局時(shí)。 連通算法本次設(shè)計(jì)的“連連看”中的連通,分為一線連通、二線連通和三線連通:1) 一線連通其充分必要條件是:a兩節(jié)點(diǎn)同行或同列;int column2 = secondcolumn。 //同行,根據(jù)兩節(jié)點(diǎn)的左右關(guān)系計(jì)算從firstsecond的步長(zhǎng)。return ONE_LINE_CONNECT。 b. 兩節(jié)點(diǎn)的拐角節(jié)點(diǎn)是路徑節(jié)點(diǎn);{//判斷拐角節(jié)點(diǎn)與兩節(jié)點(diǎn)是否可以一線連通。amp。A與C可以一線連通, B與D可以一線連通;c. C與D可以一線連通。corner1, amp