Delphi-PRAXiS
Seite 6 von 14   « Erste     456 78     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Minesweeper (https://www.delphipraxis.net/184385-minesweeper.html)

BadenPower 25. Mär 2015 11:30

AW: Minesweeper
 
Zitat:

Zitat von Mavarik (Beitrag 1294752)
Ich finde das mit den Panels gar nicht schlecht... Besser als Buttons... :stupid:

Das mit den Panels finde ich persönlich auch praktisch, denn mann kann sie einerseits als "Schalfläche" darstellen und ohne großen Aufwand nach dem Linksklick als reine Anzeige für Freifläche oder Zahlendarstellung benutzen.

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:

Zitat von Popov (Beitrag 1294748)
Das ist auch der Grund wieso er den für den Profi aufwendigen Weg mit Panels geht, statt es anders (besser) zu machen.

Was wäre denn besser geeignet?

Mavarik 25. Mär 2015 11:32

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1294762)
Was wäre denn besser geeignet?

Ein fettes Image wo ich kleine Bildchen draufposte...

Da habe ich alle Freiheiten...

Mavarik

BadenPower 25. Mär 2015 11:48

AW: Minesweeper
 
Zitat:

Zitat von Mavarik (Beitrag 1294763)
Ein fettes Image wo ich kleine Bildchen draufposte...

Auch für jede Zahl und das Freifeld ein Image?

Gut, wären dann 13 Bildchen.
Zahlen 1-8, Leerfeld, Markierung, Bombe eplodiert, Bombe, Fragezeichen.

Popov 25. Mär 2015 11:49

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1294762)
Was wäre denn besser geeignet?

Eine Bitmap, bzw. eine Image oder Paint oder Formular. Einfach ein normales Feld in das man zeichnen kann.

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;

BadenPower 25. Mär 2015 12:04

AW: Minesweeper
 
Zitat:

Zitat von Popov (Beitrag 1294766)
Eine Bitmap, bzw. eine Image oder Paint oder Formular. Einfach ein normales Feld in das man zeichnen kann.

Schön, jetzt hast Du ein schönes Karofeld, welches Du anklicken kannst und Dir die gewünschten Werte gibt.

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.

Popov 25. Mär 2015 12:41

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:
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;
Auch fünf Minuten.

DeddyH 25. Mär 2015 13:01

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.

puderle 25. Mär 2015 13:11

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

http://de.wikipedia.org/wiki/Floodfill

rekursiv(kürzer):
http://www.tutego.de/blog/javainsel/...llalgorithmen/

Daniel 25. Mär 2015 13:39

AW: Minesweeper
 
Zitat:

Zitat von puderle (Beitrag 1294780)
habe mir mal erlaubt deine frage zu beantworten xD

Nein. Du hast lediglich die Anwesenden beleidigt:

Zitat:

Zitat von puderle (Beitrag 1294780)
lass dich von den spaghetticode noobs hier nicht verwirren

Herzlichen Dank auch.

BadenPower 25. Mär 2015 16:28

AW: Minesweeper
 
Zitat:

Zitat von Popov (Beitrag 1294776)
@BadenPower
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.

Ja klar, man kann auch die Symbole, welche man anzeigen lassen will immer selbst zeichnen anstatt ein Bild davon in eine ImageList zu laden um es wieder zu verwenden.

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.
Seite 6 von 14   « Erste     456 78     Letzte »    

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