0

我用 JS 创建了我的第一个 2048 游戏。而且我还有一个让我发疯的错误!

当我向上移动时,每次向下移动时,某些字段不会向下移动。有人可以帮忙吗?

// #### Bewegungen und Matches steuern ####
document.onkeydown = function(event) {

    var istWasPassiert = false;

    function moveRight() {

        // ######## Prüft ob 2 Zahlen verschmelzen können #######       
        for ( var i = 3; i >= 0; i-- ) {  // durchlaufe alle Spalten von hinten
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] != '' ) { // Wenn die Position NICHT 0 ist..
                    for ( var k = i - 1; k >=0; k-- ){ // Überprüfe die Postion davor
                        if ( spielfeld[j][i] == spielfeld[j][k] ){ // Wenn die Position davor die gleiche Zahl ist...
                            // (startx, starty, stopx, stopy, wert)
                            bewegDich(k, j, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][i] * 2; // ..verdopple die Zahl
                            spielfeld[j][k] = ''; //setze die Position davor dann auf 0
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            actualScore += spielfeld[j][i];
                        }
                        if ( spielfeld[j][k] > 0 ){ // Wenn die Position davor größer als 0 ist...
                            k = 0; // ...beende die Schleife
                        }
                    }
                }
            }
        }

        // ########### Schiebt alle Zahlen nach rechts ##########       
        for ( var i = 3; i >= 0; i-- ) {  // durchlaufe alle Spalten von hinten
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] == '' ) { // Wenn die Position 0 ist
                    for ( var k = i - 1; k >=0; k-- ){ // Überprüfe die Postion davor
                        if (spielfeld[j][k] > 0 ){ // Wenn diese Position größer als 0 ist
                            bewegDich(k, j, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][k]; // verschiebe die Zahl nach rechts und...
                            spielfeld[j][k] = ''; // setze die Position dann auf 0
                            k = 0; // beende die Schleife
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            // (startx, starty, stopx, stopy, wert)
                        }
                    }
                }
            }
        }
    };

    function moveLeft() {

        // ######## Prüft ob 2 Zahlen verschmelzen können #######       
        for ( var i = 0; i <= 3; i++ ) {  // durchlaufe alle Spalten von vorne
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] != '' ) { // Wenn die Position NICHT 0 ist..
                    for ( var k = i + 1; k <=3; k++ ){ // Überprüfe die Postion davor
                        if ( spielfeld[j][i] == spielfeld[j][k] ){ // Wenn die Position davor die gleiche Zahl ist...
                            bewegDich(k, j, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][i] * 2; // ..verdopple die Zahl
                            spielfeld[j][k] = ''; //setze die Position davor dann auf 0
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            actualScore += spielfeld[j][i];
                        }
                        if ( spielfeld[j][k] > 0 ){ // Wenn die Position davor größer als 0 ist...
                            k = 3; // ...beende die Schleife
                        }
                    }
                }
            }
        }

        // ########### Schiebt alle Zahlen nach rechts ##########       
        for ( var i = 0; i <= 3; i++ ) {  // durchlaufe alle Spalten von vorne
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] == '' ) { // Wenn die Position 0 ist
                    for ( var k = i + 1; k <=3; k++ ){ // Überprüfe die Postion davor
                        if (spielfeld[j][k] > 0 ){ // Wenn diese Position größer als 0 ist
                            bewegDich(k, j, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][k]; // verschiebe die Zahl nach rechts und...
                            spielfeld[j][k] = ''; // setze die Position dann auf 0
                            k = 3; // beende die Schleife
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            }
                    }
                }
            }
        }
    };

    function moveDown() {

        // ######## Prüft ob 2 Zahlen verschmelzen können #######       
        for ( var i = 3; i >= 0; i-- ) {  // durchlaufe alle Spalten von hinten
            for ( var j = 3; j >= 0; j-- ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] != '' ) { // Wenn die Position NICHT 0 ist..
                    for ( var k = j - 1; k >=0; k-- ){ // Überprüfe die Postion davor
                        if ( spielfeld[j][i] == spielfeld[k][i] ){ // Wenn die Position davor die gleiche Zahl ist...
                            bewegDich(i, k, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][i] * 2; // ..verdopple die Zahl
                            spielfeld[k][i] = ''; //setze die Position davor dann auf 0
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            actualScore += spielfeld[j][i];
                        }
                        if ( spielfeld[k][i] > 0 ){ // Wenn die Position davor größer als 0 ist...
                            k = 0; // ...beende die Schleife
                        }
                    }
                }
            }
        }

        // ########### Schiebt alle Zahlen nach unten ##########        
        for ( var i = 3; i >= 0; i-- ) {  // durchlaufe alle Spalten von vorne
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] == '' ) { // Wenn die Position 0 ist
                    for ( var k = j - 1; k >=0; k-- ){ // Überprüfe die Postion davor
                        if (spielfeld[k][i] > 0 ){ // Wenn diese Position größer als 0 ist
                            bewegDich(i, k, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[k][i]; // verschiebe die Zahl nach rechts und...
                            spielfeld[k][i] = ''; // setze die Position dann auf 0
                            k = 0; // beende die Schleife
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                        }
                    }
                }
            }
        }
    };

    function moveUp() {

        // ######## Prüft ob 2 Zahlen verschmelzen können #######       
        for ( var i = 0; i <= 3; i++ ) {  // durchlaufe alle Spalten von vorne
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] != '' ) { // Wenn die Position NICHT 0 ist..
                    for ( var k = j + 1; k <=3; k++ ){ // Überprüfe die Postion davor
                        if ( spielfeld[j][i] == spielfeld[k][i] ){ // Wenn die Position davor die gleiche Zahl ist...
                            bewegDich(i, k, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[j][i] * 2; // ..verdopple die Zahl
                            spielfeld[k][i] = ''; //setze die Position davor dann auf 0
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                            actualScore += spielfeld[j][i];
                        }   
                        if ( spielfeld[k][i] > 0 ){ // Wenn die Position davor größer als 0 ist...
                            k = 3; // ...beende die Schleife
                        }
                    }
                }
            }
        }

        // ########### Schiebt alle Zahlen nach oben ##########     
        for ( var i = 0; i <= 3; i++ ) {  // durchlaufe alle Spalten von vorne
            for ( var j = 0; j <= 3; j++ ) {  // durchlaufe alle Zeilen
                if ( spielfeld[j][i] == '' ) { // Wenn die Position 0 ist
                    for ( var k = j + 1; k <=3; k++ ){ // Überprüfe die Postion darüber
                        if (spielfeld[k][i] > 0 ){ // Wenn diese Position größer als 0 ist
                            bewegDich(i, k, i, j, spielfeld[j][i]);
                            spielfeld[j][i] = spielfeld[k][i]; // verschiebe die Zahl nach rechts und...
                            spielfeld[k][i] = ''; // setze die Position dann auf 0
                            k = 3; // beende die Schleife
                            istWasPassiert = true; // ja, es ist etwas verschoben worden
                        }
                    }
                } 
            }
        }
    };


    // #### Reaktion auf Tastatureingabe ####
    if(event.keyCode == 39) { // Wenn Taste nach rechts gedrückt wird   
        moveRight();
        addScore();
    }
    if(event.keyCode == 37) { // Wenn Taste nach links gedrückt wird    
        moveLeft();
        addScore();
    }
    if(event.keyCode == 40) { // Wenn Taste nach unten gedrückt wird    
        moveDown();
        addScore();
    }
    if(event.keyCode == 38) { // Wenn Taste nach oben gedrückt wird 
        moveUp();
        addScore();
    }
    checkIfLost();

    if ( istWasPassiert == true ) { // "== true" kann auch wegelassen werden
        addNeueZahl();
    }
    checkIfWon();
    setTimeout(game, 400);
};

我创建了一个代码笔:http: //codepen.io/mahuki/pen/KabxER

4

0 回答 0