M
ManfNan
Gast
Hallo,
ich zerbreche mir schon seit langem den Kopf darüber, wie ich Folgendes Problem möglichst gut wartbar lösen könnte:
Es liegt in einem Spiel eine bestimmte Situation vor, die sich durch viele Kriterien beschreiben lässt. Jetzt soll eine Empfehlung für die zu vollziehende Handlung errechnet werden.
Ein einfacher Ansatz ist zunächst einmal eine regelbasierte Handlungsempfehlung abzugeben. Diesen möchte ich auch weiterhin erst einmal beibehalten.
Hierzu wird nun eine Vielzahl an Situationsanalyseobjekten bereitgestellt, wobei pro Spielsituation immer nur eines davon passend ist und anhand der Eigenschaften der aktuellen Spielsituation selektiert werden soll.
Doch wie kann ich möglichst wartbar ein solches Objekt anhand der Eigenschaften der Spielsituation selektieren, wenn sich die Kriterien zur Beschreibung einer Spielsituation potentiell noch ändern können??
In einer Factory müsste ich bei vielen Kriterien erstens sehr viele case Abfragen machen und bei Änderungen der Auswahlkriterien wirds zweitens super schlecht wartbar und aufwändig anzupassen.
Dann hab ich mir gedacht man könnte die Analyseobjekte mit einer Methode in einer Oberklasse ausstatten, die lautet: usableForThisSituation(gameSituation) und darin die Eigenschaften der SpielSituation mit entsprechenden Feldern der Objekte vergleichen und wenn sie übereinstimmen true zurückliefern. Das Ganze soll dann noch am besten static sein.
Allerdings müsste ich bei sehr vielen Situationsanalyseobjekten dann auch im Zweifel sehr viele Vergleiche durchführen, bis das passende Objekt gefunden wurde.
Außerdem müsste ich eine Liste aller Analyseobjekte anlegen und durchiterieren, was bei vielen Objekten ordentlich Speicher kostet.
Kennt ihr für so einen Fall vllt ein Pattern oder eine andere Lösungsidee, um bei Änderungen der Eigenschaften einer Spielsituation möglichst nur an einer Stelle den Vergleich auf ein passendes Analyseobjekt abändern zu müssen oder vllt einen ganz anderen Ansatz, wenn meiner total in die falsche Richtung geht bei diesem Problem???
Wäre super dankbar dafür.
Mfg,
Manni
ich zerbreche mir schon seit langem den Kopf darüber, wie ich Folgendes Problem möglichst gut wartbar lösen könnte:
Es liegt in einem Spiel eine bestimmte Situation vor, die sich durch viele Kriterien beschreiben lässt. Jetzt soll eine Empfehlung für die zu vollziehende Handlung errechnet werden.
Ein einfacher Ansatz ist zunächst einmal eine regelbasierte Handlungsempfehlung abzugeben. Diesen möchte ich auch weiterhin erst einmal beibehalten.
Hierzu wird nun eine Vielzahl an Situationsanalyseobjekten bereitgestellt, wobei pro Spielsituation immer nur eines davon passend ist und anhand der Eigenschaften der aktuellen Spielsituation selektiert werden soll.
Doch wie kann ich möglichst wartbar ein solches Objekt anhand der Eigenschaften der Spielsituation selektieren, wenn sich die Kriterien zur Beschreibung einer Spielsituation potentiell noch ändern können??
In einer Factory müsste ich bei vielen Kriterien erstens sehr viele case Abfragen machen und bei Änderungen der Auswahlkriterien wirds zweitens super schlecht wartbar und aufwändig anzupassen.
Dann hab ich mir gedacht man könnte die Analyseobjekte mit einer Methode in einer Oberklasse ausstatten, die lautet: usableForThisSituation(gameSituation) und darin die Eigenschaften der SpielSituation mit entsprechenden Feldern der Objekte vergleichen und wenn sie übereinstimmen true zurückliefern. Das Ganze soll dann noch am besten static sein.
Allerdings müsste ich bei sehr vielen Situationsanalyseobjekten dann auch im Zweifel sehr viele Vergleiche durchführen, bis das passende Objekt gefunden wurde.
Außerdem müsste ich eine Liste aller Analyseobjekte anlegen und durchiterieren, was bei vielen Objekten ordentlich Speicher kostet.
Kennt ihr für so einen Fall vllt ein Pattern oder eine andere Lösungsidee, um bei Änderungen der Eigenschaften einer Spielsituation möglichst nur an einer Stelle den Vergleich auf ein passendes Analyseobjekt abändern zu müssen oder vllt einen ganz anderen Ansatz, wenn meiner total in die falsche Richtung geht bei diesem Problem???
Wäre super dankbar dafür.
Mfg,
Manni