Wenn du das ganze Feld zeichnen willst, dann mußt du in ZWEI verschachtelten Schleifen X UND Y durchgehn.
Du gehts nur X und Y gleichzeitig über I durch, was natürlich eine Diagonale ergibt.
hab mich verguckt
Code:
X := 1 + 64 * (I mod [b]16[/b]);
Y := 1 + 48 * (I div [b]16[/b]);
// ^^ die Anzahl der Spalten ... hier wirst du wohl eine
// Variable reinnehmen müssen, wenn die Größe veränderbar ist
also
Code:
X := 1 + 64 * (I mod ((ClientHeight - 2) div 48));
Y := 1 + 48 * (I div ((ClientHeight - 2) div 48));
macht dann
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
I, Z: Integer;
begin
// ...weiterer Code...
Z := (ClientWidth - 2) div 64;
SetLength(Terrain, Z * ((ClientHeight - 2) div 48));
for I := 0 to High(Terrain) do
begin
with Terrain[I] do
begin
X := 1 + 64 * (I mod Z);
Y := 1 + 48 * (I div Z);
// ...
end;
end;
// ...und noch mehr Code...
end;
PS: warum hast du dein SetLength so umständlich berechnet?
DIV rundet doch eh ab