AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Minesweeper

Ein Thema von saii · begonnen am 21. Mär 2015 · letzter Beitrag vom 29. Mär 2015
Antwort Antwort
Seite 11 von 14   « Erste     91011 1213     Letzte »    
BadenPower

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

AW: Minesweeper

  Alt 26. Mär 2015, 18:09
Das Bild in Post #82 unterstützt deine Aussage nicht.
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.
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
 
#102

AW: Minesweeper

  Alt 26. Mär 2015, 18:10
Wo siehst du auf dem Bild #82 sich berührende Flächen über Eck?

Hier ein Beispiel wie ich es meine:
Miniaturansicht angehängter Grafiken
minesweeper2.png  
  Mit Zitat antworten Zitat
saii

Registriert seit: 20. Feb 2015
22 Beiträge
 
#103

AW: Minesweeper

  Alt 26. Mär 2015, 18:11
Ich habs mal rekursiv versucht und hab mal den Vorschlag von Mavarik umgeschrieben.

Jetzt bekomme ich beim Anklicken von Panels, die keine benachbarte Mine haben, eine Exception der Klasse EStackOverflow

Delphi-Quellcode:
procedure TForm1.CannonFire(var A,B,m:integer; Sender: TObject);
var h,j:integer;
begin
        Panel:=TPanel(Sender);
        A:=StrToInt(Copy(Panel.Name, 3,2));
        B:=StrToInt(Copy(Panel.Name, 6,2));

        if IntA[A,B]<>9 then
        begin
                m:=IntA[A,B];
                if IntA[A,B]=0 then
                FindeLeer(v,w);
        end;
        
        if IntA[A,B]=9 then
        begin
                ShowMessage('Du hast Verloren!');
                close;
        end;
end;

Procedure TForm1.FindeLeer(v,w:integer);
begin
  if (v < 0) or (w < 0) or (v > 14) or (w > 14) then
    Exit;

  if (IntA[v,w] = 0) then
    begin
      PanelA[v,w].Caption:=IntToStr(IntA[v,w]);
      FindeLeer(v+1,w);
      FindeLeer(v-1,w);
      FindeLeer(v,w+1);
      FindeLeer(v,w-1);
    end;
end;

Geändert von saii (26. Mär 2015 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#104

AW: Minesweeper

  Alt 26. Mär 2015, 18:12
Wo siehst du auf dem Bild #82 sich berührende Flächen über Eck?
Kuckst du, mit deiner überlagerten Aussage (und passend gedreht, für alle, die das im Kopf nicht hinbekommen )
Miniaturansicht angehängter Grafiken
popovmine.png  
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
BadenPower

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

AW: Minesweeper

  Alt 26. Mär 2015, 18:18
Wo siehst du auf dem Bild #82 sich berührende Flächen über Eck?
Sogar gleich zweimal.
Miniaturansicht angehängter Grafiken
minesweeper3.jpg  
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 Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#106

AW: Minesweeper

  Alt 26. Mär 2015, 18:21
Wikipedia meint
Zitat:
Eine Sonderrolle spielen Felder, die keine Minen in ihrer Nachbarschaft aufweisen: Solche zeigen zum einen nicht etwa eine 0, sondern sie werden farblich anders dargestellt. Zum anderen werden alle noch verdeckten Felder in ihrer Nachbarschaft automatisch aufgedeckt. Ist ein so neu aufdecktes Feld ebenfalls ein Null-Feld, so wird dieser Prozess rekursiv weitergeführt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#107

AW: Minesweeper

  Alt 26. Mär 2015, 18:21
Na gut, dann ist der Algorithmus für MineSweeper nicht wirklich eine Herausforderung.

Wer die Regel nicht will kann aus meinem Beispiel diese Zeilen löschen:
Delphi-Quellcode:
              if not ((a = 0) or (b = 0)) then
                Continue;
Sie verhindern die Öffnung benachbarter Flächen über Eck. So simpel die zwei Zeilen auch aussehen, ich hab da fast 3/4 Stunde dran gesessen. Das war das einzig komplizierte. Der Rest ist in fünf bis zehn Minuten gemacht.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#108

AW: Minesweeper

  Alt 26. Mär 2015, 18:23
Ich habs mal rekursiv versucht und hab mal den Vorschlag von umgeschrieben. Jetzt bekomme ich beim Anklicken von Panels, die keine benachbarte Mine haben, eine Exception der Klasse EStackOverflow
Weil der PanelA[X, Y] noch nicht erzeugt ist. Das kannst du z.B. in der CreatePanels machen. Schau ggf. mal wie ich das gemacht hab. Die IntA brauchen wir dann auch nicht mehr.
  Mit Zitat antworten Zitat
saii

Registriert seit: 20. Feb 2015
22 Beiträge
 
#109

AW: Minesweeper

  Alt 26. Mär 2015, 18:32
Sicher? Eigentlich existiert PanelA[X,Y] da doch schon. Das wird doch in FormCreate erstellt.

Die Exception kommt immer in einer der FindeLeer(v+1,w); -Zeilen
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#110

AW: Minesweeper

  Alt 26. Mär 2015, 18:44
Oh Bud, ich hab langsam echt kein Bock mehr? Bist n netter Kerl, aber schau dir doch halt mal zum Beispiel #73 und #80 an. Der Panel ist zwar erzeugt aber PanelsA weiß davon ggf. nichts. Weiß nicht mehr. Vielleicht ist auch deine Rekursion falsch?

Geändert von Bjoerk (26. Mär 2015 um 18:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 11 von 14   « Erste     91011 1213     Letzte »    


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 02:45 Uhr.
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