AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schachfeld - Gerade, Ungerade...

Ein Thema von StanY · begonnen am 21. Okt 2004 · letzter Beitrag vom 21. Okt 2004
Antwort Antwort
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#1

Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:12
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?
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:17
Hi!

Zufällig hab eich auch mal ein Schachfeld gemalt:

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
Frederic Kerber
  Mit Zitat antworten Zitat
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#3

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:31
Ö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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#4

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:47
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.

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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Nonsense
Nonsense

Registriert seit: 23. Nov 2002
389 Beiträge
 
Delphi 5 Standard
 
#5

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:47
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;
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#6

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 20:49
Kann es sein dass du einfach ein paar Klammer falsch gesetzt hast?

Versuche es doch mal so:

(((x+y) mod 2) = 1)
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
StanY

Registriert seit: 5. Aug 2004
145 Beiträge
 
#7

Re: Schachfeld - Gerade, Ungerade...

  Alt 21. Okt 2004, 21:38
ja, das ist sogar so.

Danke an alle, aber besonders an dich (;.

.oO(Darauf hätte ich auch alleine kommen können \
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz