前一段時間迷戀玩手遊2048,週末無聊,就想着本身實現一個。源代碼在「我分享的代碼」中。下面是遊戲的設計思路。數組
在設計的時候將整個程序分爲兩個部分,遊戲模型部分和界面展現交互部分。
遊戲模型部分主要是處理整個遊戲的執行邏輯,首先介紹一下2048的遊戲規則,根據用戶滑動的方向,界面上的全部數字塊會向那個方向靠邊,而且將相同的數字合併,合併的數字越大,分數越高。例如向上滑動,全部數字塊都會向上滑動合併直到不能上移爲止。url
根據遊戲規則,遊戲模型部分作如下處理,用一個table(數組)存儲全部數字塊,key(下標)做爲數字塊所在的位置(1-16),value(數組值)做爲數字塊上記錄的值。
根據滑動的方向,首先須要作一次移動,而後作一次數字塊的合併,最後再作一次移動。移動操做是一行一行的向所給方向移動,且移動到沒法移動爲止。合併從最靠邊的倒數第二排向前一排合併,直到離邊最遠的一排。設計
通過這些步驟,完成用戶的一次操做達到的效果。遊戲
若是第一次操做全部數字塊均不可以移動而且沒有可以合併的塊,那麼認爲用戶此次操做是無效的,不產生新的數字塊。不然產生一個新的數字塊。
產生新的數字塊的方法是:將全部空閒的位置插入一個table中,而後在該table中隨機選擇一個位置做爲新塊的位置。而後產生該新塊的值,即一個2或者一個4。我設定的產生機率是4:1。
產生新塊後,檢查是否全部位置都被佔用,若是都被佔用則檢查向全部方向是否有可以合併的塊,若是有,則繼續等待用戶的下一步操做,不然標記遊戲結束。
計分方式:產生一個新塊+1分,合併出一個新塊,分數等於原來的分數+新塊的值。
展現與交互
不斷重繪數字塊所在的table就能夠得到須要的展現效果。
經過鼠標的拖動來肯定移動的方向,那麼按下時記錄一個位置信息,放開時記錄一個位置信息,根據兩個位置信息肯定拖動的方向,調用相應的操做。get
可運行的程序能夠在百度網盤上下載:http://pan.baidu.com/s/1gdJwDANtable