So könnte dann die Play aussehen: [..]
Du musst aber noch "TMinesweeperForm.PanelsMouseUp" ändern, da dort ein Fehler ist. [..]
Stimmt. Badenser vor.
Ich kannte das Spiel nur vom Namen her und muß sagen ich finds ganz nett (Jedenfalls besser als das langweilige Fußballspiel gestern abend).
Delphi-Quellcode:
procedure TMinesweeperForm.Play(X, Y: integer); // PanelsMouseUp, Button mbLeft;
var
I, J: integer;
begin
if FPanels[X, Y].FlankingMinesCount > 0 then
FPanels[X, Y].Caption := IntToStr(FPanels[X, Y].FlankingMinesCount)
else
FPanels[X, Y].Caption := '';
FPanels[X, Y].Color := clWindow;
FPanels[X, Y].Enabled := false;
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)
and FPanels[X + I, Y + J].Enabled
and (FPanels[X + I, Y + J].FlankingMinesCount = 0)
and (FPanels[X + I, Y + J].Caption <> cFlagSign) then Play(X + I, Y + J);
end;
procedure TMinesweeperForm.PanelsMouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Panel: TMinesweeperPanel;
begin
Panel := TMinesweeperPanel(Sender);
if Button = mbLeft then
begin
if Panel.Mine then
begin
Panel.Color := clHighlight;
ShowMines;
Showmessage('Du hast leider verloren.');
NewGame;
end
else
Play(Panel.X, Panel.Y)
end
else
if Button = mbRight then
begin
if Panel.Caption = cFlagSign then
Panel.Caption := ''
else
Panel.Caption := cFlagSign;
end;
end;
Damit "er" bei Themes auch die Color annimmt muß man in der CreatePanels noch ergänzen:
FPanels[X, Y].ParentBackground := false;
Bleibt abzuwarten ob TE den Code versteht. Ich denke aber mal ja, hat ja schon viel Vorarbeit geleistet und ich hab ja versucht mich so eng an seinen Code anzulehnen wie möglich.