Feb 152013
 

Im zweiten Teil der Level-Erstellung werden wir unserem Programm eine Methode hinzufügen, welche es ermöglicht, txt-Dateien zu lesen und diese auf dem Bildschirm darzustellen. Eine solche Datei sieht folgendermaßen aus:

1

Jedes Zeichen in einer solchen Datei steht für eine bestimmte Kachel (Grafikdatei), Leerzeichen stehen für leere Kacheln (ohne Grafik). Damit sind wir in der Lage, entsprechende Strukturen auf dem Bildschirm zu erzeugen. Am Ende der Lektion wird das deutlich, wenn wir das Ergebnis sehen. Also lasst uns anfangen.

Teil 1: Änderungen an der StartingClass

I. Zu Beginn werden wir ein paar neue Bilder hinzufügen.

1. Dafür sucht den folgenden Code:

und ersetzt diesen mit dem:

2. Nun müssen wir in der init()-Methode ein paar neue Tiles hinzufügen und die tileocean löschen. Also ändern wir diesen Code:

in diesen:

II. Download der benötigten Dateien

Natürlich benötigen wir noch die entsprechenden Bilder dazu. Bitte ladet diese herunter und kopiert sie in euren data-Ordner. Des Weiteren ladet auch die Datei „map1.txt“ herunter und kopiert diese auch in euren data-Ordner.

tiledirt tilegrassbot tilegrassleft tilegrassright tiledirt

map1

III. Nachdem wir alle benötigten Dateien eingepflegt haben, werden wir ein paar Änderungen an der start()-Methode durchführen.

In dieser Methode haben wir unsere doppelte Schleife, diese werden wir ersetzen, so dass unsere „map 1.txt“ geladen wird. Dazu nehmen wir diesen Code:

und ersetzen ihn mit dem folgendem:

Die ganzen Fehler, die momentan angezeigt werden, ignoriert ihr erst einmal. Dieser Code ist eigentlich selbst erklärend. Wir rufen die loadMap()-Methode auf, welche wir gleich erstellen werden, und geben ihr als Parameter die Datei „map1.txt“, welche wir gerade heruntergeladen haben.

Da wir hier mit einer Datei arbeiten, müssen wir in Java mit einem sogenannten try/catch Statement arbeiten. Dieses haben wir zu Beginn des Spiels schon einmal verwendet.

IV. Erstellen der loadMap()-Methode

Bewegt den Cursor auf loadMap und klickt dann in dem sich öffnenden Fenster auf Create method ‚loadMap(String)‘ . Das erzeugt gleich unter der start()-Methode folgenden Code:

Als Erstes müssen wir den Parameter string umbenennen in filename, so dass unsere Datei auch erkannt werden kann.

Da wir in dieser Methode mit einer Datei arbeiten, ergänzen wir noch nach unserer Methode folgenden Code throws IOException, was wir danach noch importieren müssen. Dies ist eine Möglichkeit,  in Java mit Ausnahmen umzugehen, diese ist etwas besser als try/catch. Jetzt sollten wir alle den folgenden Stand haben:

V. Bearbeiten der loadMap()-Methode

Diese Methode muss die folgenden drei Funktionen besitzen:

1. Eine ArrayListe erstellen und diese mit dem Code aus der txt-Datei füllen.

2. Eine doppelte Schleife beinhalten, um unsere Tiles zu erstellen.

3. Das entsprechende Bild zu dem entsprechenden Code, welcher aus der txt-Datei gelesen wird, zuordnen.

Um dies zu erreichen, initialisieren wir als Erstes ein paar Variablen. Diese sind eine neue ArrayListe und width (Breite) und height (Höhe), welche die Anzahl von Zeilen und Spalten in unserer Textdatei wiedergeben.

Wir benutzen danach eine while Schleife, um die ArrayListe mit den Zeilen aus der Textdatei zu füllen. Wenn eine Zeile mit ! beginnt, wird diese ignoriert.

Als nächstes geben wir width und height die entsprechenden Werte, damit sie ihre Funktion erfüllen können.

Nun fügen wir noch unsere doppelte for-Schleife ein, welche wir bereits mehrfach verwendet haben. Diese ist dazu da, unsere Tiles in den (i,j) Index einzufügen. Mit i für die X-Koordinate und j für die Y-Koordinate.

Als Letztes importieren wir noch BufferedReader und FileReader.

Die vollständige loadMap()-Methode müsste so aussehen:

In unserer Schleife überprüfen wir, welches Zeichen in dem entsprechendem Index i der momentanen Zeile ist, welcher unser Index j ist. Wir erstellen dann einen neuen Tile mit den entsprechenden Parametern, X- und Y-Koordinate und das dazugehörige Bild.

Da wir mit einer Text Datei arbeiten, ist alles, was wir aus dieser Datei lesen, ein Text. Unser Programm versteht die Zahl 1 nicht als integere Zahl, sondern als Text. Um diesen Text nun in eine Zahl zu verwandeln, nutzen wir die eingebaute Methode namens Character.getNumericValue(ch). Diese gibt unseren eingelesenen Text als Zahl aus, wenn es eine Zahl ist.

Der Sinn des if(i < line.length()){ Statements ist sehr einfach. Es stellt sicher, dass unser Index I niemals nach einem Zeichen sucht, welches gar nicht existiert. Wenn wir das nicht einfügen, können wir alle möglichen Probleme bekommen.

VI. Letzte Änderungen

Das Einzige, was wir nun noch tun müssen, ist, dem Konstrukteur zu sagen, welche Zahl zu welchem Bild gehört. Dazu öffnen wir die Tile Klasse und nehmen folgenden Änderungen an der if-Schleife vor:

Aber warum haben wir 2, 4, 5, 6, 8 als Zahlen genommen?

Das ist ganz einfach, schaut mal auf euer NumPad:

516509462

Wir nutzen nun die Tasten mit den Pfeilen, um anzeigen zu lassen, wo unsere Oberfläche bzw. das Gras ist, oben, unten, rechts und links. Und die Zahl 5 ist einfach Erde ohne Gras.

Schaut euch nun mit diesem neuen Wissen die Textdatei erneut an. Nun sollte jedem klar werden, was die ganzen Zahlen und Leerzeichen bedeuten.

Wenn wir unser Programm nun starten und den Roboter wenig laufen lassen, bekommen wir das folgende Bild.

2

In der nächsten Lektion werden wir ein paar Kollisionen in das Spiel einfügen. Ihr könnt momentan noch nicht auf diesen Berg hüpfen oder dagegen rennen, da wir das einfach noch nicht programmiert haben.

Falls ihr Fragen habt, immer raus damit, ich helfe euch sehr gerne. Hinterlasst bitte einfach einen Kommentar.

Teilt diese Seite mit euren Freunden und besucht uns mal auf Facebook und auf Google+, das würde dieser Seite wirklich weiterhelfen, danke sehr. Auch ein Klick auf die Werbung hilft dabei, diese Seite am Laufen zu halten.

Source Code

Für diejenigen unter euch, die hier einsteigen möchten, ohne den ganzen Code abtippen zu müssen, habe ich das Projekt exportiert. Mit der Importfunktion könnt ihr das Projekt bequem bei euch einfügen. Unter der Kategorie Eclipse und Java > Import und Export habe ich erklärt, was dafür zu tun ist.

Kapitel 3 Lektion 2

Quelle: Original Anleitung auf englisch von Kilobolt Studios

Lektion 1 – Level erstellen Teil 1 Lektion 3 – Level erstellen Teil 3