#R1 Tower Defense: Das Grundgerüst

Stephan (XeNonski) hat vor ein paar Tagen unsere kleine Tower Defense Challenge "ausgerufen". Das kann ich natürlich nicht auf mir sitzen lassen und untätig bleiben. Der Ruf nach Rum und Ehre - oder war es Ruhm? - muss Folge geleistet werden. Nach dem Update von A Tiny Painter habe ich jetzt ein paar freie Ressourcen für unsere kleine Challenge. Zur Zeit überlege ich mir noch das Setting von dem Spiel, allerdings ohne große Erfolge. Falls ihr ein paar tolle Ideen habt, immer her damit an @BigRob154 oder an @EmberoGames. Das hindert mich aber nicht daran die Entwicklung zu starten. Schließlich ist jeder gezielte Fortschritt auch ein messbarer Fortschritt. Kleine Erfolge motivieren ungemein, deswegen die Ziele in viele kleine Schritte unterteilen. Da ich schon einige Jahre als Software-Entwickler auf der Kappe habe wurde der Data-Driven-Approach gewählt. Klingt hochgestochen ist aber ganz einfach. Man baut seine Szenen / Level nicht mühselig im Code sondern lagert alle konfigurierbaren Daten aus. Das Programm liest die Daten einfach ein und baut daraus den Level. Abstrahiert man diesen Schritt noch etwas weiter, kann man sogar ganze Level oder Kampagnen in externe Daten auslagern - das ist natürlich mein Ziel. Der Vorteil dieser Methode besteht in drei wesentlichen Dingen:
  1. Vereinfachung des Codes / bessere Wartbarkeit
  2. Keine Neukompilierung für Änderungen / einfacheres Testen
  3. Eigene Level / Mods (Yay)
Durch die Auslagerung des eigentlichen Inhalts und deren Konfiguration spart man enorm viel Code. Von der Architektur-Seite her, kann man sich auf die wesentlichen Aufgaben des Programms konzentrieren - Steuern, Laden, Darstellen. Ausserdem lässt sich durch diese Struktur neuer Inhalt einbauen ohne das man das eigentliche Programm anfassen muss. Die Vorteile liegen auf der Hand. Für die Meta-Informationen wie zum Beispiel Wegpunkte, Hintergrundmusik usw. verwende ich eine JSON-Datei:
{
    "waypoints":[ {"x":4,"y":8} ],
    "waves":[
        { 
            "enemies":[
                {"name": "Cube1"},
                {"name": "Cube1"},
                {"name": "Cube2"},
                {"name": "Cube1"}
            ] 
        }
    ]
}
Der Level-Aufbau / das Layout wird über eine PNG-Datei gesteuert. Jeder Pixel im Bild steht für eine Gitter-Position im Spiel. Ein Bild von 9x9 Pixeln bildet ein Spielfeld mit einem Gitter von 9x9 Feldern (Bild stark vergrößert): Level Grid Die Farben stehen für bestimmte Objekte. "Weiß" steht hier für ein Weg-Element, "Grün" für Plattformen auf denen Türme aufgestellt werden können, "Gelb" ist der Spawn-Bereich der Gegner und "Rot" ist das Herzstück, das die Gegner nicht erreichen dürfen. Zum Schluß noch ein Bild wie das ganze zur Zeit in Unity3D aussieht. Data Driven Tower Defense Approach Wenn ihr Fragen oder Anregungen habt schreibt mich einfach auf Twitter oder Facebook an.
Follow Me

Robin

Software Engineer at day, Indie Dev at night.
Follow Me

Latest posts by Robin (see all)