-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Passt!
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Hab' ich jetzt auch schon gemerkt, dass Du gar nicht das gemeint hast, was ich in Deinen Satz fälschlicherweise hineininterpretiert habe. :angel:
Auf deutsch:
Ich habe etwas gelesen, was Du gar nicht geschrieben hast und mich dadurch danach gewundert, dass Du es trotzdem so machst, wie es meiner Meinung nach richtig und regelkonform ist.
Manchmal hilft Brille aufziehen und noch 2 mal lesen.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Ich hab ja nicht die Regel angezweifelt, sondern mich auf dieses bezogen:
Ich hatte es so gelesen, dass auch wenn es ein Zahlenfeld ist, Du nicht nur die Regel auf dieses Zahlenfeld anwenden möchtest, sondern wiederum ringsherum alles prüfst und angrenzenden Zahlenfelder aufdecken möchtest.
Und dieser Schritt wäre falsch aber Du machst ihn ja auch nicht.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Reden wir hier aneinander vorbei?
Du machst doch genau das was ich geschrieben habe.
Wenn Dein Feld in der if-Bedingung ein Zahlfeld ist, dann werden die umliegenden Felder nicht geprüft.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Ja ist es denn so schwer zu verstehen?
Nimm Deine Regel und Du siehst, dass eben aus diesem Grund keine Überprüfung der umliegenden Felder eines Zahlfeldes NOTWENDIG ist.
Und daher werden die umliegenden Felder eines ZAHLFELDES nach dem Aufdecken eben NICHT mehr geprüft.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
27. Mär 2015
Ist das angrenzende Feld zu einem Leerfeld eine Zahl, dann wird das Zahlfeld aufgedeckt, aber die angrenzenden Felder des Zahlfeldes NICHT mehr überprüft.
Siehe QuellCode in #75.
Ist eine "Fahne" gesetzt, dann wird diese nicht automatisch aufgedeckt, auch nicht wenn sich darunter eine Zahl oder Leerfeld verbirgt. Ein gesetztes Fragezeichen hingegen wird automatisch behandelt, also wie...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Wenn Du Deinen Code aus #32 benutzt
procedure TForm1.CreatePanelMatrix(x1, y1: Integer);
var
x,y:integer;
begin
for x := 0 to 14 do
for y := 0 to 14 do
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Sogar gleich zweimal.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Schau Dir das Bild nochmals genau an.
Beim Klick auf das einzelne Feld auf das der roten Pfeil zeigt hat sich ALLES was rot umrandet ist geöffnet. Und dies ist nur 1 Abbild von zig Versuchen welche ich gemacht habe.
Dort wirst Du auch feststellen können, dass dort ZWEI diagonale "Grenzen" enthalten sind, welche eben NICHT als Begrenzung gelten.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Das ist doch schon wieder falsch.
Zum 100. mal: Die Diagonale ist keine Grenze.
In diesem Beispiel wird auf Feld(1,2) mit der Raute geklick.
geöffnet werden:
(0,2),(1,2),(0,3),(1,3) UND (2,1),(3,1),(2,0),(3,0)
Beispiel siehe Bild in Post #82.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Warum nicht?
100 Minensucher, welche nahezu identisch aussehen, aber garantiert gleichzeitig 90 verschiedene Lösungsansätze in den Internas.
Durch solch einen Vergleich stellt man erst einmal fest, wieviele Wege, welche man machmal gar nicht in Betracht gezogen hatte, nach Rom führen.
Auch der Vergleich von kompletten Programmen kann durchaus lehrreich sein.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Ganz sicher, habe es gerade nochmals getestet.
Habe 2 Klicks gemacht:
1. Blauer Pfeil auf geglicktes Feld => Blau aufgeangen
2. Roter Pfeil auf geglicktes Feld => rot aufgeangen
Im roten Bereich sind sogar 2 diagonale Angrenzungen in diesem Beipiel, welche alle sich nur durch den klick auf das mit dem roten Pfeil markierten Feld geöffnet haben.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
DOCH, auch dieses Feld wird aufgedeckt.
So ist es beim MS-MineSweeper auf alle Fälle. Habe diese Konstellation mehrfach überprüft und immer wenn das Diagonalfeld auch leer war hat die MS-Version auch alles weitere aufgedeckt, was an das Diagonalfeld angrenzte.
NOCHMALS:
Die Diagonale ist KEINE Sperre im MS-MineSweeper.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
So könnte dann die Play aussehen:
procedure TMinesweeperForm.Play(X, Y: Integer);
begin
if ((InPanelGrid(X, Y)) and (FPanels.Enabled)) then
begin
FPanels.Color := clWindow;
FPanels.Enabled := false;
if (FPanels.FlankingMinesCount > 0) then
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
26. Mär 2015
Das 3er Feld wird auch aufgedeckt, da es auf keinen Fall eine Bombe sein kann. Und auch die dann weiter angrenzenden Felder werden wiederum geprüft.
Die Diagonale ist keine Sperre.
Und so macht es der MS-Minesweeper auch.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
Der FloodFill-Algorithmus in der 4-Neighbour-Variante ist doch genau der Ansatz den er braucht.
Wenn in ein Feld geklickt wird, dass keine Zahl und keine Bombe enthält, dann alles Aufdecken, was leer ist und was angrenzend eine Zahl hat.
Also, wenn leer, dann aufdecken und rekursiv oben unten links und rechts weiter prüfen. Wenn eine Zahl, dann nur aufdecken und diese Stelle nicht mehr...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
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...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
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.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
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.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
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.
Was wäre denn...
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
25. Mär 2015
procedure TForm1.PanelMatrixMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
S: string;
C: char;
Panel: TPanel;
Pos: TPoint;
begin
if Sender is TPanel then
begin
Panel := TPanel(Sender);
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
24. Mär 2015
Für was brauchst Du das A?
Auf das auslösende Panel kannst Du in der Event-Prozedure mit DiesesPanel := TPanel(Sender); zugreifen.
-
Forum: Algorithmen, Datenstrukturen und Klassendesign
Delphi
by BadenPower,
24. Mär 2015
Die Zuweisung der Prozedur zum Ereignis erfolgt ohne Klammern und ohne Parameter, also nur der Prozedurname.
Panel.OnMouseDown := PanelMatrixMouseDown;