AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Minesweeper

Ein Thema von saii · begonnen am 21. Mär 2015 · letzter Beitrag vom 29. Mär 2015
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Minesweeper

  Alt 25. Mär 2015, 10:53
Das ist auch der Grund wieso er den für den Profi aufwendigen Weg mit Panels geht, statt es anders (besser) zu machen.
Ich finde das mit den Panels gar nicht schlecht... Besser als Buttons...

Mavarik

[OT]

Man kann auch Konstanten definieren, um Magic Values zu vermeiden, das erhöht die Lesbarkeit des Codes.
für GIF87a (0x474946383761) lass ich mir das ja noch gefallen...

Aber für ein Shl 8 oder Shl 16 genauso wenig wir für Byte := Byte XOR $FF;

Man kann es auch übertreiben...

[/OT]
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#2

AW: Minesweeper

  Alt 25. Mär 2015, 10:55
Wenn ich schon Konstanten einführe, dann konsequent. Aber jeder so, wie er meint.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Minesweeper

  Alt 25. Mär 2015, 11:01
Wenn ich schon Konstanten einführe, dann konsequent. Aber jeder so, wie er meint.
Ist ja alles richtig... Ich hatte nur "Angst" das Du sagt... Wenn ich das mit XY-Pascal für XY CPU übersetze ist ein Byte 9 bit...
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#4

AW: Minesweeper

  Alt 25. Mär 2015, 11:30
Ich finde das mit den Panels gar nicht schlecht... Besser als Buttons...
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.


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?
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.154 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Minesweeper

  Alt 25. Mär 2015, 11:32
Was wäre denn besser geeignet?
Ein fettes Image wo ich kleine Bildchen draufposte...

Da habe ich alle Freiheiten...

Mavarik
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#6

AW: Minesweeper

  Alt 25. Mär 2015, 11:48
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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#7

AW: Minesweeper

  Alt 25. Mär 2015, 11:49
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;
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#8

AW: Minesweeper

  Alt 25. Mär 2015, 12:04
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.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#9

AW: Minesweeper

  Alt 25. Mär 2015, 12:41
@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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#10

AW: Minesweeper

  Alt 25. Mär 2015, 13:01
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen

Geändert von DeddyH (25. Mär 2015 um 13:55 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:07 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