Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen nicht (https://www.delphipraxis.net/42105-4-gewinnt-spielfeld-erzeugen-felderpostionen-stimmen-nicht.html)

malo 13. Mär 2005 20:05


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:
Feld: array[1.. 8, 1.. 8] of TShape;
Mit folgendem Code will ich nun die Shapes erzeugen und positionieren:

Delphi-Quellcode:

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;
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?

leddl 13. Mär 2005 20:44

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:

Nikolas 13. Mär 2005 21:34

Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
 
Das rekursive Setzen ist doch etwas kompliziert, oder?
Delphi-Quellcode:
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;
Ist doch etwas sauberer.

malo 14. Mär 2005 02:20

Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
 
Zitat:

Zitat von leddl
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.

Ich habe [1,1] gesetzt, damit ich bei den anderen vom VORHERIGEN PUNKT aus die Felder setzen kann. Und bei [1,1] gibt es ja keinen vorherigen Punkt...

Zitat:

Zitat von leddl
Außerdem: Warum deklarierst du dir ein 8x8-Array und benutzt nur 7x7? :gruebel:

:oops: War eigentlich nur zum Testen zum 8x8-Array geändert, soll aber 7x7 sein ;)

@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 ;)

leddl 14. Mär 2005 09:41

Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
 
Zitat:

Zitat von malo
Ich habe [1,1] gesetzt, damit ich bei den anderen vom VORHERIGEN PUNKT aus die Felder setzen kann. Und bei [1,1] gibt es ja keinen vorherigen Punkt...

Das war mir schon klar, nur hast du eben ab [1,1] erst wieder bei [2,2] angefangen und somit die gesamte 1. Spalte und 1. Zeile außer [1,1] ausgelassen. Das könnte eben erklären, warum nicht alle Felder gesetzt waren.

Airblader 14. Mär 2005 12:25

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

malo 14. Mär 2005 12:57

Re: 4 Gewinnt: Spielfeld erzeugen: Felderpostionen stimmen n
 
Zitat:

Zitat von Airblader
*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

Ein paar Vorteile beim dynamischen Generieren:

- 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