我用 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