感觉moveLeft()的最内层循环应该用break来终止
for(var i = 0; i < 4; i++){
for( var j=1; j < 4; j++){
if(board[i][j] != 0){
for(var k = 0; k < j; k++){
if( board[i][k] == 0 && noBlockHorizontal(i, k, j, board)){
//为0并且从j列到k列过程中都没有障碍物
//move
showMoveAnimation(i, j, i, k); //移动动画
board[i][k] = board[i][j];
board[i][j] = 0;
break; //这里!
}
else if(board[i][k] == board[i][j] && noBlockHorizontal(i, k, j, board)){
//move
showMoveAnimation(i, j, i, k);
//add
board[i][k] += board[i][j];
board[i][j] = 0;
break;
}
}
}
}
}
--
这里老师用了continue,但其实不加continue也会继续向下循环。而这里在i,j这个位置的元素要向左移动,如果我可以移动到最左端,我就不需要再判定中间能否移动到了,也就是说可以终止循环变量为k的这个小循环。