![]() |
AW: Array mit Subeigenschaften der Elemente?
Mir ist klar, dass die Syntax so nicht funktioniert, das ist nur prinzipiell das, was ich da an der Stelle tun möchte.
|
AW: Array mit Subeigenschaften der Elemente?
Also nehmen wir mal ein Fahrrad (nur schematisch)
Delphi-Quellcode:
Das Fahrrad hat Eigenschaften (Vorderrad, Hinterrad) und mit den beiden Methoden, kann ich das Fahrrad fragen, ob ich irgendein Rad da dranbasteln kann.
TFahrrad = class
property Vorderrad : TRad; property Hinterrad : TRad; function GehtAlsHinterrad( Rad : TRad ) : Boolean; function GehtAlsVorderrad( Rad : TRad ) : Boolean; end; Denn es gibt ja unterschiedliche Räder (sind zwar alles Räder, aber trotzdem mit unterschiedlichen Eigenschaftswerten) |
AW: Array mit Subeigenschaften der Elemente?
das mit dem Property war mir neu.
Ok also für meinen Fall würde ich sowas sagen wie
Delphi-Quellcode:
oder so ähnlich..?
TFeld = class
property KlotzA:TKlotz; ... property KlotzH:TKlotz; function PasstSenktrechtInsFeld(Klotz:TKlotz):Boolean; function PasstWaagerechtInsFeld(Klotz:TKlotz):Boolean; end; TKlotz=class private Anordnung: array [1..2,1..5] of integer; end; |
AW: Array mit Subeigenschaften der Elemente?
Das sind ja erstmal nur schematische "Beispiele" und hinter den Property versteckt sich am Ende natürlich dann auch noch entsprechende Felder (Variablen in der TFeld-Klasse).
Warum eigentlich Integer? Die Ecken sind doch entweder da oder nicht, was dann eher ein Boolean wäre. :zwinker: |
AW: Array mit Subeigenschaften der Elemente?
ja geht auch, wenn ich mein "Prüfungskonzept" eh ändern muss. Usprünglich hatte ich alle Würfel aufaddiert, da spar ich mir mit int die Umwandlung.
aber wie definiere ich denn die Klasse TKlotz innerhalb der TFeld? Oder ist TKlotz keine Klasse? |
AW: Array mit Subeigenschaften der Elemente?
Zitat:
Die Würfel!
Delphi-Quellcode:
TLage = (horizontal, vertikal);
TWürfel = class PositionImKlotz : Integer; // 0..9 function GetKoordinate( AIndex : Integer; ALage : TLage ) : TPoint; end; TKlotz = class Würfel : array of TWürfel; end; TKlotzImFeld Klotz : TKlotz; Index : Integer; Lage : TLage; end; TFeld = class Klötze : array of TKlotzImFeld; function IstZelleBelegt( x,y : Integer ): Boolean; end; function TFeld.IstZelleBelegt( AKoord : TPoint ) : Boolean; begin for LKlotzInFeld in Klötze do for LWürfel in LKlotzInFeld.Klotz.Würfel do begin LKoord := LWürfel.Koordinate( LKlotzInFeld.Index, LKlotzInFeld.Lage ); if LKoord = AKoord then Exit( True ); Result := False; end; |
AW: Array mit Subeigenschaften der Elemente?
ich hatte gedacht, die Würfel könnte man einfach als array oder Bool machen. Das was du da geschrieben hast, muss ich morgen mal in Ruhe nachvollziehen. Danke jedenfalls schon mal!
|
AW: Array mit Subeigenschaften der Elemente?
Zitat:
Kommst du mit einem neuen Klotz und einer gewünschten Position und Lage, dann fragst du für jeden Würfel die Koordinate zu dieser Position und Lage ab und fragst das Feld, ob alle diese Koordinaten noch frei sind.
Delphi-Quellcode:
Man braucht also eigentlich nur eine kleine Funktion im Würfel, der Rest ist geschicktes Abfragen dieser Funktion :)
function TKlotz.KannAnPosition( AFeld : TFeld; AIndex : Integer; ALage : TLage ) : Boolean;
begin for LWürfel in Würfel do if AFeld.IstZelleBelegt( LWürfel.GetKoordinate( AIndex, ALage ) ) then Exit( False ); Result := True; end; PS: Anstatt der Koordinate vom Typ TPoint reicht es allerdings auch aus einfach einen Integer-Wert zurückzugeben 0..24 dadurch wird auch die Berechnung einfacher, schneller und auch der Vergleich insgesamt schneller. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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