2048 原作者就是用Js寫的,一直想嘗試,但久久未動手。
昨天教學生學習JS代碼。不妨就做個有趣的遊戲好了。2048這麼火,是一個不錯的選擇。
思路:
1. 數組 ,2維數組4x4
2. 移動演算法,移動後有數位對齊,無數字(我用的0,但不顯示)補齊。
移動前
移動後(注意程式合并了第一行2個2,併產生了新的2)
移動演算法分2步:
第一步驟:移動
第二步驟:合并
行動程式碼參考:
[html] view plaincopy
- function left(t,i)
- {
- var j;
- var len = t[i].length;
- for (j=0;j<len-1;j++)
- {
- if (t[i][j] == 0 && t[i][j+1] != 0)
- {
- temp = t[i][j];
- t[i][j] = t[i][j+1];
- t[i][j+1] = temp;
- left(t,i);
-
- }
- }
-
- }
合并代碼參考:
[html] view plaincopy
- function lcombine(a,i)
- {
- var len = a[i].length;
-
- for(var j=0;j<len-2;j++)
- {
- if (a[i][j] == a[i][j+1])
- {
- a[i][j] *=2;
- a[i][j+1] = 0;
- left(a,i);
- break;
- }
- }
- }
3.顯示
顯示部分CSS來源 2048源作者程式。
顯示代碼:
[html] view plaincopy
- function display_div ()
- {
- var i,j;
- var n = "#d";
- for (i = 0 ;i < 4 ;i++)
- {
- for(j=0;j<4;j++)
- {
- if (a[i][j] !=0)
- $(n+(i*4+j)).html("<div class='tile tile-"+a[i][j]+"'><div class='tile-inner'>"+a[i][j]+"</div></div>");
- else
- $(n+(i*4+j)).html("");
-
-
- }
- }
- }
這段代碼是把數組內容顯示到 4x4表格內。
原始碼及線上示範:http://jsbin.com/biximuho/6/edit