Android 2048遊戲開發

來源:互聯網
上載者:User

標籤:

根據教程寫的簡單的2048遊戲。

極客學院教程地址:http://www.jikexueyuan.com/course/43.html

我的原始碼地址:https://github.com/myCodingTrip/2048Game

項目有3個類。

Card extends FrameLayout{

private int num;

private TextView label;

       public Card(Context context)

       public int getNum()

       public void setNum(int num)

       public boolean equals(Card o)

}

自訂概念:

1 num不為0的Card稱為卡片,在遊戲中顯示num(2^n)。

2 num為0的Card稱為空白卡片,0是不顯示的。

3 存放Card的容器成為格子。

 

介面+互動

GameView extends GridLayout{

private Card[][] cardsMap = new Card[4][4];

private List<Point> emptyPoints = new ArrayList<Point>();

 

public GameView(Context context, AttributeSet attrs, int defStyleAttr)

public GameView(Context context)

public GameView(Context context, AttributeSet attrs)

 

private void initGameView()

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

private void addCards(int cardWidth, int cardHeight)

private void startGame()

private void addRandomNum()

 

private void swipeLeft()

private void swipeRight()

private void swipeUp()

private void swipeDown()

 

private void checkComplete()

}

 

public GameView(Context context, AttributeSet attrs, int defStyleAttr)

public GameView(Context context)

public GameView(Context context, AttributeSet attrs)

構造方法,調用initGameView()方法。

 

private void initGameView()

用於初始化遊戲,通過調用setOnTouchListener並重寫其中的public boolean onTouch(View v, MotionEvent event)方法調用swipeLeft()、swipeRight()、swipeUp()、swipeDown()四個方法來定義程式與使用者的互動。

 

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh)

該方法先計算出每個小格子的邊長cardWidth,然後調用addCards(cardWidth, cardWidth)、 startGame();

 

private void addCards(int cardWidth, int cardHeight)

通過迴圈調用addView(c, cardWidth, cardHeight)來添加16張空卡片

 

private void startGame()

用於(重新)開始遊戲,首先調用MainActivity.getMainactivity().clearScore()清零分數,然後將16個Card的數字設定為0,即添加16張空卡片,然後調用2次addRandomNum()方法。

 

swipeLeft()、swipeRight()、swipeUp()、swipeDown()

這四個方法是遊戲的主要邏輯部分,包含卡片的移動和合并的邏輯,例如向左劃調用的swipeLeft()方法原理是從左向右(上下順序隨意)搜尋判斷是否可以移動(左邊一張空卡片右邊一張卡片)或者合并(存在兩張num相等的卡片),通過改變16張Card的num來達到視覺上移動、合并卡片的效果,如果發生了卡片的移動或合并,則調用addRandomNum()、checkComplete()這兩個方法。

 

private void checkComplete()

用於檢查遊戲是否結束,條件是16個Card的num都不為0並且無卡片合并的可能,如果結束則彈出一個系統層級的對話方塊,可調用startGame()重新開始遊戲。

 

private void addRandomNum()

首先統計出所有格子中的空卡片,然後隨機找出一個空卡片修改其數值(90%為2,10%為4),使其變成卡片。

 

MainActivity extends Activity{

    private int score = 0;

    private TextView tvScore;

private static MainActivity mainactivity = null;

 

public static MainActivity getMainactivity()

@Override

protected void onCreate(Bundle savedInstanceState)

@Override

public boolean onCreateOptionsMenu(Menu menu)

public void clearScore()

public void showScore()

public void addScore(int s)

}

 

public static MainActivity getMainactivity()

使得GameView可以修改MainActivity上的score

 

 

Android 2048遊戲開發

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.