AGB  ·  Datenschutz  ·  Impressum  







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

Schachbrett

Ein Thema von fox67 · begonnen am 18. Mai 2013 · letzter Beitrag vom 29. Jan 2015
Antwort Antwort
Seite 1 von 2  1 2      
fox67

Registriert seit: 6. Okt 2010
Ort: 72661 Grafenberg
181 Beiträge
 
Turbo Delphi für Win32
 
#1

Schachbrett

  Alt 18. Mai 2013, 00:40
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.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Schachbrett

  Alt 18. Mai 2013, 01:08
Brauchst Du wirklich 65 Felder?
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#3

AW: Schachbrett

  Alt 18. Mai 2013, 01:26
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;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Schachbrett

  Alt 18. Mai 2013, 10:55
aber bitte dabei bedenken:

Ein Schachbrett hat 64 Felder. Deine Definition Felder : array[0..64] of TFeld; enthält aber 65 Felder. Also entweder Felder : array[0..63] of TFeld; oder Felder : array[1..64] of TFeld; Ansonsten bleibt ein Fehler vorhanden, egal wie Du die Zeichenlogik änderst.
  Mit Zitat antworten Zitat
wendelin

Registriert seit: 29. Dez 2010
Ort: Nürnberg
126 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Schachbrett

  Alt 29. Jan 2015, 10:43
Hallo,
hier ist ein Fehler

Delphi-Quellcode:
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;
grüße Wendelin
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Schachbrett

  Alt 29. Jan 2015, 10:46
Oder bis High(Felder) und das "Range Check Error" kommt leider nur, wenn man die Index-Prüfung aktiviert (Standard: aus)
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Schachbrett

  Alt 29. Jan 2015, 10:48
Fraglich ob 65 Felder wirklich Sinn machen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Schachbrett

  Alt 29. Jan 2015, 10:49
Oder bis High(Felder) und das "Range Check Error" kommt leider nur, wenn man die Index-Prüfung aktiviert (Standard: aus)
Dann aber besser auch von Low(Felder)

for I := Low( Felder) to High(Felder) do
Markus Kinzler
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Schachbrett

  Alt 29. Jan 2015, 10:54
Ist nicht grade ein Schachbrett einer der vielleicht drei Fälle im Universum wo ein mehrdimensionales Array mal Sinn macht?
  Mit Zitat antworten Zitat
Mikkey

Registriert seit: 5. Aug 2013
265 Beiträge
 
#10

AW: Schachbrett

  Alt 29. Jan 2015, 11:34
Ist nicht grade ein Schachbrett einer der vielleicht drei Fälle im Universum wo ein mehrdimensionales Array mal Sinn macht?
Für das Ausgangsproblem wäre ein Array[1..8] of integer/TDame wahrscheinlich sinnvoller. es gibt wohl im Universum doch nur zwei Fälle
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17:07 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