![]() |
Schachfeld - Gerade, Ungerade...
Delphi-Quellcode:
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?
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; |
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 |
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 |
Re: Schachfeld - Gerade, Ungerade...
Hi!
Jepp, das mag ich dir erklären: Also, vorneweg, mein Feld sieht so aus:
Code:
als erstes gehe ich hin und lege die Farbe weiß als Anfangsfarbe fest.
0 1 2 3 4 5 6 7
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Delphi-Quellcode:
Dann erfolgt die Abfrage:
farbe:=clwhite;
Delphi-Quellcode:
Dort wird folgendes getan:
if not ((i mod 8) = 0) then
if farbe=clwhite then farbe:=clblack else farbe:=clwhite; 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 |
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; |
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)
|
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