Einzelnen Beitrag anzeigen

Mylet

Registriert seit: 14. Feb 2009
2 Beiträge
 
#1

Instanzen verschiedener Subklassen in einer Liste speichern

  Alt 19. Feb 2010, 16:43
Ich programmiere momentan ein rundenbasiertes Strategiespiel mit RPG-Elementen.
Man kann ein Team aus Kämpfern auf einer schachbrettartig aufgeteilten Karte bewegen und muss Kämpfer des gegnerischen Teams bekämpfen und besiegen, um zu gewinnen.
Die Einheiten haben eine Anzahl von Statuswerten mit denen der Ablauf der Kämpfe berechnet wird, zusätzlich spielen die verwendeten Waffen eine Rolle.

Ich möchte jetzt den Einheiten die Möglichkeit geben Items zu tragen, womit wir bei meinem Problem wären.

Mein Ansatz ist die folgende Basisklasse:

Delphi-Quellcode:
type TItem = class
  private
    FName: string;
    FBeschreibung: String
    FGewicht: Integer;
    FAnzahl: Integer;
    FPreis: Integer;
  public
    function IstBenutzbar (var Benutzer: TKämpfer): Boolean; virtual; abstract; //jedes Item soll hier prüfen ob es vom Besitzer benutzt werden kann
    procedure Benutze (var Benutzer: TKämpfer); virtual; abstract; //hier soll das Item etwas mit sich (Anzahl reduzieren) und/oder dem Kämpfer machen
    procedure WriteToStream (AStream: TStream);
    procedure ReadFromStream (AStream: TStream);
    property Name: string read FName;
    //restliche properties
end;
von der würde ich dann die einzelnen Items ableiten.

Das konkrete Problem bei der Realisierung stellt sich beim Speichern bzw. Laden eines Kämpfers mit seinen Items.
Ich kann zwar durch eine Liste der Items gehen und diese nacheinander in einen Stream schreiben, aber beim Laden stellt sich dann die Frage, von welcher Klasse das Item ist.
Gibt es irgendeine Möglichkeit die Klasse eines Objektes zu Speichern und beim Laden die Daten entsprechend zuzuordnen?

Ich bin mir im Klaren darüber, dass das Ableiten einer neuen Klasse für jedes Item ziemlich aufwändig (und umständlich?) ist, aber mir fällt keine andere Möglichkeit ein wie ich die Überprüfung der Benutzbarkeit und die Anwendungsprozedur einem bestimmten Item zuordnen kann.
Wenn jemand dahingehend einen Vorschlag hat, würde sich das obrige Problem evtl. erübrigen.
  Mit Zitat antworten Zitat