感覺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的這個小循環。