![]() |
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 |
Re: Schachbrettmuster im Array
hallo tankm26,
also irgendwie verstehe ich dein problem nicht ganz... :gruebel: Zitat:
|
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. |
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: |
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] |
Re: Schachbrettmuster im Array
Zitat:
|
Re: Schachbrettmuster im Array
Zitat:
|
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; } |
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] |
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:
Diesen Code in das .OnDrawCell Ereigniss des TStringGrid und fertig ;-)
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; |
Re: Schachbrettmuster im Array
1. Verwende bitte die Delphi-Tags
Code:
[Edit]Habs zu spät gesehn[/Edit]
[delphi]
und [/delphi] 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 ![]() @Sharky: Ok, mit deiner Methode gehts auch, bloß nicht 'and not', sondern 'xor' nehmen ;) |
Re: Schachbrettmuster im Array
Zitat:
Delphi-Quellcode:
@tankm26: Die beiden "ShowMessage-Texte" sind aber nicht wirklich notwendig!!
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; |
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? |
Re: Schachbrettmuster im Array
Liste der Anhänge anzeigen (Anzahl: 1)
so, das bild.
|
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:
Dabei ist aber zu beachten, dass dies in jedem OnShow-Ereignis zu erledigen ist, weil sich Canvas nicht von alleine neu zeichnet.
procedure FillRect(i, j: integer; Color: TColor);
begin DrawGrid1.Canvas.Brush.Color := Color; DrawGrid1.Canvas.FillRect(DrawGrid1.CellRect(i, j)); end; 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:
Also wenn a <> b (wobei a, b und c immer boolean sein müssen)
a xor b = c
a b|c ---+- 0 0|0 0 1|1 1 0|1 1 1|0 |
Re: Schachbrettmuster im Array
Zitat:
Odd() gibt True zurück wenn die übergebene Zahl undgerade ist (x mod 2 <> 0) ;-) |
Re: Schachbrettmuster im Array
Liste der Anhänge anzeigen (Anzahl: 1)
Danke!!!
|
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. |
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? |
Re: Schachbrettmuster im Array
Also bei mir funktioniert es einwandfrei wenn ich
Delphi-Quellcode:
durch
spielfeld.ColCount:=ANZAHL+3;
spielfeld.RowCount:=ANZAHL+3;
Delphi-Quellcode:
ersetzte. Mir ist sowieso schleierhaft, was genau du damit bezwecken wolltest...
spielfeld.ColCount:=ANZAHL;
spielfeld.RowCount:=ANZAHL; |
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! |
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. |
Re: Schachbrettmuster im Array
das sieht ja stark nach 376. Informatiksemester aus!
(Ich habs erst ein Jahr.) |
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! |
Re: Schachbrettmuster im Array
Liste der Anhänge anzeigen (Anzahl: 1)
Also für das 2.Problem habe ich schon 'ne Idee.
(siehe Anhang) |
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? |
Re: Schachbrettmuster im Array
Liste der Anhänge anzeigen (Anzahl: 1)
Selbst ist der Mann!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:37 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