问答详情
源自:3-3 交互细节

感觉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的这个小循环。

提问者:雪中人 2023-03-19 17:40

个回答