# Behandlung von verschiedenen KI-Versionen



## Angel4585 (15. Jan 2009)

Hallo,

ich programmiere eine Spielsimulation für ein Fussballspiel.
Ich habe dafür zB ein Objekt Spieler welches in Version 1 abgespeichert wird.

In Version 1 würde der Spieler jetzt zB nach dem Laden nach links laufen.

Jetzt habe ich irgendwann die Berechnung der KI verändert und der Spieler würde nach der neuen Berechnung nach rechts laufen.

Wenn ich jetzt allerdings einen Spielstand von Version 1 mit Version 2 lade, möchte ich dass er trotzdem nach Version 1 behandeln.

Wie mache ich das am besten? Muss ich für jede Version eine eigene Spielerklasse machen oder wie wird sowas in der Praxis gemacht?


----------



## SlaterB (15. Jan 2009)

du könntest die Regeln und Einstellungen für die KI in einer Textdatei speichern, oder auch in einer speziellen Klasse ConfigurationVersion1,
das müssen ja evtl. nur paar boolean-Variablen sein



dann initialisierst du das KI-Framework 2x, in Version 1 und 2,
falls sich der Quellcode der KI ändert, brauchst du eh unterschiedliche Klassen oder zumindest Methoden

if (kiVersion < 2) {
findSimpleWayToGoal();
} else {
findSmartWayToGoalAndUseFouls();
}


----------



## Angel4585 (16. Jan 2009)

Ich hab das jetz über Interfaces gelöst:

Ein interface "Match" welches u.a. eine Methode play beinhaltet.
Dann verschiedene Klassen für die verschiedenen Versionen,
als MatchV1, MatchV2 welche das Match interface beinhalten usw.

Dann gibt es eine Klasse welche die Matches lädt und speichert, diese beinhaltet auch eine Versionsinfo, einfach ne Integer, welche beim Speichern zuerst geschrieben wird, beim Laden zuerst ausgelesen wird.

Die Laden Methode gibt das Interface zurück. In der Methode wird zuerst die version ausgelesen und danach über ne switch Abfrage entschieden von welcher Klasse das Interface genommen wird. danach arbeite ich dann einfach immer mit dem interface weiter, das sollte am Einfachsten sein.


----------

