2017-12-21 3 views
0

Also mein Problem ist, ich muss dieses Labyrinth-Spiel erstellen. Alles funktioniert gut, außer nach Süden im "Labyrinth". Also scanne ich wo der Spieler hingehen möchte und bearbeite dabei den Platz des Players "P" in einem Array. Dies funktioniert gut, um nach Norden, Osten oder Westen, aber nicht nach Süden zu gehen.Java Maze Spiel Fehler in nur eine Richtung gehen, mit Array

Hintergrund zum Code: Also habe ich ein 11 * 11 Array und in einem der Elemente ist das gleich P. Basierend auf Benutzereingaben geht dieses P nach Norden oder Süden oder Osten oder Westen, vorausgesetzt es gibt keine Wand (angezeigt als ---).

for (int i = 0; i < currentPos.length; i++) { 
    for (int j = 0; j < currentPos[0].length; j++) { 
     if (currentPos[i][j].equals("P")) { 
      if (direction.equals("north")) { 
       if (currentPos[i - 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i - 2][j] = "P"; 

        break; 

       } 
      } 
      if (direction.equals("south")) { 
       if (currentPos[i + 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i + 2][j] = "P"; 

        break; 

       } 
      } 
     } 

    } 
} 

Der Import Teil wäre die [i-2] [j] oder [i + 2] [j] Teil I guess. Ich habe hier nur zwei Richtungen platziert, aber die anderen 2 funktionieren gut mit [i] [j-2] und [i] [j + 2].

Bevor ich nach Wänden suchte (die if [i-1] [j] .equals ("---")) {), würde der Süden immer einen Fehler außerhalb der Grenzen geben. Jetzt, wo ich nach einer Wand suche, geht es einfach nach Süden, bis es an eine Wand stößt.

Antwort

1

break bricht nur aus der innersten Schleife, so dass es nur die Verarbeitung der aktuellen Zeile beendet, und Ihr Programm wird dann in der nächsten Zeile fortgesetzt.

Dies ist kein Problem Ost oder West: Da der Spieler in der gleichen Reihe endet und Sie die Reihe abbrechen, finden Sie den Spieler nicht wieder. Es ist auch kein Problem, nach Norden zu gehen: Da der Spieler in einer zuvor bearbeiteten Reihe landet, wirst du ihn nicht wieder finden.

Wenn Sie jedoch nach Süden gehen, finden Sie den Player in der nächsten Reihe wieder und verschieben ihn um einen weiteren Schritt nach unten. Dann wirst du wieder auf sie treffen und sie offensichtlich wieder bewegen. Über und über.

Um dies zu vermeiden, stoppen Sie VOLLSTÄNDIG nachdem Sie den Player gefunden haben. Suche nicht weiter nach dem Spieler. Ohne dass Sie mehr über Ihren Code wissen, besteht eine Möglichkeit darin, ein Loop-Label zu verwenden, um beide Schleifen zu trennen:

outerloop: 
for (int i = 0; i < currentPos.length; i++) { 
    for (int j = 0; j < currentPos[0].length; j++) { 
     if (currentPos[i][j].equals("P")) { 
      if (direction.equals("north")) { 
       if (currentPos[i - 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i - 2][j] = "P"; 

        break outerloop; 

       } 
      } 
      if (direction.equals("south")) { 
       if (currentPos[i + 1][j].equals("---")) { 
        continue; 
       } else { 
        currentPos[i][j] = " "; 
        currentPos[i + 2][j] = "P"; 

        break outerloop; 

       } 
      } 
     } 

    } 
} 
+0

Danke, Alter! Lief wie am Schnürchen. Danke für die Erklärung, war wirklich nützlich! – Joris