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.2009, 23:51

Gegnerhorde verwalten

Hey,
Ich habe mir mal gedanken gemacht, wie man größere gegneranzahl verwalten kann.
Hierbei mein ich nicht viele Gegner der gleichen Sorte, sondern wie man es schafft viele verschieden Gegner am besten in seinem Code verwaltet.
Also zum beispiel in einem RPG gibt es ja Nahkampf-,Fehrnkampf-,Magie- Gegner.
Dies können ja alle laufen, haben aber verschieden Bilder und verschiedene Skills.
Schreibe ich also für jeden Gegner eine Klasse,die durch vererbung von einer grundlegenden "Gegner-klasse" abgeleitet ist oder schreibe ich eine Klasse die alles beherscht und lade dann jeweils einen Array aus einer Datei und prüfe welche von den Skills er beherscht?
Oder gibt es da noch ganz ander Möglichkeiten das zu regeln?

lg dna

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

2

16.06.2009, 07:06

Am sinnvollsten ist natürlich dann die Vererbung. Dann kannst du die Kinder trotzdem behandeln wie einen allgemeinen Gegner, und beispielsweise in eine std::list<BasisGegner> liste schieben. Außerdem hast du so eine viel bessere Bindung in den einzelnen Klassen, was Fehler vermeiden kann und einen besser strukturierten, logischeren Code...

3

16.06.2009, 09:12

Man kann das dann soweit treiben, dass Spieler und NPCs von der gleichen Klasse erben und somit auch gleich behandelt werden können.

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

4

16.06.2009, 12:35

Zitat von »"n0_0ne"«

std::list<BasisGegner>


std::list<BasisGegner*>, da die Oberklasse meist abstrakt gemacht wird ;)

Was OOP angeht: Grundsetzlich jedes Objekt, z.B. Spieler, Magiegeschoss, Toastbrot, als Klasse konzipieren. Und dann nicht mit Oberklassen geizen, aber immer nach der Ist-Ein-Beziehung. Z.B. könnte ich folgende Vererbungskette machen:

Zeichenobjekt -> Sprite -> Character -> PlayableCharacter -> Player.

Gruß,
Marius

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

5

16.06.2009, 15:21

OK, aber man sollte es auch nicht übertreiben mit der Vererbung, wurde nämlich empirisch nachgewiesen, dass eine mittlere Vererbungstiefe (3-4) am besten ist, was Übersichtlichkeit und Fehleranfälligkeit betrifft. In deinem Beispiel würde ich sogar eher PlayableCharacter als "Zwischenschritt" weglassen :)

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

6

16.06.2009, 16:08

Hast du dazu ne Quelle? Ich finde persönlich nicht, dass zu viele Vererbungsstufen für Unübersichtlichkeit oder Fehleranfälligkeit führt.

7

16.06.2009, 17:07

Ich programmiere gerade ein RPG und muss aus Erfahrung sagen: Vererbung ist kacke :D

Also bitte nicht falsch verstehen. Ich hatte aber z.B. erst auch eine Player und eine NPC Klasse. Jetzt habe ich eine Characterklasse und eine Controller Klasse, wovon Player und NPC Controller abgeleitet sind.
So kann z.B. der Spieler die Kontrolle über einen NPC nehmen oder man muss beim Speichern und laden nicht den richtigen Typen bereits vorher kennen.

Aus dem selben Grund ist es schwachsinnig eine Klasse Spider und eine Klasse Rat von Enemy abzuleiten, der wiederum von NPC abgeleitet ist und das wieder von Character. Es macht dein Spiel zu unflexibel.
Lieber dumm fragen, als dumm bleiben!

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

8

16.06.2009, 17:25

Es geht ja nur darum gemeinsame Eigenschaften und Funktionen zusammenzufassen und bei Bedarf nur an einer Stelle ändern zu müssen.

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

9

16.06.2009, 18:54

Ich würde das mehr in ein Vererbungsnetzt packen.
Beispielsweise habe ich viele verschiedene Klassen: game_object, character, damagable_object, etc.
Die Klasse Spieler erbt nun zum einen eben von game_object, zum anderen von character und zuletzt von damagable_object.
Ich versuche jedoch möglichst wenige Vererbungsebenen zu verwenden. Wenn möglich erben Objekte lieber von mehreren Klassen als von einer, welche schon genau spezifiziert wurde.

10

16.06.2009, 18:57

Ich hab ehrlich gesagt auch nochnicht viel mit Vererbung anfangen können. Bei mir ist einfach immer jedes Objekt zu speziell um es irgendwie zusammenzufassen.

Werbeanzeige