Registriert seit: 17. Jun 2009
616 Beiträge
|
AW: Minesweeper
26. Mär 2015, 10:15
Weil das ja so simple ist würde ich ggf. vorschlagen, daß du das kurz in der Play ergänzt.
So könnte dann die Play aussehen:
Delphi-Quellcode:
procedure TMinesweeperForm.Play(X, Y: Integer);
begin
if ((InPanelGrid(X, Y)) and (FPanels[X, Y].Enabled)) then
begin
FPanels[X, Y].Color := clWindow;
FPanels[X, Y].Enabled := false;
if (FPanels[X, Y].FlankingMinesCount > 0) then
begin
FPanels[X, Y].Caption := IntToStr(FPanels[X, Y].FlankingMinesCount)
end
else
begin
FPanels[X, Y].Caption := '_';
Play(X, Y + 1); //unten
Play(X, Y - 1); //oben
Play(X + 1, Y); //rechts
Play(X - 1, Y); //links
Play(X + 1, Y + 1); //unten-rechts
Play(X + 1, Y - 1); //oben-rechts
Play(X - 1, Y + 1); //unten-links
Play(X - 1, Y - 1); //oben-links
end;
end;
end;
EDIT:
Du musst aber noch "TMinesweeperForm.PanelsMouseUp" ändern, da dort ein Fehler ist.
Du solltest zuerst abfragen, ob die rechte Maustaste betätigt wurde und in der ELSE überprüfen ob eine Mine unter dem Feld liegt und nicht umgekehrt, denn sonst hast Du immer verloren, auch wenn Du nur ein Marker setzen möchtest.
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.
Geändert von BadenPower (26. Mär 2015 um 10:24 Uhr)
|