![]() |
4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen nicht
Und zwar versuche ich mich (schon wieder) an einem 4-Gewinnt. Diesmal will ich das ganze etwas geschickter anzugehen, als beim letzten Mal. Der Anfang ist erstmal, alle Felder (in meinem Beispiel Shapes) zu erzeugen und richtig zu positionieren. Dafür hab ich ein 2dimensionales Array of TShape genommen.
Delphi-Quellcode:
Mit folgendem Code will ich nun die Shapes erzeugen und positionieren:
Feld: array[1.. 8, 1.. 8] of TShape;
Delphi-Quellcode:
Das Problem: Es wird nur ein 6x6 Felder großes Spielfeld erzeugt. Die restlichen Shapes liegen oben links einfach herum, ohne irgendwie positioniert worden zu sein. Hat jemand eine Ahnung, warum?procedure TForm1.FormPaint(Sender: TObject); var i, j: integer; begin if not Shown then //damit es nur einmal ausgeführt wird begin For i := 1 to 7 do for j := 1 to 7 do begin Feld[i, j] := TShape.Create(self); With Feld[i, j] do begin Show; Shape := stCircle; Brush.Color := clWhite; Parent := self; end; end; Feld[1, 1].Left := 10; //das erste Feld vorgeben Feld[1, 1].Top := 10; For i := 2 to 7 do For j := 2 to 7 do begin Feld[i, j].Left := Feld[i - 1, j].Left + Feld[i, j].Width + 5; //hier braucht man das jeweils vorherige Feld zum Positionieren Feld[i, j].Top := Feld[i, j - 1].Top + Feld[i, j].Height + 5; end; end; Shown := true; end; |
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
So wie ich das sehe, läßt du die erste Spalte und die erste Zeile einfach aus. Nur Feld[1,1] setzt du. Danach fängst du erst wieder bei 2 an.
Außerdem: Warum deklarierst du dir ein 8x8-Array und benutzt nur 7x7? :gruebel: |
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
Das rekursive Setzen ist doch etwas kompliziert, oder?
Delphi-Quellcode:
Ist doch etwas sauberer.
for i:=1 to 8 do
for j:= 1 to 8 do begin Feld[i,j].left := 50 + i*(Shape.width+5); // 5 ergibt einen kleinen Abstand zwischen den Shapes Top analog dazu; end; |
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
Zitat:
Zitat:
@Toxman: :wall: Auf sowas sollte man kommen :mrgreen: danke! //edit: Einziges Problem ist jetzt noch, dass der Abstand von Shape.Top bzw. Shape.Left auch an den Shapes ganz am Rand gilt (das heißt, sie sind recht weit vom Rand entfernt). Hat jemand einen Lösungsvorschlag dafür? //edit2: Gut, hab da jetzt andere Objekte platziert, sieht nicht mehr so leer aus ;) |
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
Zitat:
|
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
*hust*
Wieso die Shapes eig. dynamisch platzieren? Schieb sie doch einfach hin..am Ende musst du doch eh nur die Farbe des TShape ändern :) air |
Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
Zitat:
- Ich kann das ganze Spielfeld direkt als 2dimensionales Array speichern (mach ich zwar noch seperat, aber trotzdem ganz praktisch). - Die Shapes werden gleichmäßig aufgelistet und müssen nicht per Hand "richtig" verschoben werden. Das erspart lästige Schönheitskorrekturen ;) - Das Programm wird kleiner, wenn weniger Komponenten mitgeliefert werden müssen @leddl: :wall: Hab ich nicht dran gedacht :oops: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:05 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