AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Instanzen verschiedener Subklassen in einer Liste speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Instanzen verschiedener Subklassen in einer Liste speichern

Ein Thema von Mylet · begonnen am 19. Feb 2010 · letzter Beitrag vom 19. Feb 2010
Antwort Antwort
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
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.130 Beiträge
 
Delphi 12 Athens
 
#2

Re: Instanzen verschiedener Subklassen in einer Liste speich

  Alt 19. Feb 2010, 16:52
Das VAR ist nicht nötig, wenn der "Spieler"/Benutzer nur geprüft/verglichen werden soll.

Und eine einfache Lösung deines Problemes (so macht es die VCL ja auch):
Du speicherst vor jedem Stream/Objekt den Typ dieses Objektes und so weißt du dann beim Laden welchen Typen du benötigst.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Mylet

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

Re: Instanzen verschiedener Subklassen in einer Liste speich

  Alt 19. Feb 2010, 17:24
Ja, das VAR bei der function ist tatsächlich unnötig, danke.

Meinst du mit dem Typ des Objektes das, was die TObject.ClassType-function angibt? Wie schreibe ich so ein TClass-Objekt in einen Stream? Kann ich da einfach
Delphi-Quellcode:
var ItemClassType: TClass;
.
.
.
ItemClassType := TItemNachfahre.ClassType;
MyStream.WriteBuffer(ItemClassType,SizeOf(ItemClassType));
benutzen?

Und bezüglich des Ladens: Wie kann ich vom gespeicherten Typ des Objektes direkt auf die Klasse zugreifen? Ich will schließlich keine riesige 'case ClassType of' -Abfrage schreiben müssen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.130 Beiträge
 
Delphi 12 Athens
 
#4

Re: Instanzen verschiedener Subklassen in einer Liste speich

  Alt 19. Feb 2010, 18:07
Am Besten du speicherst den Klassennamen.

TClass ist ein Zeiger (zu den zugehörenden RTTI-Infos) und dieser würde sich beim nächsten Kompilieren vermutlich ändern.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz