Also ich bin immernoch bei meinem Minesweeper-Klon. Nicht wundern das is bist jetzt noch kein 9 x 9 feld sondern erst eine Reihe von 9 Quadraten und das ich die if abfragen zu case of machen soll haben mir schon genug gemacht das is aber jetzt nich das wichtige
Delphi-Quellcode:
...
public
procedure DrawCube(Row: Integer);
function BombCheck(Row: Integer): Integer;
function GiveRandom : Integer;
end;
var
Form1: TForm1;
Feld: array[0..8] of Byte;
const
PicWidth = 17;
PicHeight = 17;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.DrawCube(Row: Integer); { zeichnet Spielfeld mit Wuerfel}
begin
with Canvas do
begin
Pen.Color := clBtnFace;
Brush.Color := clBtnFace;
Brush.Style := bsSolid;
Rectangle(0, Row * PicHeight, PicWidth, (Row + 1) * PicHeight);
Draw(0, Row * PicHeight, IWuerfel.Picture.Bitmap);
end;
end;
procedure TForm1.Beenden1Click(Sender: TObject); { beendet Spiel }
begin
Close;
end;
procedure TForm1.FormPaint(Sender: TObject); { zeichnet bei FormPaint Spielfeld neu }
var
Row: Integer;
begin
Row := 0;
while Row <= 8 do
begin
DrawCube( Row);
Inc(Row);
end;
end;
procedure TForm1.INeuClick(Sender: TObject); { startet neues Spiel }
var
Row: Integer;
i: Integer;
begin
Randomize; { neue Zufallszahlen }
Row := 0;
for i:= 1 to 10 do Feld[i - 1]:= 10; { alle Felder im Spielfeld auf 10 setzen ( kein Wert)}
for i:= 1 to 4 do Feld[GiveRandom] := 0; { soll die Felder mit den Bomben bestimmen } { Feld = 0 = Bombe }
while Row <= 8 do
begin
DrawCube(Row);
Inc(Row);
end;
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; { wenn Maus auf Form klickt }
Shift: TShiftState; X, Y: Integer);
var
Row: Integer; { index den angeklickten Wuerfels }
zahl: Integer; { anzahl der Bomben um den Wuerfel }
begin
Row := Y div PicHeight;
if Row <= 8 then
begin
if Feld[Row] = 0 then
Canvas.Draw(0, Row * PicHeight, IBombe.Picture.Bitmap)
else
begin
zahl := BombCheck(Row);
if zahl = 0 then Canvas.Draw(0, Row * PicHeight, Ileer.Picture.Bitmap); { leeres Kaestchen}
if zahl = 1 then Canvas.Draw(0, Row * PicHeight, Ieins.Picture.Bitmap); { Zahl 1 }
if zahl = 2 then Canvas.Draw(0, Row * PicHeight, Izwei.Picture.Bitmap); { Zahl 2 }
end;
end;
end;
function TForm1.BombCheck(Row: Integer): Integer;
var
bomben: Integer; { anzahl der Bomben um dem Wuerfel }
begin
bomben := 0;
if Feld[Row - 1] = 0 then Inc(bomben); { ob feld zuvor bombe ist}
if Feld[Row + 1] = 0 then Inc(bomben); { ob feld danach bombe ist }
Result := bomben;
end;
function TForm1.GiveRandom: Integer;
var
Gezogene : TStringList;
i : Integer;
begin
Gezogene := TStringList.Create;
i := Random(8);
if Gezogene.IndexOf(IntToStr(i)) <> -1 then GiveRandom
else
begin
Gezogene.Add(IntToStr(i));
result := i;
end;
end;
end.
1. Beim ersten Start des Spiels sind generell alle Felder Bomben
2. Es sind immer unterschiedlich viele Bomben. Ich find da meinen Fehler nicht