sitze vor einem kleinen Rätsel, vielleicht kann mir ja einer helfen.
In ein Formular werden 8 Zahlen eingegeben, und zwar in einer anderen Reihenfolge, als sie hinterher als Lösungszahl herauskommen soll. Diese Zahlen (jeweils eine in einem Labelfeld) sollen nun durch Klick auf den Button „cmdSortieren“ durch Zufallszahlen sortiert werden.
Steht eine Zahl an der richtigen Stelle, soll sie stehenbleiben und nicht durch erneutes Klicken auf den Button durch eine neue Zufallszahl ersetzt werden.
Das merkwürdige daran ist jetzt nur, durch die If-Abfrage steht sofort nach dem ersten bzw. zweiten Klick die richtige Reihenfolge da. Das sollte eigentlich nicht so sein, denn ohne die If-Abfrage dauert es wesentlich länger, bis mal in einem Labelfeld die richtige Zahl steht. Nur die Abfrage wird benötigt, damit richtige Zahlen auch stehen bleiben und nicht mehr verändert werden.
Das ganze soll ein Geduldsspiel sein, also nicht wundern, wessen Nerven ich damit strapazieren möchte, da es länger dauern soll.
Hat jemand eine Idee?
Hier noch der Code:
Private Sub cmdSortieren\_Click()
'Lösungszahlen
Const lzahl1 = 8
Const lzahl2 = 4
Const lzahl3 = 2
Const lzahl4 = 6
Const lzahl5 = 9
Const lzahl6 = 0
Const lzahl7 = 1
Const lzahl8 = 3
'Variable für Zufallszahlen
Dim zahl1 As Single
Dim zahl2 As Single
Dim zahl3 As Single
Dim zahl4 As Single
Dim zahl5 As Single
Dim zahl6 As Single
Dim zahl7 As Single
Dim zahl8 As Single
Randomize Timer
For i = 1 To 20
If CDbl(lbl\_lz1) lzahl1 Then
zahl1 = Int(10 \* Rnd)
lbl\_lz1 = zahl1
End If
If CDbl(lbl\_lz2) lzahl2 Then
zahl2 = Int(10 \* Rnd)
lbl\_lz2 = zahl2
End If
If CDbl(lbl\_lz3) lzahl3 Then
zahl3 = Int(10 \* Rnd)
lbl\_lz3 = zahl3
End If
If CDbl(lbl\_lz4) lzahl4 Then
zahl4 = Int(10 \* Rnd)
lbl\_lz4 = zahl4
End If
If CDbl(lbl\_lz5) lzahl5 Then
zahl5 = Int(10 \* Rnd)
lbl\_lz5 = zahl5
End If
If CDbl(lbl\_lz6) lzahl6 Then
zahl6 = Int(10 \* Rnd)
lbl\_lz6 = zahl6
End If
If CDbl(lbl\_lz7) lzahl7 Then
zahl7 = Int(10 \* Rnd)
lbl\_lz7 = zahl7
End If
If CDbl(lbl\_lz8) lzahl8 Then
zahl8 = Int(10 \* Rnd)
lbl\_lz8 = zahl8
End If
Verzoegerung (0.01 \* i)
Next i
End Sub
Sub Verzoegerung(VTime As Single)
Dim StartZeit As Double
Dim EndeZeit As Double
DoEvents
StartZeit = Timer
EndeZeit = Timer
Do While (EndeZeit - StartZeit)
Danke schonmal,
Kerstin
Mir ist nach lesen deiner Beschreibung nicht ganz klar geworden, worum es eigentlich geht. (Man weiß die 8 Zahlen, setzt die ein, wenn man richtig geraten hat, bleibt die Zahl an der Stelle stehn, wenn nicht wird sie durch eine Zufallszahl ersetzt?)
Also bitte eine genauere Erklärung
Sollte ich in meinem Weg richtig liegen, hilft vielleicht, die Schleife (wofür is die eigentlich gut???) von „i =1 to 20“ auf „i =1 to 1“ zu setzen (=deaktivieren).
lg, Christian
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hi Kerstin,
warum sollte es auch wesentlich öfter als 2 x Buttondrücken dauern, bis alle Zahlen korrekt erraten wurden. Du hast doch eine for-next-Schleife mit 20 Durchläufen eingebaut.
Gruß.Timo
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
jetzt wo ich Deinen Kommentar lese, fällt es mir fast wie Schuppen von den Augen. Logo, es werden ja in jedem Durchgang 20 Zahlen gezogen, und sobald die richtige Zahl da steht, wird sie nicht mehr verändert. Dann ist es wirklich kein Wunder.
Entweder muß ich die Schleife rauslassen (die aber für einen schönen Effekt sorgt, daß nämlich in den Labelfeldern verschiedene Zahlen durchlaufen) oder irgendwie noch einen Zähler einbauen, mit dem ich festlege, nach wie vielen klicks die richtigen Zahlen gezogen werden, aber da finde ich schon was passendes.
Danke an alle,
Kerstin
Hi Kerstin,
warum sollte es auch wesentlich öfter als 2 x Buttondrücken
dauern, bis alle Zahlen korrekt erraten wurden. Du hast doch
eine for-next-Schleife mit 20 Durchläufen eingebaut.
Sollte ich in meinem Weg richtig liegen, hilft vielleicht, die
Schleife (wofür is die eigentlich gut???) von „i =1 to 20“ auf
„i =1 to 1“ zu setzen (=deaktivieren).
Die Schleife sorgt für einen schönen Effekt, daß in den Labelfeldern verschiedene Zahlen durchlaufen, wie bei einem „einarmigen Banditen“.
Aber ich habe (vermutlich) eine Lösung gefunden, die werde ich jetzt mal versuchen, umzusetzen.
PS: für alle, die es interessiert, hier noch der Code dazu:
For i = 1 To 20
If z1neu = True Then
zahl1 = Int(10 \* Rnd)
lbl\_lz1 = zahl1
End If
If z2neu = True Then
zahl2 = Int(10 \* Rnd)
lbl\_lz2 = zahl2
End If
If z3neu = True Then
zahl3 = Int(10 \* Rnd)
lbl\_lz3 = zahl3
End If
If z4neu = True Then
zahl4 = Int(10 \* Rnd)
lbl\_lz4 = zahl4
End If
If z5neu = True Then
zahl5 = Int(10 \* Rnd)
lbl\_lz5 = zahl5
End If
If z6neu = True Then
zahl6 = Int(10 \* Rnd)
lbl\_lz6 = zahl6
End If
If z7neu = True Then
zahl7 = Int(10 \* Rnd)
lbl\_lz7 = zahl7
End If
If z8neu = True Then
zahl8 = Int(10 \* Rnd)
lbl\_lz8 = zahl8
End If
Verzoegerung (0.01 \* i)
Next i
If lbl\_lz1 = lzahl1 Then
z1neu = False
End If
If lbl\_lz2 = lzahl2 Then
z2neu = False
End If
If lbl\_lz3 = lzahl3 Then
z3neu = False
End If
If lbl\_lz4 = lzahl4 Then
z4neu = False
End If
If lbl\_lz5 = lzahl5 Then
z5neu = False
End If
If lbl\_lz6 = lzahl6 Then
z6neu = False
End If
If lbl\_lz7 = lzahl7 Then
z7neu = False
End If
If lbl\_lz8 = lzahl8 Then
z8neu = False
End If
Hallo Kerstin,
ich habe mich aus dem Thread herasugehalten weil ich nicht wusste was du eigentlich möchtest, aber wenn ich so nen Code sehe muss ich was sagen:
For i = 1 To 20
If z1neu = True Then
zahl1 = Int(10 * Rnd)
lbl_lz1 = zahl1
End If
…
Verzoegerung (0.01 * i)
Next i
K.A. welche Sub hinter "verzoegerung steckt, aber folgender Code macht das Gleiche:
For i = 1 To 20
If z1neu = True Then lbl\_lz1= Int(10 \* Rnd)
> ...
> Verzoegerung (0.01 \* i)
> Next i
wobei ich das mit einem Array gelöst hätte, also nicht z1neu, z2neu usw sondern z() z(2) usw
If lbl_lz2 = lzahl2 Then
z2neu = False
End If
kann man kürzen zu If lbl_lz2 = lzahl2 Then z2neu = False
Wenn du magst poste hier mal den Gesamtcode, ich dezimiere ihn, und wenn ich diesen Code hier sehe, gewaltig.
Gruß
Reinhard
K.A. welche Sub hinter "verzoegerung steckt, aber folgender
Code macht das Gleiche:
For i = 1 To 20
If z1neu = True Then lbl_lz1= Int(10 * Rnd)
…
Verzoegerung (0.01 * i)
Next i
Hast recht, die Variable zahl1 brauch ich nicht. Die Verzögerung sorgt dafür, daß die Zahlen, die während der Schleife gezogen werden, eine zeitlang sichtbar am Bildschirm stehen bleiben, bevor die nächsten Zahlen erzeugt werden (kleine Spielerei).
wobei ich das mit einem Array gelöst hätte, also nicht z1neu,
z2neu usw sondern z() z(2) usw
Was sind Arrays? Damit kenn ich mich nicht aus.
If lbl_lz2 = lzahl2 Then
z2neu = False
End If
kann man kürzen zu If lbl_lz2 = lzahl2 Then z2neu = False
Was anderes hab ich doch auch nicht geschrieben, oder?
Wenn du magst poste hier mal den Gesamtcode, ich dezimiere
ihn, und wenn ich diesen Code hier sehe, gewaltig.
Eigentlich nicht nötig, die ganze Tabelle ist ein kleines Spiel für eine Hochzeitsfeier, läuft jetzt wie gewünscht und wird danach vermutlich nie wieder gebraucht. Aber trotzdem Danke für das Angebot.