![]() |
Schachbrett
Hallo
ich wollte eigentlich das 8 Damen problem programmieren und hab mal mit dem Schachbrett angefangen eigentlich dürfte das nicht schwer sein aber ein fehler hatt sich bei mir eingeschlichen den ich leider trotz 1/2 suchen und rumprobieren nicht finden kann. In jeder reihe werden am anfang zwei felder in der gleichen farbe gezeichnet keine Ahnung warum.
Delphi-Quellcode:
unit Unit8;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TFeld = class(Tobject) position : Tpoint; private public end; TForm8 = class(TForm) Label1: TLabel; Image1: TImage; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } Felder : array[0..64] of TFeld; procedure position(); procedure Zeichnen(); end; var Form8: TForm8; implementation {$R *.dfm} procedure TForm8.Button1Click(Sender: TObject); begin zeichnen(); end; procedure TForm8.FormCreate(Sender: TObject); begin position(); end; procedure Tform8.position; var i,b,c : integer; begin for I := 0 to length(Felder) do begin felder[i] := Tfeld.create; felder[i].position.Y := I div 8; b := I div 8; c := b*8; felder[i].position.X := i - c; end; end; procedure TForm8.Zeichnen; var i : integer; schwarz : boolean; begin schwarz := false; for I := 0 to length(Felder) do begin if schwarz then begin image1.Canvas.Brush.Color := clblack; image1.Canvas.Rectangle(felder[i].position.X*50,felder[i].position.Y*50,felder[i].position.X*50+50, felder[i].position.Y*50+50); if not (I mod 8 = 0) then begin schwarz := false; end else begin showmessage(inttostr(i)); end; end else begin image1.Canvas.Brush.Color := clwhite; image1.Canvas.Rectangle(felder[i].position.X*50,felder[i].position.Y*50,felder[i].position.X*50+50, felder[i].position.Y*50+50); if not (I mod 8 = 0) then begin schwarz := true; end else begin showmessage(inttostr(i)); end; end; end; end; end. |
AW: Schachbrett
Brauchst Du wirklich 65 Felder?
|
AW: Schachbrett
versuchs mal so ...
Delphi-Quellcode:
procedure Tform8.position;
var i,b,c : integer; begin for I := 0 to length(Felder) do begin felder[i] := Tfeld.create; felder[i].position.y := I div 8; felder[i].position.x := I MOD 8; end; end; procedure TForm8.Zeichnen; Const ColorArray:Array [boolean] of TColor=(clBlack,clWhite); var i : integer; white:Boolean; begin white := true; for I := 0 to length(Felder) do begin image1.Canvas.Brush.Color := ColorArray[white]; if (i+1) mod 8 <> 0 then white := not White; image1.Canvas.Rectangle(felder[i].position.X*50,felder[i].position.Y*50,felder[i].position.X*50+50, felder[i].position.Y*50+50); end; end; |
AW: Schachbrett
aber bitte dabei bedenken:
Ein Schachbrett hat 64 Felder. Deine Definition
Delphi-Quellcode:
enthält aber 65 Felder. Also entweder
Felder : array[0..64] of TFeld;
Delphi-Quellcode:
oder
Felder : array[0..63] of TFeld;
Delphi-Quellcode:
Ansonsten bleibt ein Fehler vorhanden, egal wie Du die Zeichenlogik änderst.
Felder : array[1..64] of TFeld;
|
AW: Schachbrett
Hallo,
hier ist ein Fehler
Delphi-Quellcode:
grüße Wendelin
procedure Tform8.position;
var i,b,c : integer; begin for I := 0 to length(Felder) do // muß lauten to (length(Felder) -1) sonst 'Range Check Error ! begin felder[i] := Tfeld.create; felder[i].position.y := I div 8; felder[i].position.x := I MOD 8; end; end; procedure TForm8.Zeichnen; Const ColorArray:Array [boolean] of TColor=(clBlack,clWhite); var i : integer; white:Boolean; begin white := true; for I := 0 to length(Felder) do // muß lauten to (length(Felder) -1) sonst 'Range Check Error ! begin image1.Canvas.Brush.Color := ColorArray[white]; if (i+1) mod 8 <> 0 then white := not White; image1.Canvas.Rectangle(felder[i].position.X*50,felder[i].position.Y*50,felder[i].position.X*50+50, felder[i].position.Y*50+50); end; end; |
AW: Schachbrett
Oder bis
Delphi-Quellcode:
und das "Range Check Error" kommt leider nur, wenn man die Index-Prüfung aktiviert (Standard: aus) :wall:
High(Felder)
|
AW: Schachbrett
Fraglich ob 65 Felder wirklich Sinn machen.
|
AW: Schachbrett
Zitat:
Delphi-Quellcode:
for I := Low( Felder) to High(Felder) do
|
AW: Schachbrett
Ist nicht grade ein Schachbrett einer der vielleicht drei Fälle im Universum wo ein mehrdimensionales Array mal Sinn macht? :stupid:
|
AW: Schachbrett
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:24 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