Spielebestandteile ausprogrammieren oder per Daten befüllen?

vulcanus

Mitglied
Hi zusammen,

mir stellt sich momentan noch die Frage, wie ich am besten die Datenstruktur meiner "Business"-Objekte aufbauen.

Ich arbeite momentan an einem Spiel, dass aus Frontend-Sicht im Grunde genommen nur Items kennt. Soll heißen: Ein Krieger wird im Frontend genauso dargestellt, wie eine Kohlemine oder ein Stück Erz. Unterscheiden tun sie sich aber trotzdem:
- Krieger kann angreifen,
- Kohlemine erzeugt Kohle,
- Erz ist eine Ressource.

Nun zu meiner Frage:
Wie bilde ich das ganze im Programmcode ab.

- Ich könnte tatsächlich nur eine Klasse Item nutzen. Dann bräuchte ich aber Komponenten-Klassen, die dem Item zusätzliche Fähigkeiten geben. Ich würde dann zur Laufzeit die Objekte erzeugen und per Prototype-Pattern vervielfältigen.

- Oder ich bau mir eine Vererbungsstruktur auf und am Ende des Baumes existiert wirklich die Klasse Kohlemine oder Erz. Dies erlaubt mir aus meiner Sicht eine bessere Flexibilität, allerdings habe ich dann nicht mehr die Möglichkeit, das Gamesetting zu beeinflussen, ohne den Code neu Compilieren zu müssen.

- Und es gäbe noch einen Mittelweg, bei dem es z.B. die Struktur Item <- Ressource gibt, die dann verschiedene Ausprägungen besitzen, wie Kohle, Erz, Holz etc. Auch hier würde ich dann dass Prototype-Pattern verwenden.

---

So... kann mit Jemand sagen, ob es zu diesem Problem ein Best Practice in der Spieleentwicklung gibt?
Vielen Dank für Eure Antworten!
Schöne Grüße
Nico
 

looparda

Top Contributor
Ich kenne mich weder mit Spiele-Programmierung noch mit dem Pattern im speziellen aus, aber habe in dem Kontext mal das entity component system gehört.
 

vulcanus

Mitglied
Ich kenne mich weder mit Spiele-Programmierung noch mit dem Pattern im speziellen aus, aber habe in dem Kontext mal das entity component system gehört.

Hi und vielen Dank für das Buzzword! Es war mir tatsächlich noch nicht bekannt und es scheint genau das zu sein, wonach ich gesucht habe. Habe mir auch schon einige Artikel dazu durchgelesen (u.A. https://www.heise.de/developer/arti...ity-Systems-in-Spielen-2262126.html?seite=all ).

Gibt es dazu auch Fachliteratur? Oder bestimmte Internetseite, die man dazu gelesen haben muss?
Werde mir nachher noch Ash bzw. Ashley näher anschauen. Wobei ich lieber ein eigenes System entwickeln würde und diese Frameworks eher als Inspiration sehen.

Danke nochmal und schöne Grüße

Nico
 

Thallius

Top Contributor
Oder du schreibst es in C++ dann hast du das Problem nicht :) (Wahrscheinlich ein Grund warum Java so selten für Spiele benutzt wird)

Gruß

Claus
 

httpdigest

Top Contributor
Gibt es dazu auch Fachliteratur? Oder bestimmte Internetseite, die man dazu gelesen haben muss?
Wichtig ist, zu erkennen, dass Component Entity System nicht viel mehr als die Anwendung von "Composition over Inheritance" ist.
Es ist meiner Meinung nach viel wichtiger, die Vor- und Nachteile von Composition vs. Inheritance zu erkennen. Google also einfach mal nach "(Prefer) Composition over Inheritance". Insbesondere, wenn du eine eigene Implementierung bauen möchtest, solltest du wissen, wann du Komposition und wann Vererbung einsetzen möchtest.
 

Thallius

Top Contributor
Du meinst, weil er da nie bis zu diesem Zustand kommt, und sich die Frage daher gar nicht erst stellt? :p

Oder nimmt einem C++ jetzt schon das Software-Design ab?

Ich frage mich schon die ganze Zeit wieso es in Java immer noch keine polymorphie gibt. Ich meine es gibt ja mittlerweile fast alles was früher sowas von bäh war und weswegen java angeblich so viel besser ist..... es fehlt ja nun wirklich nicht mehr viel und mit java geht alles genauso wie in c++. Polymorphie und ein bischen Pointer manipulation noch rein in java13 und alles wird gut

Claus
 

httpdigest

Top Contributor
Ich frage mich schon die ganze Zeit wieso es in Java immer noch keine polymorphie gibt.
Es gibt diverse Polymorphien in Java: Primitive Type Coercion, Method Overloading (Ad Hoc Polymorphism), Subtyping/Late-Binding/Dynamic-Dispatch (Runtime Polymorphism) und Parametric Polymorphism (i.e.: Generics). Was du meinst, ist sicherlich: Mehrfachvererbung.
 

mrBrown

Super-Moderator
Mitarbeiter
Ich frage mich schon die ganze Zeit wieso es in Java immer noch keine polymorphie gibt.
Ich bin mir nicht sicher, ob das einfach sehr gut versteckte Satire ist, oder wirklich Mehrfachvererbung meint...

Und selbst wenn das Mehrfachvererbung meint, kann man obige Frage genauso stellen. Das "Problem", dass eine Typ mehrere Supertypen braucht, wird da noch gar nicht angesprochen, und Erstellen von neuen "Objekten" zur Laufzeit wird damit nicht gelöst...
 

looparda

Top Contributor
Ich erinnere mich an folgendes Video auf Youtube.
Hier hat ein Programmierer eine Rust Implementierung des Entity Component Systems auseinandergenommen, kritisiert und verglichen. Die Gedankengänge sind vielleicht wertvoll, um etwas eigenes zu implementieren. Er geht auch auf Pointergewurschtel ein, welches in Java so nicht möglich ist.
Ich hab da auch überhaupt nicht alles verstanden. Bloß eine weitere Assoziation, die ich zum Thema habe.
 

vulcanus

Mitglied
Hi zusammen,

bin momentan dran, mir selbst ein ECS zu basteln und bin gerade auf die Frage gestoßen, warum bei anderen Frameworks nicht vieles als Singleton implementiert ist?
Engine und jedes System hören sich für mich nach Singletons an. Gibt es da einen Grund dies nicht zu tun? Bin da in der Spieleentwicklung noch am Anfang ^^.

Vielen Dank
 

temi

Top Contributor
Hi zusammen,

bin momentan dran, mir selbst ein ECS zu basteln und bin gerade auf die Frage gestoßen, warum bei anderen Frameworks nicht vieles als Singleton implementiert ist?
Engine und jedes System hören sich für mich nach Singletons an. Gibt es da einen Grund dies nicht zu tun? Bin da in der Spieleentwicklung noch am Anfang ^^.

Vielen Dank

Das Singleton-Muster ist dafür gedacht, sicher zu stellen, dass es im Programm nur genau eine einzige Instanz einer Klasse gibt. Falls das so gewünscht ist und für die Anwendung passt, dann spricht nichts dagegen dies so zu tun.

Leider verstehen viele das Singleton als Weg eine Art globale Variable in die Anwendung einzuführen. Das ist meiner Ansicht nach die falsche Anwendung des Singleton und sorgt auch für dessen schlechten Ruf.

Falls du noch nichts über Dependency Injection (DI) gelesen hast, dann solltest du dich in diese Richtung schlau machen, wobei sich Singleton und DI nicht gegenseitig ausschließen.
 

Oben