Delphi-PRAXiS
Seite 13 von 14   « Erste     3111213 14      

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)

Sir Rufo 27. Mär 2015 08:49

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1295018)
Zitat:

Zitat von Sir Rufo (Beitrag 1295002)
Zitat:

Zitat von Bjoerk (Beitrag 1295001)
"Angrenzende Felder des leeren Feldes die eine Zahl haben ebenfalls aufdecken." Hört sich irgendwie anders an oder blick ich's jetzt auch nicht mehr?

Ja hört sich anders an, ist aber auch falsch, bzw. nicht komplett.

Es ist wurst-schnuppe-pieps-egal, ob die angrenzenden Felder eine Zahl haben oder nicht, die werden aufgedeckt und für jedes dieser Felder die gleiche Regel wieder angewendet.

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.

Kinder, Kinder ... Kontext lesen :roll:

Die Regel (ich wiederhole diese gerne noch einmal aus dem Beitrag #89) ist so simpel, dass diese anscheinend zu schwer ist:
Zitat:

Wenn ein Feld aufgedeckt wird, dass keine Mine im Nachbarfeld hat, dann werden auch alle Nachbarfelder aufgedeckt.
Und bei dieser Regel (das ist das Dingen da in dem Zitat-Kasten direkt hier drüber) ist es
Zitat:

... wurst-schnuppe-pieps-egal, ob die angrenzenden Felder eine Zahl haben oder nicht, die werden aufgedeckt und für jedes dieser Felder die gleiche Regel wieder angewendet.
Und wenn dann das Nachbarfeld aufgedeckt wird und dieses Nachbarfeld hat eine Mine im Nachbarfeld, was sagt dann die Regel? ... eben so einfach ist das mit den einfachen Regeln, die sind eben einfach und wohl deshalb so kompliziert

BadenPower 27. Mär 2015 08:59

AW: Minesweeper
 
Zitat:

Zitat von Sir Rufo (Beitrag 1295020)
eben so einfach ist das mit den einfachen Regeln, die sind eben einfach und wohl deshalb so kompliziert

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.

Sir Rufo 27. Mär 2015 09:05

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1295025)
Zitat:

Zitat von Sir Rufo (Beitrag 1295020)
eben so einfach ist das mit den einfachen Regeln, die sind eben einfach und wohl deshalb so kompliziert

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.

Aber genau das besagt doch die Regel :wall: und genau deshalb definiert man die Regel so, weil es dadurch einfach in der Beschreibung und in der Anwendung ist.
Delphi-Quellcode:
procedure TSpiel.DeckMichAuf( Feld : TFeld );
var
  LNachbar : TFeld;
begin
  if Feld.Aufgedeckt then
    Exit;

  Feld.Aufgedeckt := True;
 
  if Feld.HatMine then
    Exit;

  if Feld.AnzahlNachbarMinen = 0 then
  begin
    for LNachbar in NachbarnVon( Feld ) do
      DeckMichAuf( LNachbar );
  end;
end;

BadenPower 27. Mär 2015 09:33

AW: Minesweeper
 
Reden wir hier aneinander vorbei?

Zitat:

Zitat von Sir Rufo (Beitrag 1295026)
[
Delphi-Quellcode:
  if Feld.AnzahlNachbarMinen = 0 then
  begin
    for LNachbar in NachbarnVon( Feld ) do
      DeckMichAuf( LNachbar );
  end;

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.

Popov 27. Mär 2015 09:37

AW: Minesweeper
 
Zitat:

Wenn ein Feld aufgedeckt wird, dass keine Mine im Nachbarfeld hat, dann werden auch alle Nachbarfelder aufgedeckt.
Nein, auch wenn es nicht falsch ist.

Eine Leeres Feld hat keine Mine im Nachbarfeld. Nur eine Zahl hat eine Mine im Nachbarfeld. Womit das gilt was ich in #119 geschrieben habe. Alle Nachbarn einen leeren Feldes werden werden aufgedeckt. Bei einer Zahl werden keine Nachbarn aufgedeckt. Das mit der Fahne ist etwas anderes.

Sir Rufo 27. Mär 2015 10:51

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1295029)
Reden wir hier aneinander vorbei?

Zitat:

Zitat von Sir Rufo (Beitrag 1295026)
[
Delphi-Quellcode:
  if Feld.AnzahlNachbarMinen = 0 then
  begin
    for LNachbar in NachbarnVon( Feld ) do
      DeckMichAuf( LNachbar );
  end;

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.

Und das was ich da mache ist die 1:1 Übersetzung meiner Regel ... da wo du sagst mit der stimmt etwas nicht :roll:

BadenPower 27. Mär 2015 11:55

AW: Minesweeper
 
Zitat:

Zitat von Sir Rufo (Beitrag 1295051)
Und das was ich da mache ist die 1:1 Übersetzung meiner Regel ... da wo du sagst mit der stimmt etwas nicht :roll:

Ich hab ja nicht die Regel angezweifelt, sondern mich auf dieses bezogen:

Zitat:

Zitat von Sir Rufo (Beitrag 1295051)
Es ist wurst-schnuppe-pieps-egal, ob die angrenzenden Felder eine Zahl haben oder nicht, die werden aufgedeckt und für jedes dieser Felder die gleiche Regel wieder angewendet.

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.

Sir Rufo 27. Mär 2015 13:10

AW: Minesweeper
 
Zitat:

Zitat von BadenPower (Beitrag 1295056)
Zitat:

Zitat von Sir Rufo (Beitrag 1295051)
Und das was ich da mache ist die 1:1 Übersetzung meiner Regel ... da wo du sagst mit der stimmt etwas nicht :roll:

Ich hab ja nicht die Regel angezweifelt, sondern mich auf dieses bezogen:

Zitat:

Zitat von Sir Rufo (Beitrag 1295051)
Es ist wurst-schnuppe-pieps-egal, ob die angrenzenden Felder eine Zahl haben oder nicht, die werden aufgedeckt und für jedes dieser Felder die gleiche Regel wieder angewendet.

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.

Natürlich nicht, denn die Aufdeck-Regel sagt ja: Wenn keine Mine in den Nachbarfeldern, dann decke auch alle Nachbarfelder auf.

BadenPower 27. Mär 2015 13:23

AW: Minesweeper
 
Zitat:

Zitat von Sir Rufo (Beitrag 1295067)
Natürlich nicht,

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.

Sherlock 27. Mär 2015 13:28

AW: Minesweeper
 
Ich sach ma: Saii ist am Zug.

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr.
Seite 13 von 14   « Erste     3111213 14      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz