himitsu hat eigentlich schon alle wichtigen Funktionen genannt, da du aber ein Anfänger bist, vielleicht noch paar Tipps.
Um eine Zufallszahl zu ermitteln benötigt man die Funktion
Random. Wobei die Funktion Random allein eine Fließkommazahl der Größe 0 <= X < 1 liefert, d. h. einen Wert zwischen 0 und unter 1. Die 1 wird nie geliefert. Der Wert wird immer kleiner 1 sein. Das muss man im Hinterkopf behalten.
Wobei die Funktion Random gibt es auch in der zweiten Variante, und zwar so:
Random(MaxWert). In der Klammer kann man den MaxWert eingeben, wobei auch hier gilt 0 <= X < MaxWert. Der MaxWert wird nie geliefert.
Will man aus eine Zahl zwischen 1 und 6 Ziehen, macht man das folgendermassen:
=: Random(6) + 1;
Random(6) liefert einen Wert zwischen 0 und 5, nie 6. Da du sowieso keine 0 brauchst, addierst du einfach eine 1 dazu. Die obere Funktion liefert dann einen Wert zwischen 1 und 6. Eigentlich 0 bis 5, aber du addierst noch die 1 dazu.
Das Problem bei Delphi ist aber, dass die Zufallszahlen nie so zufällig sind. Delphi liefert immer die gleichen Werte. Damit das nicht passiert muss beim Programmstart mindestens einmal die Funktion
Randomize ausgeführt werden. Man kann das auch öfters ausführen, schadet nicht, aber mindestens einmal sollte man es machen, sonst bekommst du ständig die gleiche Zahlenfolge. Hier die fertige Funktion:
Delphi-Quellcode:
function ZahlWuerfeln: Byte;
begin
Randomize;
Result := Random(6) + 1;
end;
Der Rest ist programmieren, wobei die von himitsu vorgeschlagene
Case die Aufgabe zwar eleganter löst, aber als Anfänger würde ich
If-Then nehmen. Zusätzlich musst du noch zählen wie oft gewürfelt wurde. Dazu brauchst du eine globale Variable. Und, falls du gewonnen oder verloren hast, sollte das Spiel nicht weiter gehen. Du brauchst also eine Variable die sich merkt ob das Spiel beendet ist:
Delphi-Quellcode:
var
AnzahlWuerfe: Integer;
SpielEnde: Boolean;
procedure TForm1.ButtonWuerfelnClick(Sender: TObject);
var
a, b, c: Byte;
a1, b1: Byte;
begin
if SpielEnde then
ShowMessage('Das Speil ist beendet! Starte das Spiel neu.');
a := ZahlWuerfeln;
b := ZahlWuerfeln;
Label1.Caption := IntToStr(a);
Label2.Caption := IntToStr(b);
AnzahlWuerfe := AnzahlWuerfe + 1;
if AnzahlWuerfe = 1 then
begin
if ((a + b) = 7) or ((a + b) = 11) then
begin
ShowMessage('Gewonnen!');
SpielEnde := True;
end;
if ((a + b) = 2) or ((a + b) = 3) or ((a + b) = 12) then
begin
ShowMessage('Verloren!');
SpielEnde := True;
end;
c := a + b;
end
else
begin
if (a + b) = 7 then
begin
ShowMessage('Verloren!');
SpielEnde := True;
end;
if (a + b) = c then
begin
ShowMessage('Gewonnen!');
SpielEnde := True;
end;
end;
end;
procedure TForm1.ButtonNeuesSpielClick(Sender: TObject);
begin
AnzahlWuerfe := 0;
SpielEnde := False;
end;
Dann, wenn man das noch schöner machen will, kann man statt mit Zahlen, mit Würfel-Bildern arbeiten.
Erstelle mit Paint 6 Bitmaps 32x32 Pixel groß. Zeichne Augen ein. Plaziere auf dem Formular eine TImageList Komponente. Stelle Width und Height auf 32 Pixel. Füge in die ImageList1 alle sechs Würfel der Reihe nach ein. Stelle für jedes Bild die Transparenz auf clNone. Füge nun zwei TImage Komponenten auf das Formular. Stelle bei beiden Komponenten Width und Height auf 32 Pixel.
Erweitere den Code um:
Delphi-Quellcode:
Label1.Caption := IntToStr(a);
Label2.Caption := IntToStr(b);
Image1.Picture.Bitmap := nil;
Image2.Picture.Bitmap := nil;
ImageList1.GetBitmap(a - 1, Image1.Picture.Bitmap);
ImageList1.GetBitmap(b - 1, Image2.Picture.Bitmap);
Wenn du willst kannst du die zwei Label Zeilen jetzt entfernen. Beachte a und b haben einen Wert zwischen 1 und 6. Deshalb muss bei GetBitmap der Wert -1 abgezogen werden, da die ImageList bei 0 beginnt.
Viel Spaß.