Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Schachfeld - Gerade, Ungerade... (https://www.delphipraxis.net/32334-schachfeld-gerade-ungerade.html)

StanY 21. Okt 2004 20:12


Schachfeld - Gerade, Ungerade...
 
Delphi-Quellcode:
procedure TfrmMain.DrawMap();
var
  x,y: Integer;
begin
  for x := 0 to 7 do begin
    for y := 7 downto 0 do begin
      Feld[x,y].Shape := TShape.Create(self);
      with Feld[x,y].Shape do begin
        Parent := frmMain;
        Top := x*SHAPEHEIGHT+TOPSPACE;
        Left := y*SHAPEWIDTH+LEFTSPACE;
        Width := SHAPEWIDTH;
        Height := SHAPEHEIGHT;
        Brush.Style := bsSolid;
        Pen.Style := psSolid;
        if ((x+y mod 2) = 1) then begin
          Pen.Color := clBlack;
          Brush.Color := clBlack;
        end
        else begin
          Pen.Color := clWhite;
          Brush.Color := clWhite;
        end;
      end;
      Feld[x,y].Frei := true;
    end;
  end;
end;
Ich erzeuge ein Schachfeld druch 2 For-Schleifen (x=0-7,y=0-7) realisiert mi 8²-Shapes. Jetzt gilt es diese Shapes zu färben. Eigentlich müsste es ja so sein, dass jedes Feld, wo x+y mod 2 = 1 ist, also ungerade ist, Schwarz gefärbt wird. Allerdings sieht das in der Praxis ganz anders aus: Ich habe 8² Shapes. Bei den obersten Reihen läuft alles korreckt, erstes weiß, zweites schwarz, etc. Ab Reihe 3 sind alle Felder weiß... warum?

fkerber 21. Okt 2004 20:17

Re: Schachfeld - Gerade, Ungerade...
 
Hi!

Zufällig hab eich auch mal ein Schachfeld gemalt: :mrgreen:

Delphi-Quellcode:
farbe:=clwhite;
 for i:=0 to 63 do
  begin
    // Attribute berechnen:
    if not ((i mod 8) = 0) then
      if farbe=clwhite then
        farbe:=clblack else farbe:=clwhite;
[...]

Ciao Frederic

StanY 21. Okt 2004 20:31

Re: Schachfeld - Gerade, Ungerade...
 
Öhm, magst du mir erklären, was an deinem richtig und an meinem falsch ist?


Warum mod 8? ich muss doch nur schaun, ob x+y gerade oder ungerade ist, und das is mod 2. Oder liege ich da falsch? oO

fkerber 21. Okt 2004 20:47

Re: Schachfeld - Gerade, Ungerade...
 
Hi!

Jepp, das mag ich dir erklären:
Also, vorneweg, mein Feld sieht so aus:

Code:
 0   1   2   3   4   5   6   7
 8   9  10  11  12  13  14  15
16  17  18  19  20  21  22  23
als erstes gehe ich hin und lege die Farbe weiß als Anfangsfarbe fest.

Delphi-Quellcode:
farbe:=clwhite;
Dann erfolgt die Abfrage:
Delphi-Quellcode:
    if not ((i mod 8) = 0) then
      if farbe=clwhite then
        farbe:=clblack else farbe:=clwhite;
Dort wird folgendes getan:
Wenn ( i mod 8 ) ungleich 0 ist, dann wird die Farbe getauscht. Dies ist jeweils im ersten Feld einer neuen Reihe nicht der Fall, also wird dort immer die selbe Farbe verwendet wie in der vorrangegangen Reihe beim letzten Feld. so wird ein Abwechseln der Farben in vertikaler Richtung ermöglicht.

Hoffe, dir geholfen zu haben.


Ciao Frederic

Nonsense 21. Okt 2004 20:47

Re: Schachfeld - Gerade, Ungerade...
 
Mal ein Schachrettmuster für's StringGrid:
Delphi-Quellcode:
procedure TFormMain.StringGridDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  with StringGrid do
  begin
    // Schachbrett-Muster
    // Koordinaten testen (ob gerade oder ungerade)
    if ((ACol mod 2 = 0) and (ARow mod 2 = 1)) or
       ((ARow mod 2 = 0) and (ACol mod 2 = 1)) then
    begin
      Canvas.Brush.Color := clMaroon;
      Canvas.Font.Color := clWhite;
    end;

    // Füllen
    Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[ACol, ARow]);
    Canvas.FrameRect(Rect);
  end;
end;

jim_raynor 21. Okt 2004 20:49

Re: Schachfeld - Gerade, Ungerade...
 
Kann es sein dass du einfach ein paar Klammer falsch gesetzt hast?

Versuche es doch mal so:

Delphi-Quellcode:
(((x+y) mod 2) = 1)

StanY 21. Okt 2004 21:38

Re: Schachfeld - Gerade, Ungerade...
 
ja, das ist sogar so.

Danke an alle, aber besonders an dich (;.

.oO(Darauf hätte ich auch alleine kommen können \:)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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