Seite 1 von 1

[Projekt] Tower Defense Evolution

Verfasst: 12.05.2009, 20:41
von Mandriva
Hallo ZFXler,

Einleitung
In diesem Thread werden ich euch über die Entwicklung meines ersten Spiels "Tower Defense Evolution" (Arbeitstitel) informieren. Das "Evolution" im Titel bezieht sich auf die Entwicklung des Spiels. Es gibt keinerlei Design Dokument und UML Diagramm. Dementsprechend musste ich schon viel Code umschreiben und anpassen.
Mein Ziel ist es, mit diesem Projekt Erfahrung im Bereich Spielprogrammierung zu sammeln um dann nach diesem Projekt ein Tower Wars Spiel (Die Spieler schicken sich gegenseitig Creeps) zu programmieren, welches über das Internet gespielt wird. Eine Tower Defense ist sozusagen der Einzelspielermodus und die dabei erworbenen Kenntnisse sollen mir dabei helfen, dass Multiplayerspiel auf ein gutes Fundament zu stellen. Deshalb ist es nicht mein Ziel, dieses Spiel zu vollenden.

Was ist eine Tower Defense?
Eine Tower Defense ist ein Spiel, bei dem der Spieler auf einem Spielfeld Türme baut um damit sogenannte Creeps zu vernichten. Diese Creeps sind die eigentlichen Gegner in diesem Spiel und sie sind ziemlich dumme Kreaturen, da sie nur einem Pfad folgen und sich von den Türmen beschießen lassen. :D
Für das Vernichten von Creeps gibt es neue Credits, mit denen neue Türme gekauft und bereits gebaute Türme verbessert werden können. Die Creeps kommen in Wellen, wobei jede Welle einem Level entspricht. Ist eine Welle besiegt, erscheint die nächste Welle.
Sobald eine gewisse Anzahl an Creeps den Endpunkt erreicht hat, ist das Spiel verloren.

Technische Umsetzung
Das Spiel wird in C# mit XNA 3.0 Beta geschrieben. Demzufolge wird es nur auf Windows PCs laufen (und eventuell auf der XBox). Die Hardwareanforderungen des Spiels werden sehr gering sein, da nur 2D Grafik zum Einsatz kommt.

Implementierungen im Detail
Hier werde ich Postings von mir verlinken mit Erklärungen zur Implementierung bestimmter Techniken in meinem Spiel. Was ist bereits implementiert?
  • Hintergrundmaske für das Interface
  • Dateiformat für Karteninformationen
  • Klasse zum Laden der Karten
  • Darstellung des Spielfeldes
  • Creeps
  • Türme
ToDo
  • Grafiken für Buttons erstellen
  • Spielinformationen oben rechts einblenden (Credits, Leben, Level)
  • Strategien für Türme implementieren (worauf schießt mein Turm)
  • ...
  • diverse Verbesserungen am Code vornehmen
Bilder

Re: [Projekt]Tower Defense Evolution

Verfasst: 12.05.2009, 21:36
von Schrompf
Hat Potential, denke ich :-) Vor allem die Spielmechanik gegeneinander könnte später lustig werden... wenn man nicht nur grübelt, wo man welche Türme hinbaut, sondern auch, wieviel des eigenen Geldes man dem Gegner in Monsterform um die Ohren haut. Denn wenn er es überlebt, hat er damit ja einen Haufen neues Geld, dass demnächst postwendend auf die eigenen Verteidigungen losmarschiert.

Viel Erfolg!

Re: [Projekt]Tower Defense Evolution

Verfasst: 12.05.2009, 23:43
von Lord Delvin
Thomas Bialik hat geschrieben:Es gibt keinerlei Design Dokument und UML Diagramm. Dementsprechend musste ich schon viel Code umschreiben und anpassen.
Naja ohne Erfahrung in dem Gebiet wärst du ja auch garnicht in der Lage gewesen sowas in einer Qualität zu schreiben, dass mans nicht dauernd ändern muss. Und für einmann Projekte kann ichs ehrlich gesagt nicht empfehlen. Vor allem UML nicht, weil man leider doch schneller den Code hingeschrieben hat, als mit mir bekannten Editoren das Diagramm gemalt und dann müsste man ja immernoch den Code schreiben:-/

Ansonsten is denk ich ein ganz gutes Einsteigerprojekt und wenn man mal inspiration braucht kann man ja wc3 mapedit aufmachen:D

Re: [Projekt] Tower Defense Evolution

Verfasst: 17.05.2009, 11:59
von Mandriva
Hallo,

Heute gibt es ein Update mit meinen Fortschritten.

Es gibt nun eine richtige Karte, welche über eine Klasse geladen wird. Dazu gibt es ein einfaches Dateiformat, welches aus einer Textdatei ausgelesen wird. Es ist auch möglich, Creeps über das Spielfeld zu schicken (blaues Rechteck auf dem Screenshot). Türme schießen nun auf den Creep und können ihn zerstören. Das Zusammenspiel von Türmen und den Geschossen hat mich viel Zeit gekostet, aber jetzt scheint es so zu laufen wie es soll. Die Türme haben einen Cooldown und schießen dementsprechend nur dann, wenn dieser vorbei ist.
Somit kann ich nun sagen, dass das Spiel grob funktionsfähig ist und nur noch diverse Features fehlen und nicht zu vergessen...ich muss noch einen Haufen Grafiken erstellen...
Der Screenshot ist nicht besonders gut, aber wenn man genau hinsieht, erkennt man den roten Schuss des oberen Turms (Linie zum Creep).

Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 17.05.2009, 15:00
von Chromanoid
Ich hab mal das Multiplayer Towerdefense, wo du mitgearbeitet hast, gespielt. Hat echt Spaß gebracht, einzig der Sound war etwas nervig auf Dauer. Da sollte man eine Funktion zum ausstellen einführen (falls es noch keine gibt)...

Wenn dieses hier so ähnlich wird, dann bin ich schon sehr gespannt und voll Vorfreude :).

LG
Christian

Re: [Projekt] Tower Defense Evolution

Verfasst: 17.05.2009, 15:57
von Mandriva
Hi Chromanoid,

Ich hab das früher auch gerne gespielt, aber mittlerweile nervt der Sendebug einfach zu sehr und ich finde den Fehler nicht. Da ich von Netzwerkcode auch keine Ahnung habe, weiß ich nicht wo ich da noch suchen soll.
Der Sound ließ sich schon immer über F2 ausschalten, was aber fehlerhaft implementiert war. Das war einer der ersten Fehler den ich behoben habe. Der Sound bleibt nun solange man spiel aus und er lässt sich in jedem Fenster (auch im Chat) abstellen.

Spielerisch wird es definitiv in diese Richtung gehen, wobei ich mehr Wert auf den Server legen möchte mit Möglichkeiten um Clans zu gründen, eigene Räume erstellen etc. Aber bis dahin ist es noch ein weiter Weg.


Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 17.05.2009, 16:56
von Chromanoid
Thomas Bialik hat geschrieben:wobei ich mehr Wert auf den Server legen möchte
Vielleicht wäre JXTA auch einen Blick wert... (P2P Framework unter anderem für Java und C implementiert)...
https://jxta.dev.java.net/

Ist zwar aufgrund Komplexität recht schwierig zu lernen, aber meine ersten Versuche damit fand ich recht vielversprechend...

Re: [Projekt] Tower Defense Evolution

Verfasst: 20.05.2009, 10:53
von Mandriva
Hallo,

Danke für den Tipp Chromanoid, ich werde mir das dann bei Bedarf genauer ansehen.

Ich habe wieder kleine Fortschritte gemacht. Wie auf dem Screenshot zu sehen, haben Creeps nun einen Trefferpunktebalken, der Anzeigt wieviel HP ein Creep noch hat und er verfärbt sich von grün über rot mit abnehmender HP Zahl. Das Upgraden von Türmen nimmt nun auch Zeit in Anspruch, was sich anhand des blauen Balkens verfolgen lässt. Ein Turm kann in dieser Zeit nicht angreifen.
Ich habe auch ein paar Grafiken für die noch ungenutzten Schaltflächen erstellt. Bisher funktionieren nur upgrade, sell und der erste Turm.

Mein nächster Schritt ist nun dafür zu sorgen, dass das Bauen von Türmen auch Zeit in Anspruch nehmen wird. Und danach werden die Turmstrategien eingebaut.

Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 24.05.2009, 11:47
von Mandriva
Hallo,

Ich habe wieder kleine Fortschritte gemacht. Es können nun Strategien für die Türme eingestellt werden, wobei die Strategien "closest" und "farthest" noch nicht implementiert sind.
Das Bauen von Türmen benötigt nun auch Zeit und das Verkaufen wird auch noch Zeit benötigen, sobald ich es implementiert habe.
Es gibt jetzt einen weiteren Turm, den Splashtower. Er schießt wie der Standardturm einen Laser, welcher sich aber in viele Laser splittet, sobald er das Ziel trifft. Dadurch kann er allen angrenzenden Creeps ebenfalls Schaden zufügen.
Momentan bin ich damit beschäftigt, die optimale Position für Schadensberechnung etc. zu bestimmen. Jetzt versuche ich, soviel wie möglich in die Klassen der Geschosse zu verlagern, wo das meiste vorher in den Turmklassen war.
Türme sollen später nur noch angeben, welches Geschoss verwendet wird und dass geschossen werden darf, der Rest wird von den Geschossen erledigt.


Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 02.06.2009, 22:28
von Mandriva
Hallo,

Heute gibts mal kein Update, sondern ich habe ein kleines Problem. Ich möchte meine Creeps rotieren (um deren Mittelpunkt), jedoch verschiebt sich meine ganze Textur, wenn ich den Ursprungspunkt für die Rotation angebe. Wenn ich 0/0 nehme, dann wird das Objekt zwar richtig positioniert (nicht verschoben), jedoch ist die Rotation entsprechend nicht um den Mittelpunkt. Setze ich die Rotation zum Mittelpunkt, dann wird die Textur schon zu einer anderen Position hinbewegt, wodurch diese vom Pfad abweicht. Der Mittelpunkt liegt dann dort, wo die Positionskoordianten sind. Ich glaube nicht, dass dies im Sinne des Erfinders ist. Würde ich nun die halbe Breite und Höhe der Textur bereits berücksichtigen in der Position der Creeps, würden sie wohl richtig gezeichnet werden. Weiß jemand woran das liegt?


Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 03.06.2009, 19:28
von Zudomon
Hi!
Das hört sich eigentlich nach einem einfachen Problem an, was man sicher schnell lösen könnte, wenn man es vor sich hätte. Man müsste wissen, wie das ganze grundlegend verwaltet wird. Die Einheiten sollten so konstruiert sein, das die ein Quadrat bilden (wird ja schon so sein) und das Zentrum genau im Mittelpunkt liegt, also bei (0|0).
Ich gehe dabei jetzt einfach davon aus, das alles auf der X,Y Ebene abbgebildet wird.
Am einfachsten haste es eigentlich, wenn du das ganze normalisiert darstellst, also die Eckpunkte würden dann auf (-1,-1), (1, -1), (-1, 1) und (1, 1) liegen. Somit hättest du schonmal ein gewöhnliches Sprite, welches du Anhand der Matrix transorfmieren kannst. Starten tust du mit einer Skalierungsmatrix, die letztlich angibt, wie groß die Einheit abgebildet wird. Hätte dein vorgebenes Gitter eine Unitgröße von 1, also ein Kästchen pro Einheit, müsstes deine Skalierungsmatrix einen Wert von 0.5 haben, um genau ins Kästchen zu passen. Da die Kantenlänge des Sprites ja 2 ist.
Anschließend kommt die Rotation-, und schließlich die Translationsmatrix.
Das wichtigste bei solchen Spielen ist meiner Meinung, das man sich die Grundvorraussetzungen so einfach wie möglich macht.
Ich würde das Gitternetz nun so legen, dass es bei (0, 0) startet und bei z.B. 64 Kästchen dann bei (64, 64) endet.

Es hört sich so an, als ob bei dir entweder der Mittelpunkt einer Einheit nicht im Zentrum ist, oder das die Matrizenreihenfolge falsch ist.

Gruß
Zudo

Re: [Projekt] Tower Defense Evolution

Verfasst: 09.06.2009, 14:07
von Mandriva
Hi,

Also das Problen ist in dem Sinne eigentlich kein Problem, da ich durch Verschiebung der eigentlich Position zum gewünschten Ergebnisse komme. Ich benutze zum Zeichnen einfach die Draw Methode der SpriteBatch Klasse ohne irgendwelche Matrizen nutzen zu müssen.
Ich habe zwar an meinem Projekt weiter gearbeitet, aber weniger als ich eigentlich wollte, da mir im Moment einfach ein bischen die Lust fehlt. Tower sind alle integriert, bis auf den letzten. Da muss ich mir noch überlegen, was der so besonderes machen soll. Creeps rotieren schön in die Richtung, in die sie wechseln. Das gesamte Design habe ich verkleinert, sodass Türme und Creeps nur noch 16x16 Pixel groß sind (halb so groß wie vorher).


Gruß Thomas

Re: [Projekt] Tower Defense Evolution

Verfasst: 12.07.2009, 01:10
von Eisflamme
Creepsmash rulez. Mal sehen, ob Du dagegen ankommst. Aber da du ja nicht im lame Java arbeitest (*duck*), hast Du ja viel mehr Möglichkeiten. Ich mein, CSB könnte auch OGL oder so nutzen aber was soll's. :)

Re: [Projekt] Tower Defense Evolution

Verfasst: 12.07.2009, 03:17
von Chromanoid
Java kann alles! :D Java hat nämlich das Java Native Interface, um zum Beispiel Windows DLLs einzubinden. Man kann auch DirectX und weiß der Geier was benutzen. Es kommt darauf an, ob eben solche DLLs und Schnittstellen für alle plattformen angeboten werden. Es gibt da zum Beispiel die Lightweight Java Game Library, die es einem ermöglicht ohne plattformspezifischen Code Spiele plattformunabhängig mit OpenGL und OpenAL mit Leichtigkeit zu entwickeln...

PS Sorry für das offtopic aber das konnte ich einfach nicht so stehen lassen :D

Re: [Projekt] Tower Defense Evolution

Verfasst: 12.07.2009, 16:15
von Eisflamme
Ich sammel meinen Müll lieber selbst :P

Re: [Projekt] Tower Defense Evolution

Verfasst: 13.07.2009, 22:42
von Mandriva
Hi,

Thema Offtopic:
Kleine Exkurse sind vollkommen okay finde ich. Nur sobald das Hauptthema völlig zurückbleibt, sollte man die Themen trennen.

Zum Projekt:
Wie schon im letzten Post angedeutet, ist dort Stillstand. Ich konzentriere mich wieder auf CreepSmash. Im August soll Version 0.5.5 erscheinen, in der dann hoffentlich keine Bugs mehr vorhanden sind. Dann wird Version 1.0 in Angriff genommen mit komplett neuem Code.


Gruß Thomas