最近2048比较火,网上也出现了网页版的游戏,我也来凑个热闹。解决的方法有很多,但主要都是集中在如何移动,怎么合并以及效果添加。
下面是我的核心函数:
function mergeToLow(arr){
flag = 0;
for(var i=1; i<arr.length; i++){
for(var j = flag; j < i;){
if( arr[i] != arr[j] ){
if( arr[i] != 0 && arr[j] == 0){//后面的数不为0,前面的数为0
tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
j = j + 1;
}if( arr[i] != 0 && arr[j] != 0){//当移动、或者增加后flag需要向后移一位
j = flag = flag + 1;
}else{
j = j+1;
}
}else{
if( arr[j] != 0){//当两个数相等且不为零时合并
arr[j] = arr[j] << 1;
arr[i] = 0;
j = flag = flag + 1;
}else{
break;
}
}
}
}
console.log(arr);
}
上面是向数组头部合并,即:
输入:[2,2,0,2]
输出:[4,2,0,0]
本来想放到dabblet,但是缺少文件,所以放到百度网盘上, 其中一定会有bug,希望大家帮我找一下。