Vb Zufallszahlen erzeugen
Hi Leute,
ich versuche mich gerade an VB in Microsoft Visual Basic 2008 Express Edition.
Ich versuche ein Programm zu schreiben, das auf Knopfdruck eine Zufallszahl zwischen 1 und 6 erzeugt und diese in einem Label darstellt.
Wäre nett, wenn ihr mir helfen könntet und einen Code schreiben würdet :)
6 Antworten
Da ein Computer unter der gleichen Voraussetzung immer das Gleiche macht, ist er prinzipiell nicht geeignet, eine echte Zufallszahl zu erzeugen. Es gibt da verschiedene Tricks, um von außen den Computer zu beeinflussen. Wird je manueller Anforderung nur eine Zufallszahl benötigt (z.B. durch Tastendruck), so ist die Zeit zwischen zwei Tastenbetätigungen zufälligen Schwankungen unterworfen, die man ausnutzen kann. Man holt sich die aktuelle Zeit in der kleinsten Schrittweite (z.B. in Millisekunden) und dividiert diese Zahl durch die größte benötigte Zufallszahl, hier also 6. Der um eins erhöhte Rest der Division ist dann eine Zahl zwischen 1 und 6 und eine echte Zufallszahl. Man muss darauf achten, dass die angelieferte Zahl in Einerschritten durchlaufen wird. Wenn die letzte Stelle z.B. immer 0 ist, so ist der Rest beim Teilen immer gerade. Man kann die angelieferte Zahl noch aufbereiten, indem man sie durch eine Primzahl dividiert oder mathematisch umformt. Man kann auf diese Weise auch Lottozahlen generieren und die bereits gezogenen Zahlen berücksichtigen, indem man nacheinander durch 49, 48, 47 usw. dividiert.
Solltest du ernsthaft in VB.NET programmieren, dann ist die Random-Klasse das richtige für dich. (Vergiß also die die hier vorgeschlagene Rnd-Funktion.)
Die MSDN hilft dir dabei auf jeden Fall weiter. Dort steht alles beschrieben. http://msdn.microsoft.com/de-de/library/system.random.aspx
Du erstellst also eine Instanz der Random-Klasse und rufst dann die .Next-Methode der Instanz auf. Die Bedeutung der Parameter findest du mit Hilfe der MSDN sicher auch heraus.
Die VB-Funktion Rnd löst Dein Problem. Aber Vorsicht!
So wie TellYouWhat die Lösung vorschlägt, erhältst Du nach jedem Neustart Deiner Anwendung die gleiche Ziffernfolge. Test das doch einmal mit folgendem Code:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Label1.Text = Label1.Text & vbCrLf + Würfel6.ToString
End Sub
Und jetzt starte das Prog jweils neu.
Die Lösung ist eine einzige zusätzliche Zeile. Der Code sieht dann so aus:
Function Würfel6() As Long
Randomize()
Würfel6 = Int(6 * Rnd()) + 1
End Function
Hier wird immer eine neue Startzahl zufallsgesteuert ermittelt!
also eine Beispiel-Funktion wäre
Function Würfel6() As Long
Würfel6 = Int(6 * Rnd) + 1
End Function
Ausgeben bzw. dem Label übergeben brauchst du dann nur noch die Variable "Würfel6" - sollte funktionieren...
Ich habe dazu vor langer Zeit mal sowas programmiert, einfacher Computer. Ich habe dazu zwei beliebige Adressen des Bildspeichers ausgelesen und diese addiert und dann auf die gewünschte Zahl runtergerechnet.