Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
Delphi 10.4 Sydney
|
AW: Minesweeper
26. Mär 2015, 23:55
Na gut, dann ist der Algorithmus für MineSweeper nicht wirklich eine Herausforderung. [..]
Ich kenn das Spiel ja quasi erst seit gestern aber kann es sein daß wir das vergessen haben? "Wenn man auf ein leeres Feld klickt, öffnen sich alle anschliessenden leeren Felder + das erste mit einer Zahl belegten Feld" (aus einem VB Forum). Oder stimmt das nicht?
Also zusätzlich zur Rekursion noch den Code nach den ???
Delphi-Quellcode:
procedure TMinesweeperForm.Play(X, Y: integer); // PanelsMouseUp, Button mbLeft;
var
I, J, K, L: integer;
begin
// Wenn zu tun:
// Wenn im Raster und noch nicht aufgedeckt und leeres Feld bzw. Feld mit einer pos. Zahl drin; (Mine = -1);
if InPanelGrid(X, Y) and FPanels[X, Y].Enabled and (FPanels[X, Y].FlankingMinesCount >= 0) then
begin
if FPanels[X, Y].FlankingMinesCount > 0 then // Wenn Zahl > Null;
FPanels[X, Y].Caption := IntToStr(FPanels[X, Y].FlankingMinesCount)
else
FPanels[X, Y].Caption := ''; // Null;
FPanels[X, Y].Color := clWindow; // farblich kennzeichnen und
FPanels[X, Y].Enabled := false; // -> aufdecken;
for I := -1 to 1 do
for J := -1 to 1 do
if ((I <> 0) or (J <> 0)) // Alle außer 0 / 0;
and InPanelGrid(X + I, Y + J) // Wenn im Raster;
and FPanels[X + I, Y + J].Enabled // Wenn noch nicht aufgedeckt;
and (FPanels[X + I, Y + J].FlankingMinesCount = 0) // Wenn leer
and (FPanels[X + I, Y + J].Caption <> cFlagSign) then // und keine Fahne;
begin
Play(X + I, Y + J); // Rekursion;
// Angrenzende Felder des leeren Feldes die eine Zahl haben ebenfalls aufdecken ???
for K := -1 to 1 do
for L := -1 to 1 do
if ((K <> 0) or (L <> 0)) // Alle außer 0 / 0;
and InPanelGrid(X + K, Y + L) // Wenn im Raster;
and (FPanels[X + K, Y + L].FlankingMinesCount > 0) // Wenn Zahl > 0;
and (FPanels[X + K, Y + L].Caption <> cFlagSign) then // und keine Fahne;
begin
FPanels[X + K, Y + L].Caption := IntToStr(FPanels[X + K, Y + L].FlankingMinesCount);
FPanels[X + K, Y + L].Color := clWindow; // farblich kennzeichnen und
FPanels[X + K, Y + L].Enabled := false; // -> aufdecken;
end;
end;
end;
end;
Geändert von Bjoerk (27. Mär 2015 um 00:39 Uhr)
Grund: Code
|
|
Zitat
|