AIR Android:游戲的設計思路
第一個AIR Android程序:翻轉黑白棋
之前介紹了開發(fā)環(huán)境的搭建,按照計算機應用開發(fā)慣例,應該是“HelloWorld”出場的時間了??紤]到并不是講述編程語言的基礎教程,而是側重于實踐,所以,我們跳過簡單的“HelloWorld”,來看一個更復雜的實例。
本文將編寫一個完整的移動小游戲,并把它部署在手機上。因此,我們將親歷一個移動程序完整的誕生過程,從程序設計、代碼編寫,到最后的安裝。在這個過程中會涉及很多Android開發(fā)的技術細節(jié),讀者也可以近距離感受AIR帶來的開發(fā)樂趣。
游戲的設計思路
在當前的Flash程序中,休閑類游戲占了很大的比重。這類游戲一般體積小,玩法簡單,但有創(chuàng)意,容易吸引用戶。從技術角度看,休閑游戲的特點非常適合移動平臺,事實也證明了這一點。不管是在Google電子市場上,還是在蘋果的App Store上,休閑類游戲都占據(jù)了很大的比例??梢灶A見,在未來一段時間內(nèi),眾多網(wǎng)絡上的Flash游戲將被移植到移動設備上。
翻轉黑白棋是一個經(jīng)典的智力游戲,筆者最早見到的版本是由國外的Terry Paton出品的,原名FlipIt。該游戲推出后便風靡一時,在Google電子市場、蘋果的App Store上都有相應版本發(fā)布。
游戲規(guī)則非常簡單:在棋盤上整齊地排列著若干個棋子,分為黑白兩色。玩家單擊任意一個棋子,該棋子會翻轉為相反的顏色;同時相鄰的棋子也跟著翻轉,如圖2-1所示。當棋子全部變?yōu)榘咨珪r,則勝利過關。當然,所用的單擊次數(shù)越少成績越好。
![]() |
圖2-1 翻轉黑白棋游戲 |
雖然初看很簡單,但真正玩起來卻很有難度,特別是在大尺寸的棋盤上,如果不掌握一些技巧,可能玩一天也過不了關。
從技術角度分析,該游戲唯一難點可能在于如何動態(tài)生成棋盤地圖,并控制地圖的難易度。在網(wǎng)絡上已經(jīng)有不少相關的討論,比如有人使用線性方程組來求解。游戲算法的討論不在本書范圍內(nèi),筆者這里直接借鑒了原游戲中的一個關卡,使用的棋盤為4×4大小,模擬的效果如圖2-2所示。
![]() |
圖2-2 棋盤模擬效果圖 |
地圖問題解決了,接下來開始設計游戲的結構。在程序運行期間,只有一種用戶交互動作,即單擊事件。因此整個游戲的邏輯很清楚,運行流程可以分以下兩步。
步驟1 按照已有的地圖數(shù)據(jù)繪制棋盤,進入待機狀態(tài)。
地圖數(shù)據(jù)可以用一個4×4的二維矩陣來表示,每個值分別代表了初始狀態(tài)下對應位置的棋子的顏色,如圖2-3所示。由于只有黑白兩色,棋子的狀態(tài)可以簡單地用布爾值來表示,即false代表黑色,true代表白色。每次單擊棋子時對要翻轉的棋子做邏輯非處理。
![]() |
圖2-3 用矩陣描述棋盤 |
在繪制地圖時,根據(jù)每個值在矩陣中的索引位置,可以很方便地對棋子進行布局。
步驟2 處理用戶單擊事件。
每次單擊任一棋子時,將它翻轉,同時翻轉四周的棋子。在處理四周的棋子時,要注意判斷周圍的哪些棋子是有效的,比如,如果單擊的棋子已經(jīng)在最左側了,那么其左邊是沒有相鄰棋子的。用戶單擊后棋盤上的棋子狀態(tài)發(fā)生了變化,因此,需要判斷所有棋子是否已是白色。如果是,則過關了,游戲結束。
到這里,相信讀者對游戲的制作思路已經(jīng)了然于胸了,剩下的工作就是編寫代碼,把整個過程呈現(xiàn)出來。