Einzelnen Beitrag anzeigen

butch

Registriert seit: 22. Aug 2003
Ort: Herzberg/E.
15 Beiträge
 
#1

Einige Probleme mit Random

  Alt 13. Sep 2003, 11:00
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
  Mit Zitat antworten Zitat