# Randomize



## DarkSean (28. Dezember 2005)

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


----------



## Shakie (28. Dezember 2005)

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:

```
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


----------



## DarkSean (28. Dezember 2005)

Jetzt hab ich ein Problem, nämlich wie kann ich den ZUfallswert speichern? Bei mit siehts grad so aus:

```
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?


----------



## wincnc (28. Dezember 2005)

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).

```
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
```


----------



## DarkSean (29. Dezember 2005)

Ich will ja nicht einfach einen Code vorgesetzt bekommen, sondern Ideen und Codebeispiele. Aber trotzdem danke.


----------



## Nirraven (29. Dezember 2005)

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().


----------



## DarkSean (29. Dezember 2005)

Und wie kann ich eine Zahl aus einer Prozedur in eine andere stecken? Ich hab die Prozedur 

```
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?


----------



## Nirraven (30. Dezember 2005)

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:


```
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
```


----------



## DarkSean (30. Dezember 2005)

Danke euch allen, habs jetzt geschafft.

```
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
```


----------

