1. 程式人生 > >2048遊戲程式碼邏輯分析

2048遊戲程式碼邏輯分析

從主類開始走:

  -->MainActivity-->找到一些控制元件-->點選開始按鈕時執行GameView中的startGame()方法
                                                             |
                                                            \|/
                                                      執行MainActivity的clearScore方法,分數的textview清空,並顯示結果。
                                                      執行 showBestScore方法,在顯示最高紀錄的textview中從sd卡中調出儲存的最大紀錄並顯示出來
                                                      將所有自定義的Card的初始值都定為0。
                                                      呼叫addRandomNum()將所有的Card的值為0的卡片通過陣列的X,Y座標一一對應的儲存到list裡面。
                                                      在為空的Card的view處隨機消除兩個,然後在消除的地方產生兩個Card,值為2或者4。
                                                      在生成Card的時候,會呼叫createScaleTo1()方法,為生成的Card新增動畫效果。
                                                      
 初始化完成之後,我們在點選螢幕的時候會觸發OnTouchListener()方法,(通過落下點的座標和擡起手指的座標的計算判斷出手指的方向)
 
 向左移動: 執行swipeLeft();
 向右移動: 執行swipeRight();
 向上移動: 執行swipeUp();
 向下移動: 執行swipeDown();
 
 拿一個向左移動的例子來講解:
  1.遇到左邊的值為0的情況:
    首先將所有的card的值遍歷一遍,如果x1的值大於0,並且它左邊的值為0,那麼呼叫AnimLayer裡面的createMoveAnim()方法
                                                                              |
                                                                             \|/
                                                   將x1的Card的view佈局的寬和高都變成0,觸發了LinearLayout的onSizeChanged()方法,
                                 \|/
                    Config.CARD_WIDTH = (Math.min(w, h) - 10) / Config.LINES;此值會發生改變
                                                  接著呼叫TranslateAnimation()方法,移動Card到目的Card處,並且呼叫recycleCard()方法回收原來X1處的位置,因為此時這裡變成了0,將此處新增到專門儲存0值的list裡面
  2.遇到左邊的值不為0的情況:
    多了兩步,一,將目的Card的值*2
                       二,呼叫addScore()方法,將目的Card的值加到顯示分數的那個TextView那裡。