1. 程式人生 > >我也來開發2048之確定思路

我也來開發2048之確定思路

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

以下內容拔自百度:

 2048是比較流行的一款數字遊戲。原版2048首先在github上釋出,原作者是Gabriele Cirulli。它是基於《1024》和《小3傳奇》的玩法開發

而成的新型數字遊戲。

隨後2048便出現各種版本,走各大平臺。由Ketchapp公司移植到IOS的版本最為火熱,現在約有1000萬下載,其名字跟

原版一模一樣。衍生版中最出名的是《2048六邊形》版本,先後在全球81個國家中的board game中排進了前200。安卓版非常火爆的有《挑戰2048》,其2.0.0版以後還加入了雙人對戰。其次比較特別的有2048中國朝代版。更有2048自定義版,可以自己定義文字和圖片。《2048~》是

IOS中流行的一款。

 遊戲規則很簡單,每次可以選擇上下左右其中一個方向去滑動,每滑動一次,所有的數字方塊都會往滑動的方向靠攏外,系統也會在空白

的地方亂數出現一個數字方塊,相同數字的方塊在靠攏、相撞時會相加。系統給予的數字方塊不是2就是4,玩家要想辦法在這小小的16格範圍

中湊出“2048”這個數字方塊。遊戲的畫面很簡單,一開始整體16個方格大部分都是灰色的,當玩家拼圖出現數字之後就會改變顏色,整體格調

很是簡單。在玩法規則也非常的簡單,一開始方格內會出現2或者4等這兩個小數字,玩家只需要上下左右其中一個方向來移動出現的數字,所

有的數字就會向滑動的方向靠攏,而滑出的空白方塊就會隨機出現一個數字,相同的數字相撞時會疊加靠攏,然後一直這樣,不斷的疊加最

終拼湊出2048這個數字就算成功。如果你是一個數字愛好者,或者是比較有天賦的數學天才,就算不是數學天才,一般的玩家也能夠玩轉這

款遊戲,感興趣的話就去下載體驗一番。

 CSDN上已經有很多關於2048的博文了,但是基本上都是基於cocos2d的版本,其實,作為一個遊戲,用cocos2d開發確實快,說白了就

是一個三消類遊戲的翻版。但是本文介紹的是直接基於Android的開發思路,比較適用於做Android專案的朋友學習。

 如何去實現呢?我們先看看2048的截圖:

 

 核心是中間的面板,就是一個NXN的格子,移動的時候,會計算合併、新增單元格。

一、確定View實現

1、佈局首選GridLayout,不得不說,4.0的這個新控制元件真是Android開發的福音,不瞭解的朋友請Google之。

2、單元格佈局首選FrameLayout,去做一個小格子,裡面包含一個TextView或者ImageView

二、演算法實現

1、生成數字為0、2、4、8……如果是0則不顯示數字,如果是其他數字則根據數字判斷底色

2、實現上下左右滑動事件,基本原理是這樣,先去判斷每行(列),以為移動後的序列,一定是中間不會有0的,講這4個值存入一個list,

根據遊戲規則計算,再返回到這行(列),說的比較抽象,我們可以這樣看:

2 2 0 4  假如這是某行,我們現在左移,首先將2 2 0 4 存入一個list(去掉0),即list為 2 2 4 然後根據規則2和2合併,則list為 4 4,

最後返回到這一行(列),這樣解釋不知道是不是清楚了點。

為什麼要這樣做呢?其實2048的演算法有很多,大家也可以想想,我也看過那些cocos2d的演算法,發現有些問題就是:迴圈太多,

判斷次數太多,這容易造成的一個最大的問題就是——卡,有些人可能玩過一個Android版本的2048,那個流暢度跟iOS的實在

是差了不止一點,所以我們需要提高演算法的效率,這種演算法每次判斷最多隻需要16次迴圈和16次讀寫,相比某版本在16次迴圈

中再迴圈判斷的演算法要提高不少效率

3、新增隨機生成Item,滑動時記錄一個滑動前的矩陣狀態,有兩個作用,一個是判斷是否滑動過,一個是為了做撤銷功能,

程式控制一個記錄空格的list,每次都會重新計算存在的空格

4、判斷結束,若空格不為0,遊戲一定沒有結束,若為0,則判斷每行——相鄰是否存在相同數字,每列——相鄰是否存在相同數字

三、其他

1、New Game

2、分數記錄

3、撤銷上次移動

4、自定義2048背景圖

以上,基本的思路以及梳理好了,下面就開始一步步按思路實現了。

PS 原始碼正在完善中,需要原始碼的請留言,完成後會發給需要的朋友

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述