![]() |
AW: Minesweeper
Zitat:
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. |
AW: Minesweeper
Liste der Anhänge anzeigen (Anzahl: 1)
Wo siehst du auf dem Bild #82 sich berührende Flächen über Eck?
Hier ein Beispiel wie ich es meine: |
AW: Minesweeper
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; |
AW: Minesweeper
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Minesweeper
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Minesweeper
![]() Zitat:
|
AW: Minesweeper
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:
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.
if not ((a = 0) or (b = 0)) then
Continue; |
AW: Minesweeper
Zitat:
|
AW: Minesweeper
Sicher? Eigentlich existiert PanelA[X,Y] da doch schon. Das wird doch in FormCreate erstellt.
Die Exception kommt immer in einer der
Delphi-Quellcode:
-Zeilen
FindeLeer(v+1,w);
|
AW: Minesweeper
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?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:37 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