Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

15.06.2012, 09:53

Unterschiedliche Fähigkeiten mit unterschiedlichen Zielen und Eingaben

Es geht um folgendes:

In einem Spiel gibt es Fähigkeiten mit verschiedenen Zielen, wie z.B. Fähigkeiten, die eine Koordinate brauchen (Bewegung, der in RTS Spielen berühmte Angriffbefehl), ein einzelnes Ziel (ein normaler Angriff, ein Feuerpfeil), eine Koordinate brauchen und dann mehrere Ziele treffen (Ein Feuerregen z.B.), die auf sich selbst gerichtet werden (Heilung), die auf sich selbst gerichtet werden aber mehrere Objekte treffen, die ein Ziel treffen und dann weiterspringen, usw. ich denke ich habe genug aufgezählt :D

Diese Fähigkeiten brauchen jetzt auch noch unterschiedliche Eingaben und entweder ein einzelnes Ziel oder die Liste aller Objekte im Effekt Gebiet oder auch garnichts.

Mein erster Ansatz für ein RTS Spiel war folgender:
Maximal wird das drücken einer Taste und ein Mausklick für jede Fähigkeit benötigt.
Eine Fähigkeit wird über eine Taste ausgewählt und auf den Status Aktiv gesetzt (bzw. ich hab den Code der Taste einfach gespeichert).
In Fall eines Rechtsklicks wird dies wieder deaktiviert, im Falle eines Linksklicks geprüft, ob die Eingabe sinnvoll ist (Eine Einheit z.B., wenn die Fähigkeit nur ein Ziel erlaubt). Wenn sie sinvoll ist, wird sie ausgeführt, ansonsten wird weiter auf eine sinvolle Eingabe gewartet.
Jede Fähigkeit hat in ihrer execute Methode einen Parameter für die komplette Einheitenliste, sodass im Fall, dass mehrere Einheiten getroffen werden sollen, die Einheiten heraus gesucht werden sollten, die die Bedingung der Fähigkeit erfüllen.
Auch für einzelne Ziele wird dieser Ansatz gewählt, jede Einheite hat eine Kennnummer, mit welcher die Einheit aus der Liste gesucht wird.
Andere Fähigkeiten ignorieren die Liste.

Dann sollten wir in der Schule ein Konsolen Adventure/RPG entwickeln.
Der Ansatz von oben ließ sich nicht einfach so übernehmen, da ich unterschiedliche Eingaben brauchte.
Für eine Koordinate sind zwei Eingaben nötig (Ich habe das ganze so umgesetzt, das immer nur eine Eingabe, ein ganze Zahl, eingeben wird), für einzelne Ziele eine, für selbstgerichtete Fähigkeiten keine. Von einem interface habe ich dann verschiedene Grundfähigkeiten abgeleitet, die eine Methode implementieren, die den Typ der Fähigkeit (Einzelziel, Gebietseffekt..) zurückgibt. Diese Klassen deklarierten auch Methoden, die nötig waren um das Ziel zu übernehmen, da ich der execute () Methode keinen Parameter für die Liste der Objekte übernimmt (bin mir nicht sicher, ob das überhaupt ein guter Ansatz ist). Da die Zeit etwas knapp war, hab ich dann einfach je nach Typ runtergecastet, die Eingabe empfangen, das Ziel übergeben und dann ausgeführt.
Natürlich ist dies ein sehr problematischer Ansatz, insbesondere wenn Fähigkeiten gemischtes Verhalten aufweisen sollen und ich bin nicht besonders zufrieden damit.
Der erste Ansatz stellt mich aber auch nicht zufrieden, kennt jemand eine bessere Lösung?

E: Hab ganz vergessen zu sagen, dass das Konsolenspiel noch von uns erweitert werden soll, auch die Möglichekeit eines GUIs besteht.
Das Kampffeld wird wie ein Schachbrett aufgebaut sein, im Prinzip könnte man jetzt hier wieder den ersten Ansatz wählen. Ich wäre allerdings an einem allgemeinen interressiert, der überall eingesetzt werden kann.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Rexona for men« (15.06.2012, 10:04)


RmbRT

Treue Seele

Beiträge: 169

Wohnort: Darmstadt

Beruf: Student

  • Private Nachricht senden

2

15.06.2012, 16:24

Scheint so, als müsstest für jede Fähigkeit eine eigene Analyse der Eingabe schreiben,
die dann die für die einzelne Fähigkeit geschriebene Funktion aufruft (Natürlich nur, wenn die Analyse ergeben hat, dass die Fähigkeit gültig und gewollt ist usw.).
Hoffe, das war nicht aneinander vorbei geredet (oder geschrieben ;)).
MfG, RmbRT
"Dumm ist, wer dummes tut."

3

17.06.2012, 17:18

Naja, genau das mach ich ja im Prinzip in meinem ersten Ansatz.

Wobei ich es so gemacht habe, dass ich praktisch in der Eingabe Funktion prüfe über eine Methode die einen bool zurück gibt.
Deine Variante, die Fähigkeiten Funktionen innerhalb der Prüfmethode auszuführen, würde das schonmal etwas entzerren.

Werbeanzeige