屌絲也能開發安卓版2048(App Inventor)
想編寫安卓遊戲,java太難,來試試App Inventor,雖然有人認為他是中學生的玩具,但是也能編寫2048這樣的火爆遊戲,不需要太複雜的演算法。
整個遊戲有幾個模組:
一、遊戲初始化
數列轉化為圖形,使用了canvas和精靈,相對應list,這裡注意精靈位置是固定的,只是更改圖片,多少分,就對於n.jpg,0分是底色圖片。左右移動,使用了flung判斷,絕對值判斷,水平速度和垂直速度哪個大,用來判斷是左右移動還是上下移動。
二、計分模組
一般計分在合併處增加,最高分用了tiny db,遊戲結束時進行判斷。遊戲開始時計分清0
三、移動模組(核心)
移動模組是4*4矩陣的移動,先簡化解決左右移動,進一步簡化為4*1的矩陣,這裡用到list。
首先判斷0000,不移動,true、false判斷。
其次判斷向右移動,通過觀察發現規律,2000變為0002,2480變為0248,2040變為0024,第4位是0,去掉後放到第1位。迴圈最多3次。如果第4位不是0,從第3位是0,最多迴圈2次,第2位是0,1次。同樣的可以解決向左移動。然後擴充套件到4*4.用foreach迴圈。
解決了左右移動,開始解決上下移動。左右移動本質上是矩陣的旋轉。如1234 1234 1234 1234 變為 4444 3333 2222 1111 因此可以通過行和列的轉換,得到新的list,上下移動變成左右移動。注意的是每個方向移動都會同時影響列陣列和行陣列,因此要相互轉換。 |
四、合併模組
合併模組注意以下規則,每次只合並一次,如2222,向右合併為0044,不是合併為8。0222向右合併為0024。合併主要是判斷12,23,34位的list是否相同。
如34位相同的向右合併,4位翻倍,3位移除,然後再1位上加0。這裡需要和後面的積分模組相關聯,合併的分數加上。
五、隨機增加2或4模組
2和4的選取可以通過概率設定,比較簡單
插入位置的選取實際上在所有0的位置隨機選取,這裡設定zerolist儲存所有為0的位置,儲存按照1-16號設定,模組為list0。如5號表示第2行第1列為0,用到了商和餘數的判斷,模組為add。
六、遊戲結束判斷
這裡沒有設定遊戲勝利,即達到2048遊戲仍然繼續,遊戲結束的條件有3個。
1是沒有空格,即zerolist為空
2橫向不能合併
3縱向不能合併
都為真時彈出選擇框。
模組對於為nomerge和gameover
aia檔案和apk下載http://bbs.appinventor.com.cn/thread-3604-1-1.html