Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Schachbrettmuster im Array (https://www.delphipraxis.net/45959-schachbrettmuster-im-array.html)

tankm26 15. Mai 2005 16:13


Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo!

Als armer "Informatiker" stehe ich vor folgendem Problem: Ich möchte ein Schachbrettmuster in einem array erstellen, weiß aber nicht wie.


Welche Programmiersprache habe ich eigentlich bei Delphi 7?

Den source-code füge ich an.

mfg

Wieland

100nF 15. Mai 2005 16:18

Re: Schachbrettmuster im Array
 
hallo tankm26,

also irgendwie verstehe ich dein problem nicht ganz... :gruebel:

Zitat:

Welche Programmiersprache habe ich eigentlich bei Delphi 7?
ich würde sagen Pascal.

tankm26 15. Mai 2005 16:22

Re: Schachbrettmuster im Array
 
Das wird mein beim Erstellen eines neuen Themas gefragt...

Nee, aber das war doch überhaupt nicht mein Problem. Das array soll, immer im Wechsel, ein weißes und ein schwarzes Feld besitzen.

JasonDX 15. Mai 2005 16:22

Re: Schachbrettmuster im Array
 
Ein Schachbrettmuster erhält man ca. so:

Delphi-Quellcode:
const
  Farben: array[0..1] = (clWhite, clBlack);
//...
for i := 0 to AnzahlZeilen - 1 do
  for j := 0 to AnzahlSpalten - 1 do
    FarbeDerZelle[i][j] := Farben[(i + j) mod 2];

PS: Programmiersprache bei Delphi ist Object Pascal


[Edit]: Willkommen in der DP!! :party:

tankm26 15. Mai 2005 16:23

Re: Schachbrettmuster im Array
 
ich werds mal ausprobieren...


Ja,ja, Delphi ist doch was Feines.

Danke für den Gruß!

So, hab mir die Idee von chimaira mal angesehen:


Delphi-Quellcode:
const
  Farben: array[0..1] = (clWhite, clBlack);
//...
for i := 0 to AnzahlZeilen - 1 do
  for j := 0 to AnzahlSpalten - 1 do
    FarbeDerZelle[i][j] := Farben[(i + j) mod 2];


1.Frage: Sollen i und j Variablen werden? Integer ?
2.: Wo kommt das AnzahlZeilen her? Soll das spielfeld.ColCount und
spielfeld.RowCount sein?
Den Text soll ich wohl in FormCreate einfügen, oder?
3.: FarbederZeile, die constante "Farben", wie baue ich das ein?

Danke für eure schnelle Hilfe!

[edit=alcaeus]Delphi-Codes gesetzt. Bitte in Zukunft selbst erledigen ;) Mfg, alcaeus[/edit]

100nF 15. Mai 2005 16:27

Re: Schachbrettmuster im Array
 
Zitat:

Das wird mein beim Erstellen eines neuen Themas gefragt...
meinst du z.B. "Win32"? ich glaube das ist es...haben die meisten, darum habe ich es auch immer genommen :mrgreen:

JasonDX 15. Mai 2005 16:32

Re: Schachbrettmuster im Array
 
Zitat:

Zitat von urbanbruhin
Zitat:

Das wird mein beim Erstellen eines neuen Themas gefragt...
meinst du z.B. "Win32"? ich glaube das ist es...haben die meisten, darum habe ich es auch immer genommen :mrgreen:

Bei Delphi7 ist des definitiv Win32, da dies noch nicht .NET unterstützt ;)

tankm26 15. Mai 2005 16:35

Re: Schachbrettmuster im Array
 
Die beiden Zeilen kann ich schon mal rausschmeißen, es warten nur Versuche:

if feld [spielfeld.Col,spielfeld.Row].canvas.Brush.Color=clblack then begin
feld[spielfeld.Col,spielfeld.Row].canvas.Brush.Color:=clwhite;

Den Kram auch...
{ feld[aCol,aRow].Color:=clblack;
if Spielfeld.Color=clWhite
then Spielfeld.Color:=clblack; }

tankm26 15. Mai 2005 16:49

Re: Schachbrettmuster im Array
 
So, folgendes Problem habe ich jetzt nur noch (bei diesem Quelltext[ausschnitt]):
Delphi-Quellcode:
const
  ANZAHL=20;
  BREITE=20;

var
  Form1: TForm1;
  feld:array [0..ANZAHL-1,0..ANZAHL-1] of integer;
  dransein:integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
i,j: integer;
 begin
  spielfeld.ColCount:=ANZAHL+3;
  spielfeld.RowCount:=ANZAHL+3;
  spielfeld.DefaultColWidth:=BREITE;
  spielfeld.DefaultRowHeight:=BREITE;
  spielfeld.Width:=25*ANZAHL-13;
  spielfeld.Height:=25*ANZAHL-13;
  Form1.Width:=28*ANZAHL;
  Form1.Height:=28*ANZAHL;
  ShowMessage('');
  ShowMessage ('');
   for i:=0 to spielfeld.RowCount-1 do
    for j:=0 to spielfeld.ColCount-1 do
     Color of feld [i][j] :=Colors[(i + j) mod 2];
     end;

[Fehler] version1.pas(54): Anweisung erforderlich, aber Ausdruck vom Typ 'TColor' gefunden


Aber, das kriegen wir (ich) auch noch hin, oder?

[edit=Sharky]Delphi-Tags gesetzt. Bitte beim nächsten mal selber machen :-D Mfg, Sharky[/edit]

Sharky 15. Mai 2005 16:53

Re: Schachbrettmuster im Array
 
Hai,

wenn es "nur" um das Schachbrettmuster in dem TStringGrid geht würde ich das ganz einfach so machen:
Delphi-Quellcode:
procedure TForm1.spielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Odd(ACol) and not Odd(ARow) then
  begin
    spielfeld.Canvas.Brush.Color := clBlack;
  end;
  spielfeld.Canvas.FillRect(Rect);
end;
Diesen Code in das .OnDrawCell Ereigniss des TStringGrid und fertig ;-)

JasonDX 15. Mai 2005 16:59

Re: Schachbrettmuster im Array
 
1. Verwende bitte die Delphi-Tags
Code:
[delphi]
und
[/delphi]
[Edit]Habs zu spät gesehn[/Edit]

2. Das füllen der Felder geht mit einem DrawGrid einfacher als mit einem StringGrid. Dafür kannst du dir dann die Methoden von TDrawGrid namens Canvas.FillRect und CellRect angucken, im Fall hilft die OH oder die Suche




@Sharky: Ok, mit deiner Methode gehts auch, bloß nicht 'and not', sondern 'xor' nehmen ;)

Sharky 15. Mai 2005 17:02

Re: Schachbrettmuster im Array
 
Zitat:

Zitat von Chimaira
....@Sharky: Ok, mit deiner Methode gehts auch, bloß nicht 'and not', sondern 'xor' nehmen ;)

*g* Ist mir eben auch aufgefallen ;-)

Delphi-Quellcode:
procedure TForm1.spielfeldDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if Odd (Acol) XOR (Odd (ARow)) then
  begin
    spielfeld.Canvas.Brush.Color := clBlack;
  end;
  spielfeld.Canvas.FillRect(Rect);
end;
@tankm26: Die beiden "ShowMessage-Texte" sind aber nicht wirklich notwendig!!

tankm26 15. Mai 2005 17:11

Re: Schachbrettmuster im Array
 
Wegen der Texte/Messages:

Ja, die sind wirklich gemein. Es war nur eine Spielerei.

Das mit den delphi-tags mache ich beim nächsten mal natürlich. Sorry!

Die Möglichkeit von Sharky funktioniert wunderbar, danke erstmal!

Wenn man die Version von Chimaira weiterverfolgt, (Kommentar: Das mit ... Dafür kannst du dir dann die Methoden von TDrawGrid namens Canvas.FillRect und CellRect angucken, im Fall hilft die OH oder die Suche hab'
ich gar nicht kapiert.)

wie sähe das dann aus?

Ich war eben mit Sharky's Methode beschädtigt, hab sogar schon ein Foto davon gemacht (im Anhang).

Was bedeutet eigentlich if Odd(ACol) xor Odd(ARow)? Odd=? xor=?


Ich muss jetzt ersteinmal zum Essen. Bis gleich?

tankm26 15. Mai 2005 17:16

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
so, das bild.

JasonDX 15. Mai 2005 17:32

Re: Schachbrettmuster im Array
 
(Du kannst deine Beiträge, somit auch Titel und Anhang durch den Edit-button rechts oben editieren)

Meine Lösung würde so aussehen:
Delphi-Quellcode:
procedure FillRect(i, j: integer; Color: TColor);
begin
  DrawGrid1.Canvas.Brush.Color := Color;
  DrawGrid1.Canvas.FillRect(DrawGrid1.CellRect(i, j));
end;
Dabei ist aber zu beachten, dass dies in jedem OnShow-Ereignis zu erledigen ist, weil sich Canvas nicht von alleine neu zeichnet.


Also ist wohl Sharkys zu bevorzugen ;)


Bezüglich Odd: Meine OH sagt mir, dass dies eine Funktion ist, die mir sagt, ob eine Zahl gerade ist. Macht also das selbe wie (Zahl mod 2 = 0).
Bezüglich Xor: Xor ist ein boolscher operator mit folgender Wahrheitstabelle:
(exclusiv or)
Code:
a xor b = c
a b|c
---+-
0 0|0
0 1|1
1 0|1
1 1|0
Also wenn a <> b (wobei a, b und c immer boolean sein müssen)

Sharky 15. Mai 2005 17:37

Re: Schachbrettmuster im Array
 
Zitat:

Zitat von Chimaira
... Bezüglich Odd: Meine OH sagt mir, dass dies eine Funktion ist, die mir sagt, ob eine Zahl gerade ist. Macht also das selbe wie (Zahl mod 2 = 0)....

Hai Chimaira,

Odd() gibt True zurück wenn die übergebene Zahl undgerade ist (x mod 2 <> 0) ;-)

tankm26 15. Mai 2005 17:39

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke!!!

bigg 15. Mai 2005 18:01

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ein Schachbrett sieht für mich so aus. :P

PS: Du kannst gar kein Informatiker sein, höhstens
Auszubildender. In diesem Sinne angenehme pfingsten.

tankm26 16. Mai 2005 15:59

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Jetzt scheitere ich mittlerweile einen Tag daran, zwei Spieler in das Programm einzubinden, die abwechselnd rote und blaue Steine setzen.

Die Positionierung der Kreise auf dem Spielfeld funktioniert nicht.


Wo könnte hierbei ein Problem auftreten?

Spoon 16. Mai 2005 16:45

Re: Schachbrettmuster im Array
 
Also bei mir funktioniert es einwandfrei wenn ich

Delphi-Quellcode:
spielfeld.ColCount:=ANZAHL+3;
spielfeld.RowCount:=ANZAHL+3;
durch
Delphi-Quellcode:
spielfeld.ColCount:=ANZAHL;
spielfeld.RowCount:=ANZAHL;
ersetzte. Mir ist sowieso schleierhaft, was genau du damit bezwecken wolltest...

tankm26 16. Mai 2005 16:57

Re: Schachbrettmuster im Array
 
Warum es daran hing ist mir absolut schleierhaft, aber spoon hat Recht.


Die Spielfeldgröße/ "Form1"größe werde ich wohl anders anpassen können.

Danke Jungs und Mädels!

Jens Schumann 16. Mai 2005 17:14

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,
für ein "Spielbrett" habe ich mir mal vor einiger Zeit eine Komponente gebastelt.
Ein kleines Demoprogramm ist ebenfalls im Anhang enthalten.

Interessant ist die Eigenschaft SelectionMode(steht nur zur Laufzeit zur Verfügung).
Wenn SelectionMode auf True kann mit gedrückter linker Maustaste ein Rechteck
aufgespannt werden. Alle komplett im Rechteck enthaltenen Zellen werden dann
über das Event OnSelection im Parameter SelectionList geliefert.

tankm26 16. Mai 2005 17:40

Re: Schachbrettmuster im Array
 
das sieht ja stark nach 376. Informatiksemester aus!
(Ich habs erst ein Jahr.)

tankm26 28. Mai 2005 08:24

Neues Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Nun hänge ich an folgenden Problemen:
1. Es soll nur jeweils ein "Spielstein" pro Farbe markiert werden können.
2. Die Spieler sollen ihre Steine (auf ein gleichfarbiges Feld) setzen können, nachdem sie einen Stein ausgewählt haben.


Danke im Voraus!

tankm26 28. Mai 2005 10:50

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also für das 2.Problem habe ich schon 'ne Idee.

(siehe Anhang)

tankm26 30. Mai 2005 12:43

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, das hätte sich auch geklärt.
Nun aber besteht noch immer das Problem mit den gleichfarbigen Spielfeldern. Kann mir jemand dabei helfen?

tankm26 31. Mai 2005 15:33

Re: Schachbrettmuster im Array
 
Liste der Anhänge anzeigen (Anzahl: 1)
Selbst ist der Mann!


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