2016-04-29 1 views
0

Ich versuche, das Puschori-Puzzle-Spiel neu zu erstellen, mein Hauptproblem liegt bei der nächsten folgenden Ausgabe. Jedes Mal, wenn der Benutzer ein Token eingeben muss, nennen wir es "1", da das Beispiel unten unterhalb der Zeile der Matrix, die in diesem Moment platziert wird, irgendwie "verschmelzen" muss.Pushori Java-Programmiermatrix

das Betrachten, ist das Zeichen auf der linken Seite der Matrix bedeutet, dass der Benutzer die rechte Pfeiltaste macht die „Reihe Verschmelzen“, wie er zu drücken braucht:

0 0 0 0  the 0s are the main game matrix, 0 0 0 0 after you place 
    0 0 0 0  the number 1 is the element  0 0 0 0 it when the user 
    0 0 0 0  that's going to enter in the  0 0 0 0 press the right 
1 0 0 0 0  row (3) from the left direction ->0 0 0 1 arrow key 

Das wäre das grundlegende Beispiel , jetzt das eigentliche Problem liegt, wenn Sie das nächste folgende haben:

0 3 0 3  there are many tokens around  0 3 0 3 after you place 
2 1 0 2 0  the matrix and when the user -> 0 2 1 2 it when the user 
    1 0 2 0  wants to input the next token  1 0 2 0 press the right 
    0 1 0 1  now it needs to behave like  0 1 0 1 arrow key 

1 0 2 0 die Reihe (1) und das nächste Token ist die Zahl 2, es muss auch alle seine Elemente verschmelzen werden eingegeben auf der rechten Seite der Zeile mit der neuen Benutzereingabe (die Nummer 2) resultierenden 0 2 1 2 als neu row (1), ich bin verwirrt in diesem Teil, weil ich die nächste Funktion für die LeftDirection-Eingabe aus einer Klasse Tabelle mit der aktuellen Matrix habe, aber ich bin stecken zu versuchen, eine Möglichkeit zur tatsächlichen Implementierung dieser Funktion zu denken

Alle Tipps/Hinweise würden sehr geschätzt werden! Danke im Voraus!

Pushori < - Sie können von hier aus einem Look des Spiels nehmen

Antwort

0

Also von dem, was ich aus dem Spiel gesammelt, der einfachste Weg, um die Zeile zu verschieben ist ... Nun, es ist schwer, kurz zu erklären - vielleicht einige Code wird helfen:

// We will assume that grid is the name of the matrix in the Table object 

public void enterFromLeft(int numToEnter, int row){ 

    for(int i = grid[row].length - 1; i > 0; i--){ 

     // Now we check if that spot is a 0 - if it is, 
     // we need to shift another number over to fill the space 

     if(grid[row][i] == 0){ 

      // Shifts the rightmost number to this spot by 
      // iterating from right to left over the row to find a non-0 number 

      for(int j = i; j > 0; j--){ 

       // Checks if the number is non-0 - and if it is, sets the 
       // empty space to said number and sets the number to 0 - 
       // This essentially moves the rightmost non-0 tile to the right. 

       if(grid[row][j] != 0){ 

        grid[row][i] = grid[row][j]; 
        grid[row][j] = 0; 

        j = -1; // Ends the for loop 

       } 

      } 

      // If grid[row][i] is still 0, it means that there were no non-0 
      // numbers in the regular grid, we will need to fill that space 
      // with numToEnter. If we do that, there will be no other numbers 
      // we need to shift right, so we can end the loop. 

      if(grid[row][i] == 0){ 

       grid[row][i] = numToEnter; 

       i = -1; // To end the loop 

      } 

     } 

    } 

} 

Ich habe dies nicht getestet, aber ich glaube, es wird funktionieren. Um Zahlen von rechts statt von links hinzuzufügen, ändern Sie die for-Schleifen, um den anderen Weg zu durchlaufen (und die Zahlen, um die Schleife zu beenden - ersetzen Sie -1 durch grid[row].length + 1).

Wenn Sie Fragen haben, Kommentar unten. Aber jetzt muss ich noch mehr Puschori spielen.

+0

Haha yah! das ist großartig, ich habe an etwas Ähnliches gedacht, aber ich habe stattdessen ein neues Array erstellt und es dem currentRow zugewiesen, aber das scheint viel passender zu sein! Danke Mann wirklich geschätzt! – NeptaliD

+0

Ja - Sie könnten möglicherweise ein anderes Array erstellen, aber im Allgemeinen, wenn Sie es innerhalb des Arrays tun können, sollten Sie - es spart Speicher. Das ist wahrscheinlich kein Problem, aber seine gute Praxis sowieso. –