![]() |
AW: Minesweeper
Zitat:
Einzig das Darstellen von Bildchen als Symbole (z.B Fähnchen) auf dem Panel ist umständlicher als bei der Verwendung von TSpeedButton oder TBitBtn. Zitat:
|
AW: Minesweeper
Zitat:
Da habe ich alle Freiheiten... Mavarik |
AW: Minesweeper
Zitat:
Gut, wären dann 13 Bildchen. Zahlen 1-8, Leerfeld, Markierung, Bombe eplodiert, Bombe, Fragezeichen. |
AW: Minesweeper
Zitat:
Mal auf die Schnelle. Du benötigst eine Image Komponente. In OnMouseDown fragst du ab welches Feld geklickt wurde.
Delphi-Quellcode:
const
MaxX = 20; MaxY = 20; CellWidth = 15; CellHeigth = 15; LineWidth = 1; procedure TForm1.FormCreate(Sender: TObject); var x, y: Integer; begin with Image1.Picture do begin Bitmap.Width := (MaxX * (CellWidth + LineWidth)) + LineWidth; Bitmap.Height := (MaxY * (CellHeigth + LineWidth)) + LineWidth; for x := 0 to MaxX do begin Bitmap.Canvas.MoveTo(x * (CellWidth + LineWidth ), 0); Bitmap.Canvas.LineTo(x * (CellWidth + LineWidth ), Bitmap.Height); end; for y := 0 to MaxY do begin Bitmap.Canvas.MoveTo(0, y * (CellHeigth + LineWidth )); Bitmap.Canvas.LineTo(Bitmap.Width , y * (CellHeigth + LineWidth )); end; end; end; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var c, r: Integer; begin c := X div (CellWidth + LineWidth ); r := Y div (CellHeigth + LineWidth ); //Falls über das MaxX oder MaxY geklickt: -1 if c > (MaxX - 1) then c := -1; if r > (MaxY - 1) then r := -1; Caption := Format('Feld geklickt: x = %d; y = %d', [c, r]); end; |
AW: Minesweeper
Zitat:
Aber es ist nun keine Funktionalität sichtbar. Schaltflächendesign / Anzeigedesign usw. Das müsstest Du nun ja wiederum selbst implementieren um den Minesweeper-Look herzustellen. |
AW: Minesweeper
@BadenPower
Und wo ist das Problem? Ich wollte dir mit dem Beispiel nur zeigen, dass man innerhalb von fünf bis zehn Minuten ein Feld generieren kann und auch die Koordinaten abfragen kann. Du willst eine 3D-Zelle?
Delphi-Quellcode:
Auch fünf Minuten.
procedure TForm1.Button1Click(Sender: TObject);
var BtnBmp: TBitmap; begin BtnBmp := TBitmap.Create; with BtnBmp do try Canvas.Brush.Color := clBtnFace; Width := 20; Height := 20; Canvas.MoveTo(0, Height-1); Canvas.Pen.Color := clWhite; Canvas.LineTo(0, 0); Canvas.LineTo(Width-1, 0); Canvas.Pen.Color := clGray; Canvas.LineTo(Width-1, Height-1); Canvas.LineTo(0, Height-1); Self.Canvas.Draw(10, 10, BtnBmp); finally BtnBmp.Free; end; end; |
AW: Minesweeper
Es gibt doch mehrere Möglichkeiten, so etwas umzusetzen: entweder man schreibt etwas "Großes", das sich um die Darstellung sowie die komplette Logik kümmert oder man verwaltet mehrere "kleine" Komponenten, die jede für sich autark mindestens die Darstellung übernehmen. Was nun "besser" oder "schlechter" ist, muss jeder für sich selbst entscheiden.
|
AW: Minesweeper
FILL-Algorithmus
"FLOODFILL" z.b. - so habe ich mein Minesweeper gemacht. genau das passiert wenn du auf ein Feld klickst das keine Mine ist und andere umliegende Felder auch aufgedeckt werden müssen. lass dich von den spaghetticode noobs hier nicht verwirren.. habe mir mal erlaubt deine frage zu beantworten xD ![]() rekursiv(kürzer): ![]() |
AW: Minesweeper
Zitat:
Zitat:
|
AW: Minesweeper
Zitat:
Es ist doch wohl eher eine subjektive Frage ob man etwas bestehendes mit Funktionalität wie zum Beipiel ein Panel verwendet und nur Properties ändern braucht, als alles selbst zu Zeichnen und die gesamte Funktionalität und das optische Erscheinungsbild für alle ausführbaren Aktionen auch noch zusätzlich hinzufügen muss. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:32 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