溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)

發(fā)布時(shí)間:2020-09-26 03:40:21 來(lái)源:網(wǎng)絡(luò) 閱讀:416 作者:makeapp628 欄目:移動(dòng)開(kāi)發(fā)
一張圖告訴你2048有多火

下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)


小3的悲劇
在每個(gè)階段手機(jī)里面都會(huì)有一兩款讓人愛(ài)不釋手的游戲存在,無(wú)論是在公車上、床鋪上、馬桶上還是在睡覺(jué)前、吃飯前、總會(huì)有讓你拿出手機(jī)打開(kāi)它的欲望。大部分人被Flappy bird給蹂躪的體無(wú)完膚,生活不能自理。在這危難降臨的時(shí)刻,一款名為小3傳奇的數(shù)字益智游戲出現(xiàn)在我們的視野中,游戲既簡(jiǎn)單又復(fù)雜,既單一又千變?nèi)f化,簡(jiǎn)直就讓人停不下來(lái)!
但故事的發(fā)展是這樣的,小3傳奇的兩位開(kāi)發(fā)者花了近一年半時(shí)間才開(kāi)發(fā)出這個(gè)游戲的核心玩法,卻在其上架appstore后僅21天就被《1024》抄了過(guò)去。而《2048》則更為迅速,19歲的Gabriele Cirulli只用了一個(gè)星期改編前兩者游戲,卻獲得最大的成功,而小3卻不被人知;這類游戲從發(fā)布到現(xiàn)在,不管是app store還是android市場(chǎng),下載量已經(jīng)遠(yuǎn)遠(yuǎn)超越了千萬(wàn),網(wǎng)上各種版本的都有;
CocosEditor開(kāi)源版
筆者歷時(shí)一個(gè)晚上,終于完成了cocos2d-js開(kāi)源版本,編碼雖易,創(chuàng)意不易,且行且珍惜;
此版本包含了網(wǎng)上流行的各種版本。包括原版,朝代版,金庸版,星座,豪車等等近10個(gè)版本,代碼開(kāi)源,希望讀者基于開(kāi)源代碼做出各種版本,供全名娛樂(lè)
運(yùn)行demo需要配置好CocosEditor,暫不支持其他工具。demo是跨平臺(tái)的,可移植運(yùn)行android,ios,html5網(wǎng)頁(yè)等,代碼是基于javascript語(yǔ)言,cocos2d-x游戲引擎,CocosEditor手游開(kāi)發(fā)工具完成的。
本文共兩篇,第一篇分析原版,第二篇分析各種版本,本代碼僅供參考,有更好的實(shí)現(xiàn)方法可以評(píng)論中探討
已發(fā)布上線apk演示效果
幾個(gè)小時(shí)開(kāi)發(fā),一天審核上線,這就是CocosEditor開(kāi)發(fā)游戲的速度
360應(yīng)用市場(chǎng)(2048 聚合版):http://zhushou.#/detail/index/soft_id/1634607?recrefer=SE_D_2048%20%E8%81%9A%E5%90%88
豌豆莢應(yīng)用市場(chǎng) :http://www.wandoujia.com/apps/com.touchsnow.game.sudoku


CocosEditor版源代碼下載:

cocos2d-js源代碼請(qǐng)到集中營(yíng)下載:http://blog.makeapp.co/?p=523

github版本管理:https://github.com/makeapp/cocoseditor-2048




Github里面大牛提供了各種語(yǔ)言的版本

包括(java  ,css,shell,python,objective-c等等),讀者可自行下載
https://github.com/search?q=2048&ref=cmdform




不同平臺(tái)下的效果圖:


windows

下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)



html5網(wǎng)頁(yè)

下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)


android平臺(tái)(各種主題版本)


下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)

下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)



代碼分析:

1初始化;進(jìn)入游戲,初始化4*4表格,并隨機(jī)產(chǎn)生兩個(gè)2;

# 二維數(shù)組this.tables表格循環(huán)存入數(shù)據(jù)

#random1, random2 ,random11, random22四個(gè)隨機(jī)數(shù)可以確定兩個(gè)2的xy位置;

#方法newNumber里面,根據(jù)位置i,j和級(jí)別num可以確定一個(gè)新的數(shù)字;創(chuàng)建背景cell和cell上面的數(shù)字標(biāo)簽cellLabel;并根據(jù)num確定是否顯示cellLabel;最后給cell關(guān)聯(lián)一個(gè)data數(shù)據(jù);特別說(shuō)明這里的number:num不是精靈上面的數(shù)字而是精靈的級(jí)別,比如number=11 則數(shù)字是1024


[javascript]view plaincopy下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)
  1. MainLayer.prototype.onEnter = function () {  

  2. //version

  3. this.versionNum = indexVersions;  

  4. this.indexVersion = VERSIONS[this.versionNum];  

  5. this.title.setString(this.indexVersion.name + "目標(biāo):" + this.indexVersion.array[this.indexVersion.array.length - 1] + "");  

  6. var random1 = getRandom(4);  

  7. var random2 = getRandom(4);  

  8. while (random1 == random2) {  

  9.        random2 = getRandom(4);  

  10.    }  

  11. var random11 = getRandom(4);  

  12. var random22 = getRandom(4);  

  13. this.tables = new Array(4);  

  14. for (var i = 0; i < 4; i++) {  

  15. var sprites = new Array(4);  

  16. for (var j = 0; j < 4; j++) {  

  17. if (i == random1 && j == random11) {  

  18.                sprites[j] = this.newNumber(i, j, 1);  

  19.            } elseif (i == random2 && j == random22) {  

  20.                sprites[j] = this.newNumber(i, j, 1);  

  21.            } else {  

  22.                sprites[j] = this.newNumber(i, j, 0);  

  23.            }  

  24.        }  

  25. this.tables[i] = sprites;  

  26.    }  

  27. this.totalScore = 0;  

  28. };  

  29. MainLayer.prototype.newNumber = function (i, j, num) {  

  30. var cell = cc.MySprite.create(this.rootNode, "5.png", this.getPosition(i, j), 1);  

  31. var cellLabel = cc.MySprite.createLabel(cell, "");  

  32. if (num > 0) {  

  33.        cell.setColor(COLOR[num]);  

  34.        cellLabel.setVisible(true);  

  35.        cellLabel.setString(this.indexVersion.array[num]);  

  36.        cellLabel.setFontSize(this.indexVersion.labelFontSize);  

  37.    } else {  

  38.        cellLabel.setVisible(false);  

  39.    }  

  40.    cell.data = {col: i, row: j, numberLabel: cellLabel, number: num};  

  41. return cell;  

  42. };  




2 四個(gè)方向算法;玩游戲的時(shí)候觸摸四個(gè)方向,表格就向四個(gè)方向合并靠攏leftCombineNumber,rightCombineNumber,downCombineNumber,upCombineNumber,四個(gè)方法函數(shù)的算法都是一樣的,我只分析一個(gè)leftCombineNumber;

第一步 相同數(shù)據(jù)疊加 :

#j從左到右變大,i從下到上變大;也就初始位置是左下角;

#如果該單元格級(jí)別不是空背景  cell.data.number != 0 ;

#從它的右邊開(kāi)始var k = i + 1;  循環(huán)遍歷while (k < 4)  {k++};

#如果遍歷到單元格級(jí)別也不是空背景 if (nextCell.data.number != 0) 遍歷結(jié)束 k = 4; break;;

#而且如果發(fā)現(xiàn)兩個(gè)單元的級(jí)別一樣if (cell.data.number == nextCell.data.number)

#級(jí)別數(shù)據(jù)number刷新變化

cell.data.number += 1;

nextCell.data.number = 0;


第二步 填充空數(shù)據(jù);

#同理第一步,如果是空背景if (cell.data.number == 0),也是循環(huán)遍歷while (k < 4)  {k++};

#如果遍歷到單元格級(jí)別不是空背景 if (nextCell.data.number != 0)  ,空背景獲得該單元格的數(shù)據(jù),而該單元格則設(shè)為空背景;

cell.data.number = nextCell.data.number;
nextCell.data.number = 0;


[javascript]view plaincopy下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)
  1. //direction left

  2. MainLayer.prototype.leftCombineNumber = function () {  

  3. for (var j = 0; j < 4; j++) {  

  4. for (var i = 0; i < 4; i++) {  

  5. var cell = this.tables[i][j];  

  6. if (cell.data.number != 0) {  

  7. var k = i + 1;  

  8. while (k < 4) {  

  9. var nextCell = this.tables[k][j];  

  10. if (nextCell.data.number != 0) {  

  11. if (cell.data.number == nextCell.data.number) {  

  12.                            cell.data.number += 1;  

  13.                            nextCell.data.number = 0;  

  14. this.totalScore += SCORES[cell.data.number];  

  15.                        }  

  16.                        k = 4;  

  17. break;  

  18.                    }  

  19.                    k++;  

  20.                }  

  21.            }  

  22.        }  

  23.    }  

  24. for (j = 0; j < 4; j++) {  

  25. for (i = 0; i < 4; i++) {  

  26.            cell = this.tables[i][j];  

  27. if (cell.data.number == 0) {  

  28.                k = i + 1;  

  29. while (k < 4) {  

  30.                    nextCell = this.tables[k][j];  

  31. if (nextCell.data.number != 0) {  

  32.                        cell.data.number = nextCell.data.number;  

  33.                        nextCell.data.number = 0;  

  34.                        k = 4;  

  35.                    }  

  36.                    k++;  

  37.                }  

  38.            }  

  39.        }  

  40.    }  

  41. this.refreshNumber();  

  42. };  

  43. //direction right

  44. MainLayer.prototype.rightCombineNumber = function () {  

  45. for (var j = 0; j < 4; j++) {  

  46. for (var i = 3; i >= 0; i--) {  

  47. var cell = this.tables[i][j];  

  48. if (cell.data.number != 0) {  

  49. var k = i - 1;  

  50. while (k >= 0) {  

  51. var nextCell = this.tables[k][j];  

  52. if (nextCell.data.number != 0) {  

  53. if (cell.data.number == nextCell.data.number) {  

  54.                            cell.data.number += 1;  

  55.                            nextCell.data.number = 0;  

  56. this.totalScore += SCORES[cell.data.number];  

  57.                        }  

  58.                        k = -1;  

  59. break;  

  60.                    }  

  61.                    k--;  

  62.                }  

  63.            }  

  64.        }  

  65.    }  

  66. for (j = 0; j < 4; j++) {  

  67. for (i = 3; i >= 0; i--) {  

  68.            cell = this.tables[i][j];  

  69. if (cell.data.number == 0) {  

  70.                k = i - 1;  

  71. while (k >= 0) {  

  72.                    nextCell = this.tables[k][j];  

  73. if (nextCell.data.number != 0) {  

  74.                        cell.data.number = nextCell.data.number;  

  75.                        nextCell.data.number = 0;  

  76.                        k = -1;  

  77.                    }  

  78.                    k--;  

  79.                }  

  80.            }  

  81.        }  

  82.    }  

  83. this.refreshNumber();  

  84. };  

  85. MainLayer.prototype.downCombineNumber = function () {  

  86. for (var i = 0; i < 4; i++) {  

  87. for (var j = 0; j < 4; j++) {  

  88. var cell = this.tables[i][j];  

  89. if (cell.data.number != 0) {  

  90. var k = j + 1;  

  91. while (k < 4) {  

  92. var nextCell = this.tables[i][k];  

  93. if (nextCell.data.number != 0) {  

  94. if (cell.data.number == nextCell.data.number) {  

  95.                            cell.data.number += 1;  

  96.                            nextCell.data.number = 0;  

  97. this.totalScore += SCORES[cell.data.number];  

  98.                        }  

  99.                        k = 4;  

  100. break;  

  101.                    }  

  102.                    k++;  

  103.                }  

  104.            }  

  105.        }  

  106.    }  

  107. for (i = 0; i < 4; i++) {  

  108. for (j = 0; j < 4; j++) {  

  109.            cell = this.tables[i][j];  

  110. if (cell.data.number == 0) {  

  111.                k = j + 1;  

  112. while (k < 4) {  

  113.                    nextCell = this.tables[i][k];  

  114. if (nextCell.data.number != 0) {  

  115.                        cell.data.number = nextCell.data.number;  

  116.                        nextCell.data.number = 0;  

  117.                        k = 4;  

  118.                    }  

  119.                    k++;  

  120.                }  

  121.            }  

  122.        }  

  123.    }  

  124. this.refreshNumber();  

  125. };  

  126. //touch up

  127. MainLayer.prototype.upCombineNumber = function () {  

  128. for (var i = 0; i < 4; i++) {  

  129. for (var j = 3; j >= 0; j--) {  

  130. var cell = this.tables[i][j];  

  131. if (cell.data.number != 0) {  

  132. var k = j - 1;  

  133. while (k >= 0) {  

  134. var nextCell = this.tables[i][k];  

  135. if (nextCell.data.number != 0) {  

  136. if (cell.data.number == nextCell.data.number) {  

  137.                            cell.data.number += 1;  

  138.                            nextCell.data.number = 0;  

  139. this.totalScore += SCORES[cell.data.number];  

  140.                        }  

  141.                        k = -1;  

  142. break;  

  143.                    }  

  144.                    k--;  

  145.                }  

  146.            }  

  147.        }  

  148.    }  

  149. for (i = 0; i < 4; i++) {  

  150. for (j = 3; j >= 0; j--) {  

  151.            cell = this.tables[i][j];  

  152. if (cell.data.number == 0) {  

  153.                k = j - 1;  

  154. while (k >= 0) {  

  155.                    nextCell = this.tables[i][k];  

  156. if (nextCell.data.number != 0) {  

  157.                        cell.data.number = nextCell.data.number;  

  158.                        nextCell.data.number = 0;  

  159.                        k = -1;  

  160.                    }  

  161.                    k--;  

  162.                }  

  163.            }  

  164.        }  

  165.    }  

  166. this.refreshNumber();  

  167. };  




3 刷新數(shù)據(jù)和顏色;

上面的算法完成了,只是該精靈的data里面的數(shù)據(jù)發(fā)生了變化,但視覺(jué)上沒(méi)有任何變化,所以需要刷新數(shù)據(jù)和顏色

#新建一個(gè)空背景數(shù)組emptyCellList;

#又是循環(huán)二維數(shù)組this.tables

#得到單元格的文字標(biāo)簽label,和級(jí)別cellNumber

#如果不是空背景cellNumber!=0,label顯示和設(shè)置文字內(nèi)容和大小,同時(shí)如果檢測(cè)到是最高級(jí)別,游戲成功結(jié)束

#如果是空背景,label隱藏 emptyCellList添加該元素emptyCellList.push(cell);;


#得到一個(gè)emptyCellList后,如果發(fā)現(xiàn)該數(shù)組大小為空,也就無(wú)法再產(chǎn)生一個(gè)數(shù)字2了,游戲over;

#而如果數(shù)組大小不是空,隨機(jī)取一個(gè)位置randomCell,設(shè)置數(shù)據(jù)等級(jí)為0,數(shù)字為2,并播放縮放動(dòng)畫(huà)runAction;


[javascript]view plaincopy下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)
  1. MainLayer.prototype.refreshNumber = function () {  

  2. var emptyCellList = [];  

  3. for (var i = 0; i < 4; i++) {  

  4. var numbers = " ";  

  5. for (var j = 0; j < 4; j++) {  

  6. var cell = this.tables[i][j];  

  7. var label = cell.data.numberLabel;  

  8. var cellNumber = cell.data.number;  

  9. if (cellNumber != 0) {  

  10.                cell.setColor(COLOR[cellNumber]);  

  11.                label.setString(this.indexVersion.array[cellNumber] + " ");  

  12.                label.setFontSize(this.indexVersion.labelFontSize);  

  13.                label.setVisible(true);  

  14. if (cellNumber == (this.indexVersion.array.length - 1)) {  

  15. //check success

  16. var toast = cc.Toast.create(this.rootNode, "成功到達(dá):" + this.indexVersion.array[cellNumber], 2);  

  17.                    toast.setColor(cc.c3b(255, 0, 0));  

  18. this.rootNode.scheduleOnce(function () {  

  19.                        cc.BuilderReader.runScene("", "MainLayer");  

  20.                    }, 2)  

  21.                }  

  22.            } else {  

  23.                cell.setColor(COLOR[cellNumber]);  

  24.                label.setVisible(false);  

  25.                emptyCellList.push(cell);  

  26.            }  

  27.            numbers += "  " + cellNumber;  

  28.        }  

  29.        cc.log("numbers==" + numbers);  

  30.    }  

  31. //score

  32. this.scoreLabel.setString("分?jǐn)?shù):" + this.totalScore);  

  33. if (emptyCellList.length < 1) {  

  34. //check fail

  35. var toast = cc.Toast.create(this.rootNode, "失??!", 2);  

  36.        toast.setColor(cc.c3b(255, 0, 0));  

  37. this.rootNode.scheduleOnce(function () {  

  38.            cc.BuilderReader.runScene("", "MainLayer");  

  39.        }, 2)  

  40.    } else {  

  41. //create random cell

  42. var randomCell = emptyCellList[getRandom(emptyCellList.length)];  

  43.        randomCell.data.number = 1;  

  44.        randomCell.data.numberLabel.setVisible(true);  

  45.        randomCell.data.numberLabel.setString(VERSIONS[this.versionNum].array[1] + "");  

  46.        randomCell.data.numberLabel.setFontSize(this.indexVersion.labelFontSize);  

  47.        randomCell.setColor(COLOR[1]);  

  48.        randomCell.runAction(cc.Sequence.create(cc.ScaleTo.create(0, 0.8), cc.ScaleTo.create(0.5, 1)));  

  49.    }  

  50. };  




4 觸摸檢測(cè) 兩個(gè)觸摸點(diǎn)this.pEnded this.pBegan 根據(jù)x y確定方向,再根據(jù)距離確定左右和上下;


[javascript]view plaincopy下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)下載量已超越千萬(wàn)的爆紅游戲2048(同名小3傳奇、1024)源代碼解密和下載(第一篇)
  1. MainLayer.prototype.onTouchesEnded = function (touches, event) {  

  2. this.pEnded = touches[0].getLocation();  

  3. if (this.pBegan) {  

  4. if (this.pEnded.x - this.pBegan.x > 50) {  

  5. this.rightCombineNumber();  

  6.        }  

  7. elseif (this.pEnded.x - this.pBegan.x < -50) {  

  8. this.leftCombineNumber();  

  9.        }  

  10. elseif (this.pEnded.y - this.pBegan.y > 50) {  

  11. this.upCombineNumber();  

  12.        }  

  13. elseif (this.pEnded.y - this.pBegan.y < -50) {  

  14. this.downCombineNumber();  

  15.        }  

  16.    }  

  17. };  


思路很清晰簡(jiǎn)單,游戲卻是簡(jiǎn)約不簡(jiǎn)單;




cocos2d-x跨平臺(tái)游戲引擎

cocos2d-x是全球知名的游戲引擎 ,引擎在全球范圍內(nèi)擁有眾多開(kāi)發(fā)者,涵蓋國(guó)內(nèi)外各知名游戲開(kāi)發(fā)商。目前Cocos2d-x引擎已經(jīng)實(shí)現(xiàn)橫跨ios、Android、Bada、MeeGo、BlackBerry、Marmalade、Windows、Linux等平臺(tái)。編寫(xiě)一次,到處運(yùn)行,分為兩個(gè)版本 cocos2d-c++和cocos2d-html5 本文使用了后者;
cocos2d-x 官網(wǎng):http://cocos2d-x.org/
cocos2d-x 資料下載  http://cocos2d-x.org/download



CocosEditor開(kāi)發(fā)工具:

CocosEditor,它是開(kāi)發(fā)跨平臺(tái)的手機(jī)游戲工具,運(yùn)行window/mac系統(tǒng)上,javascript腳本語(yǔ)言,基于cocos2d-x跨平臺(tái)游戲引擎, 集合代碼編輯,場(chǎng)景設(shè)計(jì),動(dòng)畫(huà)制作,字體設(shè)計(jì),還有粒子,物理系統(tǒng),地圖等等的,而且調(diào)試方便,和實(shí)時(shí)模擬;

CocosEditor 下載,介紹和教程:http://blog.csdn.net/touchsnow/article/details/19070665;

CocosEditor官方博客:http://blog.makeapp.co/;



2048系列文章

2048源代碼解密和下載(第一篇 分析原版)

2048源代碼解密和下載(第二篇 分析各種版本)




傳送門(優(yōu)質(zhì)博文):

flappy bird游戲源代碼揭秘和下載

flappy bird游戲源代碼揭秘和下載后續(xù)---移植到android真機(jī)上

flappy bird游戲源代碼揭秘和下載后續(xù)---移植到html5網(wǎng)頁(yè)瀏覽器

flappy bird游戲源代碼揭秘和下載后續(xù)---日進(jìn)5萬(wàn)美元的秘訣AdMob廣告



PopStar(消滅星星)游戲源代碼下載、分析及跨平臺(tái)移植---第一篇(界面)

PopStar(消滅星星)游戲源代碼下載、分析及跨平臺(tái)移植---第二篇(算法)

PopStar(消滅星星)游戲源代碼下載、分析及跨平臺(tái)移植---第三篇(分?jǐn)?shù))

PopStar(消滅星星)游戲源代碼下載、分析及跨平臺(tái)移植---第四篇(關(guān)卡)



Fruit Ninja(水果忍者)游戲源代碼下載、分析(上)

Fruit Ninja(水果忍者)游戲源代碼下載、分析(中)

Fruit Ninja(水果忍者)游戲源代碼下載、分析(下)


筆者語(yǔ):

想了解更多請(qǐng)進(jìn)入官方博客,最新博客和代碼在官方博客首發(fā);請(qǐng)持續(xù)關(guān)注,還有更多CocosEditor游戲源碼即將放出;

聯(lián)系筆者:zuowen@makeapp.co(郵箱) qq群:232361142


附錄:

整理各種版本的2048在線玩,狂歡起來(lái)吧;

1、2048原始版
http://gabrielecirulli.github.io/2048/
2、2048進(jìn)階版(有乘法和繼續(xù)玩下去的功能)
http://baiqiang.github.io/2048-advanced/
3、2048漢化版1:甲乙丙丁
http://tiansh.github.io/2048/zhong/
4、2048漢化版2:商周秦漢
http://oprilzeng.github.io/2048/
5、2048喵喵版:色弱慎入
http://hczhcz.github.io/2048/20mu/
6、2048喪病版:8*8
http://cyberzhg.github.io/2048/
7、2048flappy版
http://hczhcz.github.io/Flappy-2048/
8、2048六角形版
http://baiqiang.github.io/2048-hexagon/
9、2048cross版
http://baiqiang.github.io/2048-cross/
10、2048double版
http://baiqiang.github.io/2048-double/
11、2048哲學(xué)版
http://learn.tsinghua.edu.cn:8080/2013310744/philosopher2048/

12、2048一步登天版
http://jennypeng.me/2048/
13、2048斐波那契數(shù)列版
http://mike199515.free3v.com/1597/2.htm
14、2048雙人對(duì)戰(zhàn)版
http://emils.github.io/2048-multiplayer/
15、2048變2版
https://www.prism.gatech.edu/~hli362/
16、2048直線版
http://tiansh.github.io/2048/
17、新增3D版的2048:
http://baiqiang.github.io/2048-3d/
18、2048的一個(gè)合集:
http://get2048.com/


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI