Entwickler-Ecke
Sonstiges (Delphi) - Schachbrett Programmieren Hilfe...
Larissa17 - Mo 24.04.06 20:23
Titel: Schachbrett Programmieren Hilfe...
Hallo Leute...
Wir ham Delphi 2005 in der Schule als Thema
und nun sollen wir sowas wie ein Schachbrett programmieren... bei dem man wählen kann wie lang die Kästchen sind wie viele es sind und welche Farbe die einzelnen Kästchen haben (also z.b. blau und rot oder weiß und schwarz)
Ich hab leida nicht ma den Funken einer Idee wie man des machen könnte und grüble schon die ganzen Ferien... nun weiß ich mir keinen Rat mehr...
Also falls irgendwer Lust hat bissi zu knobeln oder sich schlichtweg gut auskennt wäre echt saunett mir zu erklären wie man des am Besten macht...
mfG Larissa
Moderiert von
matze: Titel geändert.
GTA-Place - Mo 24.04.06 20:31
Habt ihr schonmal mit Canvas gearbeitet?
Fabian W. - Mo 24.04.06 20:38
Kommt darauf an wie weit ihr in Delphi seit. Wenn das ganze anspruchsvolls ein soll dann könnte man images generieren und aneinanderreihen, wenn ihr erst anfangt is canvas gut...
Könntest du auch dein Problem etwas spezifizieren? Hast du einfach kA odre bereiten dir die Komponenten Probleme?
mfg
Larissa17 - Di 25.04.06 00:56
Also wir haben canvas und ein wenig images aber mit zweiterem ham wir noch net soooo oft gearbeitet ;)
also mit den einzelnen Komponenten hab ich eher nich so viele Schwierigkeiten.
Ich hab halt keine Ahnung wie ich die sachen mit diversen schleifen und canvas so zusammsetze das ich am ende der aufgabe gerecht werde...
Logikmensch - Di 25.04.06 06:14
Hallo Larissa17,
zum Eingewöhnen, auch wenn das Zeitverhalten nicht das beste wird, empfehle ich hier eine Image-Komponente auf dein Formular zu platzieren und mit dessen Canvas-Eigenschaften (Brush, Pen) und -Methoden (FillRect, Rectangle) zu experimentieren. Image deswegen, weil Du hier vom System verwöhnt wirst und das Canwas wie eine stabil bleibende Leinwand bemalen kannst (im Gegensatz zur Paintbox, die ihr Gemale immer wieder vergisst). Du kannst ja die Größe des Image (Image.width und .height) als Maximalkoordinaten verwenden und "einfach" ein rechteckiges Gitter reinmalen (mit zweifach geschachtelter Schleife). Schachbrettmuster lassen sich mit Hilfe des Abfragens der Schleifenzähler auf gerade oder ungerade (funktion Odd) abtesten. Da kannst Du z.B. den ungeradzahligen Rechtecken ein gelbes und den geradzahligen ein schwarzes Füllmuster zuweisen.
Liebe Grüße,
Claus.
Blackheart666 - Di 25.04.06 08:41
Hier mal ein Fertiger Code, ist nicht von Mir vieleicht kannst du damit was anfangen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82:
| var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject); var i,x,y,modtemp: integer;
begin form1.Canvas.Pen.Color := clBlack; for i:=0 to 8 do begin canvas.MoveTo(60+i*50,60); canvas.LineTo(60+i*50,460); canvas.MoveTo(60,60+i*50); canvas.LineTo(460,60+i*50); end;
x := 0; while x <> 8 do begin x := x + 1; for y := 1 to 8 do begin modtemp := y mod 2; if modtemp = 0 then begin Form1.Canvas.Brush.Color := clWhite; Form1.Canvas.FillRect(Rect(50*(y)+11,50*(x)+11, 50*(y)+60,50*(x)+60)); end else begin Form1.Canvas.Brush.Color := clGray; Form1.Canvas.FillRect(Rect(50*(y)+11,50*(x)+11, 50*(y)+60,50*(x)+60)); end; end; end;
x := 0; while x <> 8 do begin x := x + 2; for y := 1 to 8 do begin modtemp := y mod 2; if modtemp = 0 then begin Form1.Canvas.Brush.Color := clGray; Form1.Canvas.FillRect(Rect(50*(y)+11,50*(x)+11, 50*(y)+60,50*(x)+60)); end else begin Form1.Canvas.Brush.Color := clWhite; Form1.Canvas.FillRect(Rect(50*(y)+11,50*(x)+11, 50*(y)+60,50*(x)+60)); end; end; end;
form1.Canvas.Brush.Color := clBtnFace;
font.Name:='Arial'; font.Size:=20;
for i:=1 to 8 do begin canvas.TextOut(i*50+25,20,chr(96+i)); canvas.TextOut(25,i*50+20,inttostr(i)); end;
end;
end. |
bms - Di 25.04.06 09:30
Eigentlich wollte ich den Quellcode davon abhängig machen ob du es schafst den Beitragstext oben so zu formulieren, daß es jeder vernünftige Mensch versteht. Aber lassen wir das. Das nächste Mal.
Hier ein kurzes Beispiel wie das geht. Wenn du keine schwarzen Trennlinien haben willst, dann muß du neben Brush auch Pen eine Farbe geben.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure PaintX(Ax, Ay, AWidth: Word; ACan: TCanvas; ACol1, ACol2: TColor); var x, y, x1, x2, y1, y2: Word; Col: array[Boolean] of TColor; begin ACan.Brush.Style := bsSolid; Col[False] := ACol1; Col[True] := ACol2;
for y := 0 to Ay - 1 do begin for x := 0 to Ax - 1 do begin ACan.Brush.Color := Col[Odd(x) xor Odd(y)]; x1 := x * AWidth; x2 := x1 + AWidth; y1 := y * AWidth; y2 := y1 + AWidth;
ACan.Rectangle(x1, y1, x2, y2); end; end; end;
procedure TForm1.Button1Click(Sender: TObject); begin PaintX(8, 8, 20, Canvas, clYellow, clGreen); end; |
Wenn du noch weiter zeichnen möchtest, dann würde ich mir vorher die Canvas Eigenschaften wie z.B. Farbe und Style sichern und nach getanner Arbeit wieder zuweisen.
dh - Di 25.04.06 09:41
Habe noch nie damit gearbeitet, aber Delphi bietet DrawGrid an. Damit lassen unter anderem auch Spielbretter, Heuristiken usw. erstellen. ( Sokoban, 5-Gewinnt usw )
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!