Zurück zur Homepage

Zufallszahlen, Froschhüpfen

Ein kleines Beispiel, wie man Zufallszahlen erzeugt Damit werden Frösche von einem Seerosenblatt zu einem befördert (und zurück). Es wird gestoppt, wenn alle Frösche auf dem rechten Blatt sind.

Beispieldatei frosch.zip 41 KB)

'Vorraussetzung:
'
Ein Tabellenblatt mit Namen Frosch
'
Darauf 3 Buttons mit Namen
'
cmbAbbrechen
'
cmbStart
'
cmbZurück
'
Zwei Bilder mit einem Seerosenblatt, das eine liegt über
'
dem Bereich A11:F23. Das andere über dem Bereich G11:L23
'
Sechs Frösche mit den Namen Frosch1 bis Frosch6, die über
'
den Bildern der Seerosenblätter liegen.
'
In die Zelle F1 den Zeitabstand zwischen den Würfen.

'
In das Klassenmodul des Tabellenblatts folgende Ereignisprozeduren

Private Sub cmbAbbrechen_Click()
    Beenden = True
End Sub

Private Sub cmbStart_Click()
    If Now < (Timewait + TimeSerial(0, 0, 1)) Then _
        Beenden = True: Exit Sub
    Beenden = False
    zurücksetzen
    Range("F3") = Now
    'Zeit abwarten und dann starten
    ' Application.OnTime Now + _
        TimeSerial(0, 0, .Range("F1")), _
        "WürfelnUndWechseln"
    'gleich starten

    WürfelnUndWechseln
End Sub

Private Sub cmbZurück_Click()
    zurücksetzen
End Sub


'In ein Modul

Public Beenden As Boolean, Timewait As Date
Public Sub WürfelnUndWechseln()

Dim Würfelergebnis As Long, Zeit As Date
With Sheets("Frosch")
If Beenden = False Then
    Zeit = TimeSerial(0, 0, .Range("F1"))
    Würfelergebnis = Int((6 * Rnd) + 1)
    .Range("F2") = Würfelergebnis
    .Range("F4") = Now
    .Shapes("Frosch" & Würfelergebnis).Left = _
        .Cells(20, (.Shapes("Frosch" & Würfelergebnis).Left < _
        .Cells(20, 7).Left) * (-6) + Würfelergebnis).Left
    If Not AlleRechts Then
        Timewait = Now + Zeit
        Application.OnTime Timewait, "WürfelnUndWechseln"
    End If
End If
End With
End Sub

Private Function AlleRechts() As Boolean
Dim i As Long
With Sheets("Frosch")
    For i = 1 To 6
        AlleRechts = .Shapes("Frosch" & i).Left >
            .Cells(20, 6).Left
        If Not AlleRechts Then Exit For
    Next
End With
End Function

Public Sub zurücksetzen()
Dim i As Long
Beenden = False
Randomize
With Sheets("Frosch")
    For i = 1 To 6
        .Shapes("Frosch" & i).Left =
            .Cells(20, i).Left
        .Shapes("Frosch" & i).Top =
            .Cells(20, i).Top
    Next
End With
End Sub