Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Array mit Subeigenschaften der Elemente? (https://www.delphipraxis.net/180964-array-mit-subeigenschaften-der-elemente.html)

disso 3. Jul 2014 18:59

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.

Sir Rufo 3. Jul 2014 19:11

AW: Array mit Subeigenschaften der Elemente?
 
Also nehmen wir mal ein Fahrrad (nur schematisch)
Delphi-Quellcode:
TFahrrad = class
  property Vorderrad : TRad;
  property Hinterrad : TRad;

  function GehtAlsHinterrad( Rad : TRad ) : Boolean;
  function GehtAlsVorderrad( Rad : TRad ) : Boolean;
end;
Das Fahrrad hat Eigenschaften (Vorderrad, Hinterrad) und mit den beiden Methoden, kann ich das Fahrrad fragen, ob ich irgendein Rad da dranbasteln kann.

Denn es gibt ja unterschiedliche Räder (sind zwar alles Räder, aber trotzdem mit unterschiedlichen Eigenschaftswerten)

disso 3. Jul 2014 19:35

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:
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;
oder so ähnlich..?

himitsu 3. Jul 2014 19:44

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:

disso 3. Jul 2014 19:46

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?

Sir Rufo 3. Jul 2014 20:23

AW: Array mit Subeigenschaften der Elemente?
 
Zitat:

Zitat von disso (Beitrag 1264359)
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?

Das werden beides Klassen, aber du hast eigentlich die wichtigste Klasse vergessen.

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;

disso 3. Jul 2014 20:35

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!

Sir Rufo 3. Jul 2014 20:41

AW: Array mit Subeigenschaften der Elemente?
 
Zitat:

Zitat von disso (Beitrag 1264365)
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!

Die Würfel sind doch die Elemente, die andere Würfel/Klötze daran hindern auf dem Feld abgelegt zu werden. Und in der Realität passiert doch auch genau diese Interaktion zwischen den Würfeln. Darum würde ich die auch so mit in das Modell hineinnehmen. Und die Aufgabe ist quasi gelöst, wenn der Würfel seine Koordinaten im Feld bestimmen kann.

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:
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;
Man braucht also eigentlich nur eine kleine Funktion im Würfel, der Rest ist geschicktes Abfragen dieser Funktion :)

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.
Seite 2 von 2     12   

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