Ich möchte in diesem Thread Ueberlegungen zum "Programm-Konzept" meines ersten richtigen Mini-Spiel vorstellen.
Lernerfahrung zu sammeln ist für mich dabei sehr zentral und deshalb geht es mir darum, die einzelnen Schritte einmal selbst entwerfen zu können.
Da ich noch ein Anfänger in der C++ Programmierung bin, bin ich einmal mehr auf eure kompetente Hilfe angewiesen :-D
Ich möchte noch vorausschicken, dass es mir in erster Runde nicht um die Grafik, resp. die Darstellung geht. Die Darstellung darf also sehr zweckmässig sein oder vielleicht sogar ganz fehlen. Viel wichtiger ist es mir, zu versuchen ein Konstrukt aufzubauen, welches stabil, schlicht und überschaubar ist. Im Idealfall vielleicht sogar elegant - obwohl dies mit meinen jetzigen Fähigkeiten vermutlich ein nur schwerlich erreichbares Ziel darstellt.
Also genug der langen Worte (:
Was mir vorschwebt ist folgendes:
Der Spieler soll auf einer 2D-Map eine Figur steuern können, welche folgende Aktionen beherrscht:
- Laufen
- Angreifen
- Items aufsammeln
- Items ablegen
- (Türen öffnen)
Gegner sind als bewegungslose, passive Objekte auf der Karte verteilt.
Werden sie angegriffen, verlieren sie Energie und werden gelöscht, wenn ihre Lebensenergie aufgebraucht ist.
Ich bin noch etwas unschlüssig ob ich bereits in erster Runde versuchen sollte, eine Kollisionsabfrage mit einzubauen (deshalb steht "Türen öffnen" in Klammern).
Ich habe versucht eine Art Konzept auszuarbeiten, wie das Spiel in seinem Kern konzipiert sein könnte.
Kernuberlegungen waren für mich zwei Dinge:
1) Es existiert ein Engine-Objekt, das alle weiteren Objekte verwaltet (quasi als Administrator) und die Funktionen für den eigentlichen Spielablauf zur Verfügung stellt, sowie Funktionen bereit stellt, deren Aufgaben stark generalisiert werden können und objekt-unspezifisch sind.
2) Die Objekte lassen sich miteinander verknüpfen und erlauben über ihre Methoden einen Daten-Austausch.
So soll z. B. der Spieler ein zuvor aufgesammeltes Objekt für seine Angriffs-Methode nutzen können, indem er per Get-Funktion die Attribute der Waffe anfordern kann.
An dieser Stelle mal die Grafik, die das ganze veranschaulichen soll:
Klassen-Objekte: Gelb / Zeiger: Rot / Listen: Blau
Ich hoffe es ist für euch mehr oder weniger lesbar.
Jedenfalls ist mir aber irgendwie noch nicht klar, wie ich es bewerkstelligen soll, dass ein Item auf zwei verschiedene Klassen zeigen kann.
In der Grafik fehlt z. B. noch die Klasse Kreatur. Idealerweise sollte ein Objekt-Item mit der gleichen Zeiger-Variable auf eine Player-Instanz oder eine Kreatur-Instanz zeigen können.
Das selbe gilt für die Attacken-Objekte (Ich habe mir überlegt, eine Attacke als Objekt zu designen, damit ich die Kreaturen einfach gegen die Attacken-Objekt-Liste abfragen kann).
Eine Attacke könnte ja von einem Player oder einer Kreatur kommen. Zwei separate Zeiger einzusetzen, je nach dem, wer die Attacke "besitzt", scheint mir nicht gerade elegant zu sein.
Wie denkt ihr darüber? Ich habe wirklich keine Ahnung, wie solche oder ähnliche Spiele grundsätzlich intern aufgebaut sind - und weshalb sie so aufgebaut sind.
Ich bin dankbar für jeden Input! :)
Gruss starcow