Delphi-PRAXiS

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.

k4ni 4. Feb 2008 13:45

Re: Zufallsprinzip bei einem kleinen Spiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Als ich das hier gelesen hab, war mir sowieso langweilig und hab mir dann auch ein kleines spiel gemacht.
Aber irgendwie hab ich das gefühl das bei dem Random zwischen 0-2 bzw 1-3 irgendwie die 0 bzw 1 öfter gewählt wird als die anderen.
Hab das spiel mal im anhang.

Elko 4. Feb 2008 14:50

Re: Zufallsprinzip bei einem kleinen Spiel
 
:hello:
Also ich würde es noch in die Kategorie Zufall einordnen :)
Gruß, Elko

Larsi 4. Feb 2008 15:11

Re: Zufallsprinzip bei einem kleinen Spiel
 
Cool da kleine Game :) bei mir wird das ziemlich regelmäßig "abgewechselt"!

Larsi 4. Feb 2008 15:27

Re: Zufallsprinzip bei einem kleinen Spiel
 
du hast wohl doch n kleinen fehler gemacht denn wenn ich immer schere nehme kann ich gar nicht verlieren!

Elko 4. Feb 2008 15:39

Re: Zufallsprinzip bei einem kleinen Spiel
 
doch, schon irgendwie?! Also wenn ich immer Schere anklicke, und der PC Stein nimmt, hab ich verloren (und so sollte es ja auch sein)... :)

MrMyagi 4. Feb 2008 15:56

Re: Zufallsprinzip bei einem kleinen Spiel
 
Also ich kann verlieren :lol:
...zumindest hat er mir das gesagt (solange
das Programm nicht bescheißt^^)
Achja nettes Spielchen, muss ich mal sagen :thumb:

k4ni 4. Feb 2008 16:09

Re: Zufallsprinzip bei einem kleinen Spiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
hehe danke.
Vllt. hab ich das nur gedacht das es die Schere öfter nimmt als die anderen da es nur 3 auswaNhlen gibt.
Naja wenns interesiert, source ist im anhang.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.

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