Array mit statischem Level

ksa06

Mitglied
Hallo, ich habe momentan ein Problem mit Arrays.
Momentan wird ein char-Array eingelesen und ausgegeben. Das sieht in etwa so aus:
Code:
#######

# @ # #

#$. $ #

#     #

# .   #

#     #

#######

@ steht für die Spielfigur, $ für eine Box, # für eine Wand und . für das Zielfeld.

Nun möchte ich die daraus zwei arrays erstellen - eine für die statischen, eine für die dynamischen Objekte.
Das soll dann etwa so aussehen für das statische Array:
Code:
#######

#   # #

# .   #

#     #

# .   #

#     #

#######

und so für das dynamische array:
Code:
  @ 

 $  $
Wie mach ich das?
Beide Arrays sollen dieselbe Größe haben.
Zur Zeit sieht der code wie folgt aus:
Code:
        BufferedReader bufferedReader;

        try {

            bufferedReader = Files.newBufferedReader(Paths.get(path));

            bufferedReader.mark(READ_AHEAD_LIMIT);

            String line;

            while ((line = bufferedReader.readLine()) != null) {

                sizeY++;

                sizeX = line.length();

            }



            bufferedReader.reset();

            room = new char[sizeY][];



            int i = 0;

            while ((line = bufferedReader.readLine()) != null) {

                room[i++] = line.toCharArray();

            }

            bufferedReader.close();

        } catch (IOException e) {

            return false;

        }
 
Du könntest deine Datei mittels BufferedReader#read(); Zeichen für Zeichen einlesen und prüfen was es für ein Zeichen ist.
Je nach dem weißt du ja in welches Array du das Zeichen speichern willst.

Wenn read(); -1 zurück gibt weißt du, dass du am Ende des Streams angekommen bist.

Um die Stelle im Array festzuhalten kannst du eine Laufvariable mitzählen lassen, die die Stelle im Array repräsentiert. Diese inkrementierst du immer dann wenn du ein Zeichen eingelesen hast.

Gruß
Robert
 
Ich habe die Datei ja bereits eingelesen und gespeichert. Kann ich anschließend zwei Methoden erstellen, die das vorhandene Array überprüfen und bestimmte Zeichen durch andere Zeichen ersetzen?(z.B. # durch ein Leerzeichen?) Falls ja, wie müsste so eine Methode aussehen? Irgendwie so?:
Code:
if (line.charAt(j) == "$"){
line.charAt(j) == " ";
}
 
Ja das kannst du schon machen aber ich dachte du willst dein Array in 2 versch. Arrays aufteilen?
Oder hab ich etwas falsch verstanden?

Was du erreichen willst wäre mMn beim einlesen sinnvoller als danach.
 
Java:
world = new char[size[Y]][];
room = new char[size[Y]][];

while ((line = bufferedReader.readLine()) != null) {
   world[i] = new char[line.length()];
   room[i] = new char[line.length()];

   for (int j = 0; j < line.length(); j++) {
       room[i][j] = line.charAt(j);
       world[i][j] = line.charAt(j);

       if (world[i][j] == WALL) {
           world[i][j] = FREE;
       }
       if (world[i][j] == GOAL) {
           world[i][j] = FREE;
       }
       if (room[i][j] == BOX) {
           room[i][j] = FREE;
       }
       if (room[i][j] == PLAYER) {
           room[i][j] = FREE;
       }
   }
   i++;
}
bufferedReader.close();

So siehts jetzt aus und es funktioniert. 🙂
 
Zuletzt bearbeitet von einem Moderator:
Ich habe dort ja mehrere $. Wie kann ich nun jede Position einzeln als Attribut speichern?
Code:
case BOX:
                           freeBox++;
                           box = new int[]{j, i};
So wird doch wahrscheinlich nur immer eine Box gespeichert, oder?
 
Du könntest eine ArrayList mit allen "boxen" erstellen und jedesmal wenn du ein $ findest eine neue "Box" hinzufügen.

Übrigens: Anstatt eines int[] Arrays könntest du auch die Klasse Point benutzen welche eine x und y Koordinate speichern kann.
Lässt sich eventuell (je nach dem was du später machen willst) besser handeln.

Gruß
Robert
 

Neue Themen


Zurück
Oben