Einzelnen Beitrag anzeigen

Klausi1305

Registriert seit: 20. Jan 2011
Ort: Leipzig
15 Beiträge
 
Turbo Delphi für Win32
 
#3

AW: Hilfe bei Schleifenerstellung für HexfeldGitter

  Alt 8. Feb 2011, 21:59
Danke für die Hilfe Blup...

Der entscheidende Hinweis war aber die FOR Schleife...Diese Möglichkeit hatte ich komplett ausgeblendet.

Die Erstellung des Grids funktioniert jetzt..Hier mal der Quellcode

BTWer einzigste Fehler bis jetzt ist die Durchnummerierung des Arrays Feld

Delphi-Quellcode:
procedure TForm2.HexGitterDraw;
Var
   Feld : array of TFeld;//Array zum Speichern der Feld Infos
   Y,I,Z : Integer; //
   Zähler : Integer; //Zählvariable für Schleifen
   HöheImage: Integer;//Image1 Höhe
   Breiteimage: Integer;//Image1 Breite
   AnzahlHexinHöhe: Integer; //Anzahl der HexFelder in einer Spalte
   AnzahlHexinBreite: Integer;//Anzahl der HexFelder in einer Reihe
   Kantenlänge: Integer;//Kantenlänge einer Seite des Hexagons
   Höhe2: Integer; //Halbe Hexagon Höhe
   HöheHex : Integer; //Gesamt Hexagon Höhe
   StartX : Integer; //X Koordinate der Mitte des oberen linken HexFeldes
   StartY : Integer; //Y Koordinate der Mitte des oberen linken HexFeldes
   VersetzungUngerade: Integer;//Versetzungsfaktor für ungerade Spalten relativ zum StartPunkt
   AnzahlHexGesamt: Integer;//Gesamtanzahl der Hex
   Begin
     HöheImage:=Image1.Height; //ImageHöhe bestimmen
     BreiteImage:=Image1.Width; //ImageBreite bestimmen
     Kantenlänge:=StrToInt(Edit3.Text);//Einlesen der Kantenlänge des Hexagons
     Höhe2:= Round(SQRT((Kantenlänge*Kantenlänge)-((1/2)*(Kantenlänge*Kantenlänge))));
     HöheHex:=Höhe2*2; //Gesamthöhe des Hexfeld in Pixel
     AnzahlHexinHöhe:=round(HöheImage/HöheHex);//Anzahl der HexFelder in einer Spalte bestimmen
     AnzahlHexinBreite:=round(BreiteImage/(Kantenlänge)/3);//Anzahl der HexFelder in einer Reihe bestimmen
     Label6.Caption:=IntToStr(AnzahlHexinHöhe);
     Label7.Caption:=IntToStr(AnzahlHexinBreite);
     //Mitte des oberen linken HexFeldes Bestimmen
     StartX:=Kantenlänge;
     StartY:=Höhe2;

AnzahlHexGesamt:=AnzahlHexinHöhe*AnzahlHexinBreite;
VersetzungUngerade:=3*Kantenlänge;
//----------------ungerade Spalten zeichnen---------------
For I:=0 to AnzahlHexinBreite-1 do
Begin
     Setlength(Feld,AnzahlHexGesamt);
     Zähler:=0; //Zähler für Schleife zum zeichnen 1. Spalte
     Z:=-1; //Zähler für Arrayfüllung
     Y:=StartY; //Übergabe der Variable zum weiteren verarbeiten
     Repeat
        Inc(Zähler);
        Inc(Z);
        HexFeldDraw(StartX,Y,Kantenlänge);
        Feld[Z].ID:=Zähler;
        Feld[Z].MX:=StartX;
        Feld[Z].MY:=Y;
        Y:=Y+HöheHex;
    Until Zähler=AnzahlHexinHöhe;
StartX:=StartX+VersetzungUngerade;
end;
//----------------Gerade Spalten zeichnen---------------
StartX:=Round(5/2*Kantenlänge);
StartY:=HöheHex;
For I:=0 to AnzahlHexinBreite-1 do
Begin
     Zähler:=0; //Zähler für Schleife zum zeichnen Spalte
     Y:=StartY; //Übergabe der Variable zum weiteren verarbeiten
     Repeat
        Inc(Zähler);
        Inc(Z);
        HexFeldDraw(StartX,Y,Kantenlänge);
        Feld[Z].ID:=Zähler;
        Feld[Z].MX:=StartX;
        Feld[Z].MY:=Y;
        Y:=Y+HöheHex;
    Until Zähler=AnzahlHexinHöhe-1;
StartX:=StartX+VersetzungUngerade;
end;
//--------------Ausgabe der Arraywerte in Memo1------------
Memo1.Clear;
For Z:=0 to AnzahlHexGesamt do
    Memo1.Lines.Add(IntToStr(Feld[Z].ID)+' '+IntToStr(Feld[Z].MX)+' '+IntToStr(Feld[Z].MY));
End;
Sebastian
  Mit Zitat antworten Zitat