編輯:Android游戲開發
上一節中,我們已經成功的將卡牌添加到了游戲中,但只是顯示在了界面上,並沒有保存下來。我們在GameView中定義一個二維數組用來保存游戲界面的卡牌。
![]()
接下來,我們需要將初始化時候添加的卡片添加到cardMap數組中,如下圖所示:

這樣一來,我們就將游戲界面記錄下來了。
但是上一節中,我們一下子就生成了16張卡片,這和平時游戲的時候不一致。而且我們只能生成卡片2。為了改進它,我們可以定義一個函數addRandomNumber,表示每次生成的數字(這裡我們設置生成2和4的概率為9:1):

這裡用到了一個emptyPoints變量,我們需要定義如下:
![]()
除此之外,我們還看到在上面的程序中,我們使用0表示空點,但是我們並不希望0顯示在我們的游戲中,因此修改Card類的SetNumber函數如下:

同時,我們需要修改GameView中的addCards函數,使得一開始都生成空點:

接下來,我們可以開始游戲了,首先定義一個startGame函數,同時在onSizeChanged事件中調用它,如下圖所示:

同時,定義startGame函數如下圖所示:

運行查看結果,如下圖所示:

接下來,我們需要實現游戲的邏輯,也就是方塊的合並。我們需要操作MoveLeft等四個函數。如下圖所示:

接下來的三個方向的移動只需要對上面的代碼進行稍微修改即可,MoveRight如下圖所示:

MoveUp函數如下圖所示:

MoveDown函數如下圖所示:

至此,我們的移動功能已基本完成,測試如下:

最後,我們來完成積分的模塊,每次操作得分都等於合並方塊的數字之和。切換到MainActivy類,添加以下代碼以獲取tvScore這個標簽:

接下去,為了能夠在外界操作MainActivy中的tvScore,我們修改代碼如下:

最後添加計分變量以及相關的操作函數:

接下去,切換到GameView中,將下面的代碼添加到四個移動操作的相應位置:

接下來,我們需要在開始的時候清空分數:

運行測試:

接下去,我們需要在每次操作後都添加新的卡片:

其它三種情況請讀者自行根據上述代碼進行修改。測試結果如下圖所示:

最後,我們還需要判斷游戲是否結束。游戲結束的條件是沒有空位並且無法繼續合並。定義一個函數checkGame,如下圖所示,並且在所有移動後添加新卡片時都調用一次:

checkGame函數實現如下:

至此,游戲的基本框架都已經全部完成,我們將在下一節中介紹分數的保存以及界面的美化。
Android游戲開發教程之十二:處理按鍵的響應
1. onKeyDown 方法 onKeyDown 方法是KeyEvent.Callback 接口中的一個抽象方法,重寫onKeyDown 方法可
Android五子棋游戲開發實戰的親身經驗之一
在教你開發一個簡單的五子棋游戲中分享了五子棋游戲的開發方法,本文開始為大家分享
Android游戲開發教程:手把手教你寫跳躍類游戲(一)
前言: 看了不少Andriod游戲開發方面的博客,發現大多都是講解某一方面的知識,沒有一個完整的開發教程。 所以我就寫了這樣一個系列的博客,完整
Android游戲開發教程之八:數據庫SQLite
數據庫SQLite介紹 數據庫最經典的四個操作 添加、刪除、修改、查找,在處理大量數據的時候使用