Hallo Leute.
Ich hätte mal eine Frage, die jetzt nicht direkt was mit einer bestimmten Programmiersprache zu tun hat, sondern eher mit dem Design einer Programmstruktur in OOP.
Wenn ich ein Spiel programmiere, dann möchte ich das ja am liebsten so machen, dass es leicht um neue Elemente (Spielinhalte) erweiterbar ist (z.B. neue Einheiten, Rohstoffe etc.). Nach dem Prinzip von OOP lege ich mir also dafür jeweils Basisklassen an (z.B. Entity für alle Gegenstände im Spiel), von der ich dann alle Dinge ableite. Nun ist es ja aber so, dass ich auch dynamisch auf diese Objekte zugreifen können will, ohne sie alle in einer Steuerungs-Klasse einzeln einzutragen. Das betrifft das Speichern, das Laden, aber auch das dynamisch Erstellen von Instanzen. Hier scheinen alle Spiele, die ich kenne, auf ein ID-System zurückzugreifen. Im Prinzip habe ich sowas auch schon umgesetzt, und zwar indem ich alle verfügbaren Typen mit Reflection ausgelesen habe und sie mitsamt einer ID in ein Dictionary gepackt habe. Wenn dann z.B. durch einen Spielstand eine Instanz der Klasse erstellt werden musst, habe ich dafür
Ich hätte mal eine Frage, die jetzt nicht direkt was mit einer bestimmten Programmiersprache zu tun hat, sondern eher mit dem Design einer Programmstruktur in OOP.
Wenn ich ein Spiel programmiere, dann möchte ich das ja am liebsten so machen, dass es leicht um neue Elemente (Spielinhalte) erweiterbar ist (z.B. neue Einheiten, Rohstoffe etc.). Nach dem Prinzip von OOP lege ich mir also dafür jeweils Basisklassen an (z.B. Entity für alle Gegenstände im Spiel), von der ich dann alle Dinge ableite. Nun ist es ja aber so, dass ich auch dynamisch auf diese Objekte zugreifen können will, ohne sie alle in einer Steuerungs-Klasse einzeln einzutragen. Das betrifft das Speichern, das Laden, aber auch das dynamisch Erstellen von Instanzen. Hier scheinen alle Spiele, die ich kenne, auf ein ID-System zurückzugreifen. Im Prinzip habe ich sowas auch schon umgesetzt, und zwar indem ich alle verfügbaren Typen mit Reflection ausgelesen habe und sie mitsamt einer ID in ein Dictionary gepackt habe. Wenn dann z.B. durch einen Spielstand eine Instanz der Klasse erstellt werden musst, habe ich dafür
Activator.CreateInstance()
(also wieder Reflection) verwendet. Nun ist es ja aber so, dass ich Reflection eigentlich immer mit einem grundlegenden Designfehler verbinde, denn dadurch greift man auf Dinge zu, auf die man sonst keinen Zugriff hätte. Außerdem steht Reflection ja sowieso nur aufgrund des .Net-Frameworks zur Verfügung, in C++ o.ä. gibt es das nicht. Es muss also irgendwie anders und besser gehen, allerdings weiß ich nicht, wie. Kennt sich da jemand gut aus?