Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Zufallsprinzip bei einem kleinen Spiel (https://www.delphipraxis.net/107819-zufallsprinzip-bei-einem-kleinen-spiel.html)

xXcomputerrookieXx 2. Feb 2008 18:58


Zufallsprinzip bei einem kleinen Spiel
 
Hallo,

ich bräuchte mal eine kleine Hilfe und zwar:

Wie kann ich bei einem ''Schere-Stein-Papier''-Spiel den Gegner zufällig eines dieser drei auswählen lassen?Ich habe auf dem Formular einfach 3 Button zum auswählen von Schere,Stein und Papier und ein Label das ausgibt,was der Gegner genommen hat.Wie kann ich das machen? :gruebel:

MfG

DeddyH 2. Feb 2008 18:59

Re: Zufallsprinzip bei einem kleinen Spiel
 
Schau Dir mal Randomize und Random an.

Elko 2. Feb 2008 19:09

Re: Zufallsprinzip bei einem kleinen Spiel
 
Also, als erstes benutzt du randomize(); um den Zufallsgenerator zu initialisieren. Dann würde ich Random(3); nutzen um eine Zufallszahl zwischen 0 und 2 zu erzeugen. Dann per case-Abfrage mit der Zufallszahl den Inhalt des Labels ändern. Hier der Code (habb ich zwar nicht ausprobiert, aber müsste aber eigentlich funktionieren):
Code:
randomize();
case random(3) of
  0: Label1.caption := 'Schere';
  1: Label1.caption := 'Stein';
  2: Label1.caption := 'Papier';
end;
Gruß, Elko :corky:

DeddyH 2. Feb 2008 19:18

Re: Zufallsprinzip bei einem kleinen Spiel
 
Fast richtig ;) . Randomize sollte einmalig aufgerufen werden. Also könnte das Ganze dann so aussehen:
Delphi-Quellcode:
procedure TDeinForm.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TDeinForm.btnErmittelnClick(Sender: TObject);
begin
  case Random(3) of
    0: lblZug.Caption := 'Schere';
    1: lblZug.Caption := 'Stein';
    2: lblZug.Caption := 'Papier';
  end;
end;
P.S.: Willkommen in der DP, Elko :dp:

k4ni 2. Feb 2008 21:10

Re: Zufallsprinzip bei einem kleinen Spiel
 
edit: bitte löschen, hat sich erleditgt

Elko 4. Feb 2008 11:55

Re: Zufallsprinzip bei einem kleinen Spiel
 
Zitat:

Zitat von DeddyH
Randomize sollte einmalig aufgerufen werden.

Stimmt schon, dass man Randomize() nur einmal am Anfang nutzt, aber was für einen Unterschied würde es eigentlich machen, es öfters aufzurufen (würde er dann nicht jedes mal einfach neu initialisiert werden, also noch "zufälligere" Zufallszahlen?)? :gruebel:
:dp:
Gruß, Elko

OregonGhost 4. Feb 2008 11:59

Re: Zufallsprinzip bei einem kleinen Spiel
 
Zitat:

aber was für einen Unterschied würde es eigentlich machen, es öfters aufzurufen (würde er dann nicht jedes mal einfach neu initialisiert werden, also noch "zufälligere" Zufallszahlen?)?
Da Randomize die Zeit für die Initialisierung des Pseudozufallszahlengenerators verwendet, wird man im schlimmsten Fall mehrmals hintereinander exakt dasselbe Ergebnis bekommen (nämlich solange, wie GetTickCount dasselbe Ergebnis zurückliefert). "Zufälliger" werden die Zahlen damit so oder so nicht.

peschai 4. Feb 2008 12:12

Re: Zufallsprinzip bei einem kleinen Spiel
 
In Ergänzung
Mit dem selben Startwert der Variablen "RandSeed" (Welche durch Randomize einen anderen "zufälligen" zugewiesen bekommt) wird mit jedem Aufruf von Random dieselbe Reihe "zufälliger" Zahlen erzeugt.
Das lässt sich z.b. auch bei Hobby-Verschluesselungsroutinen verwenden ...

Elko 4. Feb 2008 13:29

Re: Zufallsprinzip bei einem kleinen Spiel
 
Gut, wieder was dazu gelernt :coder2:
Gruß, Elko

Medium 4. Feb 2008 13:42

Re: Zufallsprinzip bei einem kleinen Spiel
 
Zitat:

Zitat von peschai
Das lässt sich z.b. auch bei Hobby-Verschluesselungsroutinen verwenden ...

Wenn man es ertragen kann, sich dafür ein paar (verbale) Ohrfeigen einzuhandeln, wenn man fremde "black boxed" RNGs benutzt, die nicht gewährleisten in jeder Version für jeden Seed die selben Werte zu erzeugen. Wie z.B. der Delphi RNG, der sich zwar bis Dato nicht im Verhalten geändert hat, aber von den Entwicklern ausdrücklich nicht ausgeschlossen wird, dass das mal der Fall sein könnte.
Bei Anwendungen die also potentiell mal irgendwann mit einem neueren Compiler übersetzt werden könnten (was im Grunde mindestens jede ist, die man irgendwo mal als Source ins Netz stellt), sollte man da tunlichst von abraten. Dann lieber einen eigenen RNG bauen, der dann sicher immer im gleichen Kontext gleich bleibt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz