Grundlegendes OO-Design in Spielen.



  • Mahlzeit,

    ich mache mir mal wider gedanken, wie ich die Klassen eines kleinen Spiels designe.
    Deswegen wollte ich mal nachfragen, wie ihr das löst.
    Beispiel :
    AUf dem Spielfeld (Klasse Map) sind GameObjekte gespeichert.
    z.B. die Klasse Ship. Wenn diese die Funktion Shoot() aufruft, wird ein neues Objekt "Bullet" erzeugt.
    Dieses neue Objet muss aber wiederum der Map-Klasse hinzugefügt werden.
    Außerdem benötigt das "Bullet"-Object evt. beim Schuss auch Map-Informationen für Wegfindung etc.

    Wie ordnet ihr die KLassen an?
    * z.B. globales Game-Object (Singleton), durch dass man auf alle wichtigen Sachen (Map, GameObjekte,..) zugriff hat
    * Durchschleifen der benötigten Objekte
    *...?



  • Mein Ansatz ist, dass ich jeden Aufgabenbereich in ein Interface auslagere.

    D.h. die Klasse GameObjekt implementiert z.B. 3 Interface: Zeichbar, AufMapEinordbar, Verschiebbar,...

    Die Logic, welche diese Interface implementiert, würde ich aber nicht zwangsweise alles in die GameObjekt-Klasse packen, da diese Klasse sonst mehr als eine Aufgabe macht. Stattdessen habe ich für jedes Interface eine (Hilfes-)Klasse, welches nur diese Interface-Implementierung bereit stellt.

    Die Klasse GameObjekt ist dann nur noch ein Container, welcher diese ganzen Interface-Implementierungshelfer benutzt.

    D.h. meine Denkweise ist einerseits, dass ich die Objekte, welche so ein SPiel nun mal braucht, als einzelne Klassen(Container von Aufgaben) betrachte. Alle Aufgaben, die dann die Objekte können sollen, verstecke ich hinter ein Interface. Für jedes Interface gibt es dann eine eigene Hilfs-Klasse, welche nur dieses Interface Implementiert.

    Von Singletons rate ich ab, da man dann ja quasi sagt, es darf in ein Prozess nur ein Spiel geben.

    Der jenige, der dann für das Verschieben des Schusses zuständig ist, der kennt dann nur die Interface 'Verschiebbar' und 'Kollidierbar'. Diese Klasse hat dann also eine Sicht auf alle Map-Objekte, wobei seine Sicht über die Interface so eigneschrängt ist, dass er nur so viel Informationen über die Map-Objekte hat, die er zur Erfüllung der Schussbewegung braucht.



  • aha, das hört sich doch interessant an.
    Danke dafür 🙂



  • Was ich sehr zu dem Thema empfehlen kann ist diese Seite: http://gameprogrammingpatterns.com/contents.html

    Der Autor erklärt hier sehr gut wie man was designen kann, was typische "Fallstricke" sind und wie man diese mit Design-Patterns lösen kann. 🙂