Autor |
Beitrag |
Larissa17
Hält's aus hier
Beiträge: 2
|
Verfasst: Mo 24.04.06 20:23
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
      

Beiträge: 5248
Erhaltene Danke: 2
WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
|
Verfasst: Mo 24.04.06 20:31
Habt ihr schonmal mit Canvas gearbeitet?
_________________ "Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
|
|
Fabian W.
      
Beiträge: 1766
Win 7
D7 PE
|
Verfasst: 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 
Hält's aus hier
Beiträge: 2
|
Verfasst: 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
      
Beiträge: 390
Win XP
Delphi 2007 Prof., XE2, XE5
|
Verfasst: 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
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: Di 25.04.06 08:41
Hier mal ein Fertiger Code, ist nicht von Mir vieleicht kannst du damit was anfangen.
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
      
Beiträge: 735
Win XP
Delphi 3, Delphi 6 PE, Delphi 2005 PE
|
Verfasst: 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.
_________________ VORSICHT: Ich behersche seit heute die Fünf-Finger-Handflächen-Herz-Explodier-Schlag-Kampf-Technik >
|
|
dh
Hält's aus hier
Beiträge: 11
Delphi 6 PE, Delphi 7 Prof., Delphi 8 Prof., C++, Java, PHP
|
Verfasst: 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 )
|
|
|