OOP: Gemeinsame Abstraktion von Rundenbasierten und Echtzeitspielen



  • Hallo,

    ich suche eine vernünftige Abstraktion die sowohl rundenbasierte als auch echtzeit-Spiele beinhaltet. Performanceeinbußen nehme ich dafür in vernünftigen Grenzen in Kauf.

    Warum? Allgemeiner Code wie Netzwerkkommunikation muss nur einmal für diese Abstraktion geschrieben werden und von jeder Spiel-implementation benutzt werden. Die Implementation muss sich nur um die Spiellogik und die Darstellung kümmern.

    Beispiel: Eine Implementierung von Tic Tac Toe und eine Implementierung von (2-Spieler) Asteroids, die (transparent) das gleiche Netzwerk-Framework benutzen und nur die Spiel-Logik, Graphik und Eingabe (nicht verallgemeinerbare Teile) eigenständig implementieren.

    Erste Verallgemeinerung:
    Es gibt einen Spiel-Zustand, der alle Objekte und die Logik des Spiels repräsentiert ohne etwas über Ein/Ausgabe zu wissen. Außerdem gibt es eine Spieler-Schnittstelle, die die Ein- und Ausgabe übernimmt. Diese beiden Teile kommunizieren über Nachrichtenaustausch.

    Problem:
    Im Rundenbasierten Fall möchte der Spiel-Zustand alternierend von den Spielern eine gültige Eingabe haben. Das bedeutet: Polling, mit einem Feedback-Mechanismus um es bei ungültiger Eingabe erneut zu versuchen. Die Spieler-Schnittstelle muss ebenfalls ungültige Eingaben anzeigen können.
    Im Echtzeit-Fall kann man ebenfalls Polling benutzen. Für einen besseren Response könnte man jede Eingabe mit einem Zeitstempel versehen um zeitkritische Aktionen mehr-als-framegenau berechnen zu können.

    Lösung:
    Rundenbasiert:
    Der Spiel-Zustand bekommt ein Objekt mit dem er Eingaben vom Spielerinterface abfragen kann. Wenn die Eingabe falsch ist, sendet er einen "last input invalid" und fragt erneut ab.
    Echtzeit:
    Es können im Verlauf des letzten Frames mehrere Eingaben erfolgt sein.
    Das bedeutet die Rückmeldung über Erfolg muss eine Liste von Ereignis-IDs mitgeben.

    Problem:
    Parallele / Serielle Ausführung: Das Framework sollte beide Arten unterstützen ohne das von jedem Spiel zu reimplementierende Interface zu verändern.

    Was haltet ihr davon? Ist sowas prinzipiell möglich, oder handelt man sich nur unnötig viele Abstraktionsschichten ein die sowieso keinen Nutzen bringen?



  • echtzeit strategiespiele sind auch runden basiert, die runden laufen nur sehr viel schneller ab.
    von daher braucht man keine sonderlich geniale abstraktion, wenn du ein rts laufen lassen kannst, wird auch ein runden basiertes strategiespiel mit dem code laufen.


Anmelden zum Antworten