Hallo,
AutoIt hat ja die schöne Funktion random(), jedoch benötige ich einen Zufallsgenerator, welcher jeden Wert ausschließlich einmal generiert, bis jeder Wert vorkam.
Vielen Dank für eure Unterstützung schon jetzt.
-Mowgly
Hallo,
AutoIt hat ja die schöne Funktion random(), jedoch benötige ich einen Zufallsgenerator, welcher jeden Wert ausschließlich einmal generiert, bis jeder Wert vorkam.
Vielen Dank für eure Unterstützung schon jetzt.
-Mowgly
Moin.
Laß doch eine Zufallszahl generieren und diese in z.B. Textdatei schreiben. Beim nächsten mal läßt Du wieder eine Zufallszahl generieren und prüfst vorher ob sie schon in der Textdatei steht. Wenn ja, dann noch einmal, wenn nicht wird die Zahl wieder in der Textdatei gespeichert.
Mit einem kleinen Trick sind die Zahlen zufällig, aber jeweils nur einmal vorkommend:
$iAnzahl = 20 ; So viele Zufallszahlen sollen erstellt werden
$iStart = 1 ; Startwert der Zufallszahlen
Dim $aZufallszahlen[$iAnzahl] ; Array mit Zufallszahlen deklarieren
[/autoit] [autoit][/autoit] [autoit]For $i = 0 To UBound($aZufallszahlen) - 1 ; Array mit den Zahlen füllen
$aZufallszahlen[$i] = $iStart + $i
Next
For $i = 0 To UBound($aZufallszahlen) - 1 ; ab hier jetzt die Zufallszahlen ausgeben
$iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)
ConsoleWrite($i + 1 & '. Zufallszahl = ' & $aZufallszahlen[$iZufall] & @CR)
$aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
Next
Würde ich aufpassen Raupi.
90% der Fälle wird genau das hier benuzt um Keys für Spiele "On go" zu generieren.
Sonst aber klasse Func, muss ich sagen.
Danke für eure Antworten und die Methode von Oscar kommt schon nah an das, was ich mir vorgestellt hatte, jedoch werden die Zahlen wieder mehrfach generiert, wenn ich den script in meinen einfüge.
Hier mal mein Code. Sry, dass es so unstrukturiert ist:
$iAnzahl = 31 ; So viele Zufallszahlen sollen erstellt werden
$iStart = 0 ; Startwert der Zufallszahlen
Dim $aZufallszahlen[$iAnzahl] ; Array mit Zufallszahlen deklarieren
[/autoit] [autoit][/autoit] [autoit]Local $sp[31] ;Array-Anzahl Aktuell halten
[/autoit] [autoit][/autoit] [autoit]$sp[0] = "Guten Morgen!, Guten Tag!"
$sp[1] = "Hallo!"
$sp[2] = "der Junge / das Mädchen"
$sp[3] = "Wie geht´s?"
$sp[4] = "gut"
$sp[5] = "und"
$sp[6] = "du"
$sp[7] = "und dir?"
$sp[8] = "ich"
$sp[9] = "ich bin"
$sp[10] = "von, aus"
$sp[11] = "Spanien"
$sp[12] = "wie?"
$sp[13] = "du heißt"
$sp[14] = "Wie heißt du?"
$sp[15] = "ich heiße"
$sp[16] = "Tschüss!, Auf Wiedersehen!"
$sp[17] = "bis"
$sp[18] = "morgen"
$sp[19] = "Bis morgen!"
$sp[20] = "nachher, später"
$sp[21] = "Bis nachher!, Auf Wiedersehen!"
$sp[22] = "das Fest, die Party"
$sp[23] = "der Strand"
$sp[24] = "der / die Freund/in"
$sp[25] = "in, auf, an"
$sp[26] = "die (bestimmter Artikel Plural)"
$sp[27] = "plaudern"
$sp[28] = "ein / eine (unbestimmter Artikel Singular)"
$sp[29] = "der Platz"
$sp[30] = "he!, was?, wie?"
$varcount = 0
[/autoit] [autoit][/autoit] [autoit]wh()
[/autoit] [autoit][/autoit] [autoit]func wh()
For $i = 0 To UBound($aZufallszahlen) - 1 ; Array mit den Zahlen füllen
$aZufallszahlen[$i] = $iStart + $i
Next
For $i = 0 To UBound($aZufallszahlen) - 1 ; ab hier jetzt die Zufallszahlen ausgeben
$iZufall = Random(0, UBound($aZufallszahlen) - 1 - $i, 1)
$varrand = $aZufallszahlen[$iZufall]
$aZufallszahlen[$iZufall] = $aZufallszahlen[UBound($aZufallszahlen) - 1 - $i]
Next
Do
$varbox = inputbox("Vokabeltraining",$sp[$varrand])
If $varrand = 0 and $varbox = "!Buenos días!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win!")
Elseif $varrand = 30 and $varbox = "!eh!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 29 and $varbox = "la plaza" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 28 and $varbox = "un / una" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 27 and $varbox = "charlar" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 26 and $varbox = "los / las" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 25 and $varbox = "en" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 24 and $varbox = "el amigo / la amiga" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 23 and $varbox = "la playa" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 22 and $varbox = "la fiesta" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 21 and $varbox = "!Hasta luego!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 20 and $varbox = "luego" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 19 and $varbox = "!Hasta mañana!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 18 and $varbox = "mañana" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 17 and $varbox = "hasta" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 16 and $varbox = "!Adiós!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 15 and $varbox = "me llamo" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 14 and $varbox = "?Cómo te llamas?" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 13 and $varbox = "te llamas" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 12 and $varbox = "?cómo?" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 11 and $varbox = "España" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 10 and $varbox = "de" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 9 and $varbox = "yo soy" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 8 and $varbox = "yo" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 7 and $varbox = "?Y tú?" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 6 and $varbox = "tú" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 5 and $varbox = "y" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 4 and $varbox = "bien" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 3 and $varbox = "?Qué tal?" Then
$fbutton = msgbox(1,"Vokabeltraining","Win")
Elseif $varrand = 1 and $varbox = "!Hola!" Then
$fbutton = msgbox(1,"Vokabeltraining","Win!")
Elseif $varrand = 2 and $varbox = "el chico / la chica" Then
$fbutton = msgbox(1,"Vokabeltraining","Win!")
else
$fbutton = msgbox(6,"Vokabeltraining","FAIL!!!")
if $fbutton = 11 Then
wh()
EndIf
EndIf
$varcount = $varcount + 1
If $fbutton = 1 Then
wh()
ElseIf $fbutton = 2 Then
Exit
EndIf
Until $varcount = 3 or $fbutton = 3 or $fbutton = 2 or $varbox = 1
EndFunc
Ja, man hätte den gesamten Code bestimmt auch einfacher machen können ohne jede Vokabel im Quelltext, aber erstmal sollte es so bleiben.
Und jetzt noch eine Frage: Was ist ein "On go" Spiel?
Ps.: an die belegung der Buttons muss ich mich auch nochmal setzen wie ihr seht
Ich halte den Ansatz bereits für verkehrt. Wenn Du einen Vokabeltrainer schreiben möchtest, dann würde ich ein 2D-Array benutzen (1. Element = deutsch, 2. Element = Fremdsprache).
Das spart Dir diese If...Then...ElseIf-"Wüste". Das kann doch keiner mehr nachvollziehen. Vor allem, wenn Du das noch erweitern willst.
Beschäftige Dich erstmal eingehend mit Arrays (Tutorial von BugFix), dann wird vieles sehr viel einfacher.
Ich hatte denselben Lösungsweg wie Oscar, auch mal in eine Funktion verpackt. Sollte dir dann einfacher fallen es zu nutzen.
Mit Parameter $array = 1 wird ein Array zurückgegeben.
;==============================================================================
; Gibt eine Anzahl Zufallszahlen ohne Doppel als String oder Array zurück
; Bereich von - bis festlegbar (positiv Integer)
; mit -1 für Anzahl werden alle Zahlen des Bereichs in zufälliger Reihenfolge
; ausgegeben
;==============================================================================
Func _RandomExt($iBis, $iVon=1, $iAnzahl=-1, $array=0)
Local $count = $iBis -$iVon +1
If $iAnzahl = -1 Then $iAnzahl = $count
Local $aValue[$count], $start = $iVon, $sOut = '', $random
For $i = 0 To $count -1
$aValue[$i] = $start
$start += 1
Next
For $i = 0 To $iAnzahl -1
$random = Random(0, $count -1 -$i, 1)
$sOut &= $aValue[$random] & ','
$aValue[$random] = $aValue[$count -1 -$i]
Next
$sOut = StringTrimRight($sOut, 1)
If $array Then Return StringSplit($sOut, ',', 2)
Return $sOut
EndFunc ;==>_RandomExt