![]() |
Einen Datentyp zu ordnen oder so ähnlich
Hi,
der Titel klingt etwas komisch. Ich weiß nämlich selbst nicht so richtig, wie ich das Beschreiben soll, deswegen versuche ich es an meinem konkreten Beispiel: Ich programmiere ein Spiel mit 18 Feldern. Es soll etwas wie das Spiel "ACTIVITY" werden. Da gibt es ja Felder mit "Pantomime", "Zeichen" und so weiter. Jetzt will ich jedes Feld in einem Array speichern, das ich z.B. Spielfelder nenne. Doch da ist das Problem: Es gibt 3 verschiedene Typen an Feldern. Warum nicht einfach jeden Typ in ein eigenes Array packen? Weil ich dann die Felder nicht per Zahl anwählen kann z.B. Spielfelder[zahl]. Gibt es da irgendeine Möglichkeit? Die Typen sind eben selbst definierte Klassen. Z.B. TZeichnenFeld oder TPantomimeFeld. habt ihr mich verstnaden? Ich hoffe es! Dann bedanke ich mich schonmal für alle Antworten. |
Re: Einen Datentyp zu ordnen oder so ähnlich
Wie wäre es mit "Array of TObject" oder einer TObjectList?
Da gehen alle Objekte rein. Du musst dann nur vor dem Zugriff casten. |
Re: Einen Datentyp zu ordnen oder so ähnlich
habe die Klassen einen gemeinsamen Vorfahren? dann kannst du den Array über diese Typ machen und die verschiedenen Klassen darin speichern.
|
Re: Einen Datentyp zu ordnen oder so ähnlich
Wenn deine Felder Records und keine Klassen sind dann würde ich sagen mach einen Redord-Typ mit case.
Ansonsten kannst du eine KLasse z.B. TFeld machen und davon TZeichenFeld oder TPantomimeFeld ableiten. Dann reicht ein Array vom Typ TFeld. Das heißt man Polymorphie (glaub ich^^). //Roter Kasten: Genau das mein ich... |
Re: Einen Datentyp zu ordnen oder so ähnlich
So richtig viel habe ich auch nicht verstanden. Sieht für mich so aus, als wolltest Du grafische Felder auf einem Spielbrett beschreiben und denen verschiedene Bedeutungen oder Funktionen zuweisen.
Ein einfacher Vorschlag wäre, daraus ein record zu machen:
Delphi-Quellcode:
TPantomimeFeld und TZeichnenfeld müßte darüber deklariert werden.
type
Spielfelder = record Zeichnenfeld : array[0..5] of TZeichnenFeld; PantomimeFeld : array[0..10] of TPantomimeFeld; end; Im Code greifst Du dann über
Delphi-Quellcode:
auf Deine Felder zu, evtl. auch im Zufallsmodus.
Spielfelder.Zeichnenfeld[x]
Ist das in etwa was Du suchst? Grüße, Messie |
Re: Einen Datentyp zu ordnen oder so ähnlich
Vielen Dank! Ich hatte schon fast keine Hoffnung :wink:
Danke! |
Re: Einen Datentyp zu ordnen oder so ähnlich
Zitat:
|
Re: Einen Datentyp zu ordnen oder so ähnlich
Ich muss doch nochmal nachfragen: Wie "caste" ich? :roll:
|
Re: Einen Datentyp zu ordnen oder so ähnlich
Zitat:
Ich ahtte ad eher an eine problembezogene Superklasse gedacht, aber auf TObject kann man sich natürlich immer beziehen. [Edit: Zitat:
Delphi-Quellcode:
oder
(<Objekt> as <Klasse>)
Delphi-Quellcode:
]
<Klasse>( <Objekt>)
|
Re: Einen Datentyp zu ordnen oder so ähnlich
Tut mir leid, aber ich hab das noch nich ganz verstanden. Mein Code sieht jetzt so aus:
Delphi-Quellcode:
TSpielfelder liegt in einer eigenen Unit.
var
Spielfelder : Array [1..18] of TObject; procedure TForm1.FormCreate(Sender: TObject); begin Spielfelder[1] as TSpielfelder; Spielfelder[1].erstellen(); Spielfelder[1].Titel := 'Pantomime!'; end; Das ist falsch... Ich habe davon leider noch keine Ahnung, vielleicht kann mir jemand das reinschreiben? |
Re: Einen Datentyp zu ordnen oder so ähnlich
Zitat:
Grüße, Messie (ewiger "gerade reingestolpert") |
Re: Einen Datentyp zu ordnen oder so ähnlich
Delphi-Quellcode:
oder
(Spielfelder[1] as TSpielfelder).Titel := 'Pantomime!';
Delphi-Quellcode:
TSpielfelder( Spielfelder[1]).Titel := 'Pantomime!';
|
Re: Einen Datentyp zu ordnen oder so ähnlich
Zitat:
|
Re: Einen Datentyp zu ordnen oder so ähnlich
aaah! ok, danke!
Aber irgendwie das Ganze in einer Varaibelen speichern und per Spielfelder[1].Titel zugreifen geht nicht, oder? Also z.B.
Delphi-Quellcode:
?
Spielfelder[1] := (Spielfelder[1] as TSpielfeld);
Spielfelder[1].Titel := 'Pantomimie!'; |
Re: Einen Datentyp zu ordnen oder so ähnlich
Wie schon erwähnt, mach ne Basisklasse und schon gehts:
Delphi-Quellcode:
mfg
// pseudocode:
TFeld = class(TObject) private FTitel: string; ... public property Titel: string read FTitel write FTitel; ... end; TPantomimeFeld = class(TFeld); ... end; TSonstwasFeld = class(TFeld); ... end; ... procedure TForm1.Test; var Felder = array[0..5] of TFeld; i: integer; ... begin ... for i := 0 to 5 do begin Memo1.Lines.Add(Felder[i]); end; end; Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz