Randomize

DarkSean

Erfahrenes Mitglied
Also, ich möchte ein Zahlenratespiel programmieren. Dabei soll der Computer per Zufallsgenerator eine Zahl zwischen 0 und 100 auswählen. Wie geht das? Ich hab auch gesucht aber im Forum keine Antwort auf meine Frage gefunden.
Danke im Vorraus
Sean
 
Mit Randomize initialisierst du den Zufallszahlengenerator, damit er nicht immer die gleichen Zufallszahlen ausgibt. Mit Rnd wird dann eine Zahl zwischen 0 und 1 ausgegeben.
Hier mal ein Link: http://www.vb-seminar.de/vb_17.htm
In deinem Fall könnte das dann so aussehen:
Code:
Randomize
Zufallszahl = Int(101 * rnd)
"Zufallszahl" hat nun einen Wert von 0 bis einschließlich 100.
Und wenn die Forumssuche nichts liefert, dann probier doch :google:
 
Jetzt hab ich ein Problem, nämlich wie kann ich den ZUfallswert speichern? Bei mit siehts grad so aus:
Code:
Private Sub Command1_Click()
Randomize          'Zufallsgenerator initialisieren
        z = Rnd            'Zufallszahl (liegt zwischen 0 und 1)
        Zufallszahl = Int(101 * Rnd)
If Text1.Text = Zufallszahl Then
Label2.Caption = "Richtig, die zu erratene Zahl war " + Str(Zufallszahl)
    Else
    If Text1.Text > Zufallszahl Then
    Label2.Caption = "Die zu erratene Zahl muss kleiner sein!"
    End If
    If Text1.Text < Zufallszahl Then
    Label2.Caption = "Die zu erratene Zahl muss größer sein!"
    End If
End If
End Sub
Das Problem ist ja, anch meinem Code berechnet er die ZUfallszahl immer wieder neu, was ich ja verhindern möchte, aber wie?
 
Zuletzt bearbeitet:
Hallo, füge folgenden Code in Deiner Form ein. Du benötigst 3 Label (Label1, Label2, Label3) - 2 CommandButton (Command1, Command2) und eine TextBox (Text1).
Code:
Private Zufallszahl As Long
Private Anzahl As Long

Private Sub Command1_Click()
  Randomize -Timer
  Zufallszahl = Int(101 * Rnd)
  Text1 = ""
  Text1.SetFocus
  Label3.Caption = ""
  Anzahl = 0
  Label2.Caption = ""
End Sub

Private Sub Command2_Click()

If Zufallszahl = 200 Then
  MsgBox "Bitte starten Sie zuerst ein neues Spiel !"
  Label2.Caption = ""
  Exit Sub
End If

If Text1.Text = "" Then
  MsgBox "Bitte eine Zahl eingeben"
  Text1.SetFocus
  Exit Sub
End If

If CLng(Text1.Text) = Zufallszahl Then
  Label2.Caption = "Richtig, die zu erratene Zahl war " + Str(Zufallszahl)
  Zufallszahl = 200
Else
 If CLng(Text1.Text) > Zufallszahl Then
   Label2.Caption = "Die zu erratene Zahl muss kleiner sein!"
   Anzahl = Anzahl + 1
   Label3.Caption = "Versuch Nr. " & CStr(Anzahl)
 End If
 If CLng(Text1.Text) < Zufallszahl Then
   Label2.Caption = "Die zu erratene Zahl muss größer sein!"
   Anzahl = Anzahl + 1
   Label3.Caption = "Versuch Nr. " & CStr(Anzahl)
 End If
End If

  Text1.SelStart = 0
  Text1.SelLength = Len(Text1)
  
End Sub

Private Sub Form_Load()
Me.Caption = "Zahlenraten"
Command1.Caption = "Neues Spiel"
Command1.Move 10, 10, 1600, 500
Text1 = ""
Text1.Move 1500, 2000, 1000, 315
Command2.Caption = "Eingabe"
Command2.Move 2700, 2000, 1600, 315
Command2.Default = True
Label1.Move 1500, 1500, 2000, 400
Label1.WordWrap = True
Label1.Caption = "Bitte geben Sie eine Zahl zwischen 0 und 100 ein."
Label2.Move 100, Me.ScaleHeight - 400, Me.ScaleWidth - 200
Label2.Caption = ""
Label2.ForeColor = vbRed
Zufallszahl = 200
Label3.Caption = ""
Label3.Move 1500, 1000, 2000
End Sub

Private Sub Form_Resize()
Me.Height = 3600
Me.Width = 4800
Me.Move Screen.Width / 2 - Me.Width / 2, Screen.Height / 2 - Me.Height / 2
Text1.SetFocus
End Sub

Private Sub Text1_GotFocus()
  Text1.SelStart = 0
  Text1.SelLength = Len(Text1)
End Sub
 
Das da oben is ja auch nur ein code beispiel... ;-)

Dann mach doch ein Formular und generiere die Zufallszahl beim laden von selbigem
und die Zahlenprüfung kommt nur auf CommandButton_Click().
 
Und wie kann ich eine Zahl aus einer Prozedur in eine andere stecken? Ich hab die Prozedur
Code:
 private sub bla bla
x=1
end sub
und nun möchte ich das x aus der ersten in die andere nehmen. wie geht das?
 
Hallo, also Ich habs nur grad fix in VBA getestet, und um Programmierstil mach ich mir bei so kleinen sachen keine gedanken, aber so funktionierts:

Code:
Option Explicit
Dim zufallszahl As Integer

Private Sub CommandButton1_Click()
If Text1.Text = zufallszahl Then
    Label2.Caption = "Richtig, die zu erratene Zahl war " + Str(zufallszahl)
Else
    If Text1.Text > zufallszahl Then
        Label2.Caption = "Die zu erratene Zahl muss kleiner sein!"
    End If
    If Text1.Text < zufallszahl Then
        Label2.Caption = "Die zu erratene Zahl muss größer sein!"
    End If
End If
End Sub

Private Sub UserForm_Initialize()
Randomize
zufallszahl = Int(101 * Rnd)
End Sub
 
Danke euch allen, habs jetzt geschafft.
Code:
Dim versuche As Integer
Dim zufallszahl As Integer
Private Sub Command1_Click()
Randomize          'Zufallsgenerator initialisieren
        z = Rnd            'Zufallszahl (liegt zwischen 0 und 1)
        zufallszahl = Int(101 * Rnd)
    MsgBox ("Es wurde eine neue Zufallszahl generiert")
    Text2.Text = zufallszahl
    Label3.Caption = 10
End Sub
Private Sub Command2_Click()
If IsNumeric(Text1.Text) Then
eingabe = CInt(Text1.Text)
Else
MsgBox ("Es wurde keine Zahl eingegeben")
Exit Sub
End If
versuche = CInt(Label3.Caption)
If Label2.Caption = "Richtig, die zu erratene Zahl war" + Str(zufallszahl) Then
MsgBox ("Du hast gewonnen, für ein weiteres Spiel muss eine neue Zufallszahl generiert werden")
Exit Sub
End If
If versuche = 0 Then
MsgBox ("Du hast leider verloren :(")
Exit Sub
End If
If eingabe < 0 Or eingabe > 100 Then
MsgBox ("Die Zufallszahl kann nur zwischen 1 und 100 liegen")
Exit Sub
versuche = versuche + 1
Label3.Caption = versuche
End If
If eingabe = zufallszahl Then
Label2.Caption = "Richtig, die zu erratene Zahl war" + Str(zufallszahl)
    versuche = versuche - 1
    Label3.Caption = versuche
    Else
    If eingabe > zufallszahl Then
    Label2.Caption = "Die zu erratene Zahl muss kleiner sein!"
    versuche = versuche - 1
    Label3.Caption = versuche
    End If
    If eingabe < zufallszahl Then
    Label2.Caption = "Die zu erratene Zahl muss größer sein!"
    versuche = versuche - 1
    Label3.Caption = versuche
    End If
End If
End Sub

Private Sub Form_Load()
Randomize          'Zufallsgenerator initialisieren
        z = Rnd            'Zufallszahl (liegt zwischen 0 und 1)
        zufallszahl = Int(101 * Rnd)
    MsgBox ("Es wurde eine neue Zufallszahl generiert")
    Text2.Text = zufallszahl
    Label3.Caption = 10
End Sub
 
Zurück