Wortspiel

  • Hallo ihr Programmierfans,
      
    Also ich habe folgende 2 Probleme.
      

    • Ich bin eine der von Programmieren keine Ahnung hat. (AutoIt ist mein erster Versuch)
    • Ich bin auch kein sonderlich toller Erklärer.

      
    Ich weiß das dass 2 sehr schlechte Bedingungen sind um etwas zu programmieren wen man keine Ahnung hat, und Hilfe zu suchen wen man es schlecht erklären kann.
      
    Aber ich versuch es mal und ein Crack von euch wird das schon verstehen!
      
    Also ich möchte ein kleines Spiel programmieren, das was schreiben kann.
      
    Und es sollte folgendermaßen ablaufen. Wenn ich das öffne sollte ich folgende Eingabe Möglichkeit haben.
      
    Zeitspanne für Buchstabe „a“ eingeben: dann soll ich ein Zeit min und max wählen können in der der Buchstabe gedrückt wird, der PC soll zwischen Zeit Min und Zeit max eine Zufallszahl wählen. Jedes Mal beim starten sollte man die Möglichkeit haben eine neue Min und Max grenze zu wählen. Dann soll das im Loop laufen. Jedes Mal wen er „a“ gedrückt hat soll er ne Zufallszahl zwischen den Grenzen wählen und wieder „a“ drücken.
      
    Das gleich mit den Buchstaben „b“ „c“ „d“ „e“ Die sollten sich aber gegenseitig nicht in die quere kommen. Also wen man sag „A“ soll alle (Random 20;22) Sekunden gedrückt werden. Und „b“ alle 5-9 Sekunden sollte das wirklich so funktionieren. Also so das a alle 20-22 Sekunden und b alle 5-9 Sekunden gedrückt wird. Und nicht das sie sich in die quere kommen.
      
    Wenn ich die eingaben (min, max Grenze) für die 5 Buchstaben gemacht habe, solle sich Word öffen, und der Programm erst beim drücken einer Bestimmten Tast starten z.B. (Bild hoch)
      
    Super wäre es wen man das Programm auch Pausieren lassen könnte, und es wieder über eine taste beenden. Sonnst würde es ja ewig weiter laufen wen es keine beenden Taste gäbe.
      
    Die Buchstaben soll man nicht frei wählen können, diese kann ich ja dann gegebenenfalls im Skript ändern.
      
    Hoffe das jemand grob durchsteigt was ich meine.
      
    Und vielen Dank für eure Hilfe
      
    Gruß
      
    Flubber

  • Und nicht das ihr denkt ich hätte nicht schon probiert, also ich hab es soweit hinbekommen das er beim start Word öffenet und dann immer einen buchtaben laut der durch random entwickelten zahl eingibt.

    Aber das ein Fenster noch vor word erscheint und mich nach den Min max grenzen frägt, oder das es gar mit mehreren Buchstaben geht, hab ich leider nicht geschafft.

    Gruß


    Flubber

  • häääääääääää

    Wenn Du "MindGenius Home 2" zur Erklärung verwendest, dann verstehen es evtl. auch Blondinen. :rofl:

    Crazy-A

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Hmm,

    Hat mir den keiner en Tipp wie ich da richtig ansetzten kann ? Es wäre echt nett wen ihr mir helfen könntet.

    Gruß

    Flubber

  • Moinsen,
    soweit ich dich richtig verstanden hast und die Reihenfolge auch nicht vertauscht willst du folgendes:

    1. Ein Gui in dem du die minimale Zeit und maximale Zeit für die Buchstaben a, b, c, d, e eintragen kannst in denen die zufällig gedrückt werden sollen.
    2. Zufallsfunktionen um zwischen dem Minimum und Maximum eine Zeit festzulegen, nach der die Taste gedrückt werden soll und danach wieder eine neue Zeit zufällig in diesem Zeitrahmen(Min,Max) zu bekommen bis zum nächsten mal drücken
    3. 3 Tasten, 1 zum Starten, 1 zum Beenden, 1 um das Skript/Programm zu stoppen.
    4. Es soll nach dem GUI, sobald alle Werte eingetragen sind, einen Texteditor öffnen, aber noch nicht anfangen.

    Hab dir mal das Grundgerüst gebastelt, trau dich zu fragen, wichtig ist, dass man es selbst versteht und anwenden kann.
    Was noch nicht vorhanden ist, ist das GUI (1 GUI, 10 Felder, 1 Übernehmen/Starten Button und DU! :D) ;fand ich i-wie grad passend, das DU! :D

    So, hoffe ich konnte helfen und hab alles richtig verstanden.

    Spoiler anzeigen
    [autoit]

    Opt("TrayIconDebug",1)

    [/autoit] [autoit][/autoit] [autoit]

    ;Min und Maxwerte der Zeit für a,b,c,d,e
    ;ToDo --> GUI erstellen um Werte eintragen zu können
    ;ToDo --> Automatisch Texteditor öffnen, momentan noch manuell zu starten
    $aMin = 10
    $aMax = 20
    $bMin = 5
    $bMax = 9
    $cMin = 3
    $cMax = 17
    $dMin = 13
    $dMax = 30
    $eMin = 6
    $eMax = 11
    ;hier müsste eigentlich das Gui sein, die While-Schleife um abzufragen was gedrückt wurde und der Starten Button
    Shellexecute("Notepad")

    [/autoit] [autoit][/autoit] [autoit]

    $break = 0
    ;einmalig. Hinweis: Nicht mit Funktionen _a bis _e ersetzen, da sonst gleich am Anfang schon geschrieben wird.
    Global $a = Random($aMin,$aMax,1)
    Global $b = Random($bMin,$bMax,1)
    Global $c = Random($cMin,$cMax,1)
    Global $d = Random($dMin,$dMax,1)
    Global $e = Random($eMin,$eMax,1)
    ;wieso hab ich eigentlich Global geschrieben, wahrscheinlich weil ich es unten auch geschrieben habe
    ;sieht halt einfach hübsch aus ;) (falls jmd den Grund kennt, pls sagen, hab ihn i-wie verdrängt)

    [/autoit] [autoit][/autoit] [autoit]

    ;Hotkeys setzen
    HotKeySet("{PGUP}","_start") ;"Bild hoch" um Skript/Programm zu starten
    HotKeySet("{Pause}","_break") ;"Pause" um Skript/Programm zu pausieren
    HotKeySet("{PGDN}","_exit") ;"Bild Runter" um das Skript/Programm zu beenden

    [/autoit] [autoit][/autoit] [autoit]

    While 1 ;damit des Prog nicht gleich nach einmal starten ausgeht :)
    sleep(200) ;um CPU nicht zu stark zu strapazieren
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _start()
    While 1
    sleep(1000) ;genau 1 Sekunde, wegen oberen Zeitangaben
    ;hier wird heruntergezählt wann der nächste Buchstabe kommt
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1
    ;falls bei einem Wert = 0 dann ist es Zeit in die Tasten zu greifen :)
    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;Funktionen für die einzelnen Buchstaben
    Func _a() ;hier wird der Buchstabe gedrückt und ein neuer Wert ermittelt
    Send("a") ;später mit ControlSend ersetzen eventuell
    Global $a = Random($aMin,$aMax,1) ;Minimum und Maximumgrenze wird berücksichtigt, 1 steht für ganzzahlige Werte
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _b()
    Send("b")
    Global $b = Random($bMin,$bMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _c()
    Send("c")
    Global $c = Random($cMin,$cMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _d()
    Send("d")
    Global $d = Random($dMin,$dMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _e()
    Send("e")
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _break()
    Switch $break ;Check ob Pause schon aktiv oder nicht
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch

    While $break = 1 ;wenn ja, dann pausiert das Skript
    sleep(300) ;um CPU nicht zu arg zu belasten
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit ;beendet das Programm
    EndFunc

    [/autoit]

    Gruß Stormy

    Edit: Wegem dem Gui, schau dir mal in der Hilfe (oder Goolge,SuFu) mal GuiCreateInput, GuiCtrlCreateButton, GuiCreate und GuiGetMsg an.

    Einmal editiert, zuletzt von stormy (23. April 2008 um 20:00)

  • Hi Stormy,

    Vielen Dank, du hast mir sehr geholfen und alles richtig verstanden.

    Ich Leider nicht ;(, nachdem ich rausbekommen hab was ein GUI ist, hab ich mit mäßigem erfolg eines erstellt. Ich weiß aber nicht wie ich da texte wie Min oder mac eingeben kann. Und wen man da "ok" klickt tut sich garnichts. Hab mit Koda gearbeitet.

    Da will ich aber im Internet nochmal schauen wie ich das mach.

    Das damit Notepad automatisch startet hab ich glaube ich hinbekommen. Kann mir aber nicht sicher sein da ich ja mein GUI fenster nicht wegbekomme.

    Wenn ich meine Sekunden nich in ganzen sekunden soneren mit tausendstel eingeben möchte muss ich dann die

    $break = 0
    ;einmalig. Hinweis: Nicht mit Funktionen _a bis _e ersetzen, da sonst gleich am Anfang schon geschrieben wird.
    Global $a = Random($aMin,$aMax,1)
    Global $b = Random($bMin,$bMax,1)
    Global $c = Random($cMin,$cMax,1)
    Global $d = Random($dMin,$dMax,1)
    Global $e = Random($eMin,$eMax,1)
    ;wieso hab ich eigentlich Global geschrieben, wahrscheinlich weil ich es unten auch geschrieben habe
    ;sieht halt einfach hübsch aus ;) (falls jmd den Grund kennt, pls sagen, hab ihn i-wie verdrängt)


    1 immer durch ein 1000 ersetzen ??

    in Zeile 68/69 verstehe ich das sleep nicht wartum es da ist.

    was bedeutet das in Zeile 1 ?

    wie mach ich das dass meine Zahlen die ich bei dem GUI eingegeben hab dann auch ins Skript übernommen werden ?

    und meine letzte Frage kann ich irgend wie bestimmen das die Buchstaben in abhängigkeit voneinander starten? also z.B. "b" soll genau 45s nach "a" starten. Aber dann in seiner Schleife normal weiter laufen. Also das würde nur den ersten drücker betreffen.

    Also so das "b" nach z.B 45 sek hinter "a" startet dann aber immer die Zufallszahl zwischen den Grenzen von "b" ermittelt.


    Du siehst ich bin Leider voll der Anfänger und hab Fragen über Fragen. Hoffe du kannst mir weiter helfen.


    Gruß Flubber

  • Zitat


    Wenn ich meine Sekunden nich in ganzen sekunden soneren mit tausendstel eingeben möchte muss ich dann die..


    Nein, die 1 dient dazu, das ganzzahlige Werte ausgegeben werden.
    Aus der AutoIt Hilfe:
    Random ( [Min [, Max [, Flag]]] )
    Min = Minimaler Wert, Max = Maximaler Wert
    Wenn Flag = 1 dann kommen nur ganzzahlige Zufallszahlen raus
    Wenn, dann müsstest du die 1 nur weglassen, dann kommen auch Kommazeilen heraus, aber dies würde nicht ermöglichen im Gui in tausendstel die Sekunden einzugeben, also Millisekunden

    Spoiler anzeigen
    [autoit]

    $zufallszahl = Random(1,3,1)
    MsgBox(0,"",$zufallszahl)
    ;==> kann nur 1, 2 oder 3 rauskommen
    $zufallszahl2 = Random(1,3) ;ohne 1
    MsgBox(0,"",$zufallszahl2)
    ;==> können alle Zahlen zwischen 1 und 3 rauskommen, auch 1.0394959385 usw.

    [/autoit]

    Edit1:
    Um in Millisekunden einzugeben müsstest du die Werte mal tausend nehmen und unten die While-Schleife abändern.
    Min+Max:

    Spoiler anzeigen
    [autoit]

    aMin = 10000
    $aMax = 20000
    $bMin = 5000
    $bMax = 9000
    $cMin = 3000
    $cMax = 17000
    $dMin = 13000
    $dMax = 30000
    $eMin = 6000
    $eMax = 11000

    [/autoit]


    While-Schleife:

    Spoiler anzeigen
    [autoit]

    Func _start()
    While 1
    sleep(1)
    ;hier wird heruntergezählt wann der nächste Buchstabe kommt
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1
    ;falls bei einem Wert = 0 dann ist es Zeit in die Tasten zu greifen :)
    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc

    [/autoit]


    Ich empfehle es aber nicht, da das sleep auch dafür gesorgt hat, dass der PC nicht überlastet ist, denn der ackert sonst fast ohne Pause durch und der wird ne CPU-Auslastung (je nach CPU) von ca. 70% haben und das ist definitiv zu viel, kann bei einem älteren CPU auch sein, dass du 100% hast (nicht mal Alkohol gibt soviel her).

    Anderer Lösungsvorschlag:
    du gibst oben die Zeit trotzdem in Millisekunden an
    aber machst in der While-Schleife folgendes:

    Spoiler anzeigen
    [autoit]

    sleep(50)

    [/autoit]


    des verkraften die meisten Rechner noch. Jetzt stimmt es aber mit den Werten nicht mehr, denn er zählt hier jetzt immer noch in 0,05 Sekunden und nicht in 0,001 (Millisekunden) ab, das heißt wir müssen mit den Werten oben folgendes machen:

    Spoiler anzeigen
    [autoit]

    ;1000/50 = 20 ---> dann stimmt es wieder überein
    ;wird dann aber nur auf 0,05 Sekunden genau abgefragt (was aber eigentlich genug sein sollte)
    $aMin = int($aMin/20)
    $aMax = int($aMax/20)
    $bMin = int($bMin/20)
    $bMax = int($bMax/20)
    $cMin = int($cMin/20)
    $cMax = int($cMax/20)
    $dMin = int($dMin/20)
    $dMax = int($dMax/20)
    $eMin = int($eMin/20)
    $eMax = int($eMax/20)

    [/autoit]

    Opt("TrayIconDebug",1)
    Es zeigt an, an welcher Stelle es im Skript gerade ist, wenn du rechts unten ohne zu klicken auf das AutoIT Symbol in der Trayleiste gehst.

    Zeile 68/69, wo ist da ein sleep oder sag welches du meinst, kann sein, dass du das Skript wieder bissl umgestellt hast und es bei dir an einer anderen Stelle ist.
    Lass die Whlie Schleife weg und du wirst sehen, dass das Skript nur ganz kurz aktiv ist und dann gleich wieder beendet,
    es läuft einfach von oben nach unten durch und wenn alles fertig ist, naja, ist es halt aus.
    Die While-Schleife verhindert dies, da das Skript bis dahin läuft und dann solange da verharrt bis was anderes passiet (z.bsp. Hotkey wird gedrückt) und danach wieder in diese While-Schleife zurückspringt bis das Skript beendet wird.

    Soviel erstmal dazu, die restlichen Fragen beantwortet ich dir auch noch...
    Nur, dass du schon mal eine kurze Vorab-Antwort hast.

    Edit2:
    Wenn du willst, das b soviel und soviel Sekunden nach a startet musst du folgendes machen, du musst die oberen Zeilen

    Spoiler anzeigen
    [autoit]

    Global $a = Random($aMin,$aMax,1)
    Global $b = Random($bMin,$bMax,1)
    Global $c = Random($cMin,$cMax,1)
    Global $d = Random($dMin,$dMax,1)
    Global $e = Random($eMin,$eMax,1)

    [/autoit]


    so abändern:

    Spoiler anzeigen
    [autoit]


    Global $a = Random($aMin,$aMax,1)
    $b = $a + 45 ;wird 45 Sekunden nach a angefangen
    $c = $a + 60 ;wird 60 Sekunden nach a angefangen
    $d = $c + 20 ;wird 20 Sekunden nach c bzw. 80 nach a angefangen
    ;usw...

    [/autoit]


    Da diese Zeilen sowieso nur einmal durchlaufen werden, können wir uns größere Umstrukurierung und Umbauten sparen.


    Edit3:
    So hier mal nur die GUI, natürlich mit Kommentare, les dich und guck dich mal in das Thema ein, dass du auch verstehst, falls was unklar sein sollte

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    ;das Gui an sich erstellen
    ;AutoIT Hilfe:
    ;GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
    ;für uns momentan wichtig sind nur, "title", width, height, left und top
    ;wenn wir ein Gui erstellen bekommen wir einen Wert für dieses GUI
    ;dieser ist immer ganz nützlich und brauchbar, um genau zu sagen welches Fenster gemeint ist
    $gui_handle = GUICreate("Wordgame",280,200,-1,-1) ; -1 bei left und top stehen dafür, dass das Fenster zentriert wird
    ;Inputfelder
    ;AutoIT Hilfe: GUICtrlCreateInput ( "text", left, top [, width [, height [, style [, exStyle]]]] )
    ;Wir benötigen auch hier nur: "text",left,top,width,height
    ;aber aufpassen!!, width, height kommen nach Text nicht als erstes im Vergleich zum GUI_Create Befehl
    $aMin_control = GUICtrlCreateInput("Min-Wert a:",30,5,100,25)
    $aMax_control = GUICtrlCreateInput("Max-Wert a:",155,5,100,25)
    $bMin_control = GUICtrlCreateInput("Min-Wert b:",30,35,100,25)
    $bMax_control = GUICtrlCreateInput("Max-Wert b:",155,35,100,25)
    $cMin_control = GUICtrlCreateInput("Min-Wert c:",30,65,100,25)
    $cMax_control = GUICtrlCreateInput("Max-Wert c:",155,65,100,25)
    $dMin_control = GUICtrlCreateInput("Min-Wert d:",30,95,100,25)
    $dMax_control = GUICtrlCreateInput("Max-Wert d:",155,95,100,25)
    $eMin_control = GUICtrlCreateInput("Min-Wert e:",30,125,100,25)
    $eMax_control = GUICtrlCreateInput("Max-Wert e:",155,125,100,25)
    $start = GUICtrlCreateButton("Start",115,160,50,25)
    GUISetState() ;macht das gerade zusammengebastelte Fenter sichtbar, bringt es zum Vorschein

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GuiGetmsg() ;frägt ab, was gedrückt wurde
    Switch $msg ;je nachdem was gedrückt wurde, wird was anderes ausgeführt
    Case $start ;wenn Start Button gedrückt wurde
    ShellExecute("notepad") ;Notepad, Texteditor, wird schon mal angestartet
    _guiread() ;Funktion zum Felder auslesen wird aufgerufen
    GUISetState(@SW_HIDE) ;nach dem Start-Button drücken, wird das GUI wieder unsichtbar gemacht
    Case $GUI_EVENT_CLOSE ;wenn das X gedrückt wird bzw. Fenster geschlossen wird, wird auch das Skript beendet
    Exit ;beendet das Skript wenn das X geschlosen wird
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _guiread() ;liest die Input-Felder aus
    Global $aMin = GUICtrlRead($aMin_control)
    Global $aMax = GUICtrlRead($aMax_control)
    Global $bMin = GUICtrlRead($bMin_control)
    Global $bMax = GUICtrlRead($bMax_control)
    Global $cMin = GUICtrlRead($cMin_control)
    Global $cMax = GUICtrlRead($cMax_control)
    Global $dMin = GUICtrlRead($dMin_control)
    Global $dMax = GUICtrlRead($dMax_control)
    Global $eMin = GUICtrlRead($eMin_control)
    Global $eMax = GUICtrlRead($eMax_control)
    EndFunc

    [/autoit]


    Edit4:
    Und nocheinmal, dieses mal die GUI in das komplette Skript eingebaut:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    Opt("TrayIconDebug",1)

    [/autoit] [autoit][/autoit] [autoit]

    HotKeySet("{PGUP}","_start") ;"Bild hoch" um Skript/Programm zu starten
    HotKeySet("{Pause}","_break") ;"Pause" um Skript/Programm zu pausieren
    HotKeySet("{PGDN}","_exit") ;"Bild Runter" um das Skript/Programm zu beenden

    [/autoit] [autoit][/autoit] [autoit]

    ;Min und Maxwerte der Zeit für a,b,c,d,e
    ;ToDo --> GUI erstellen um Werte eintragen zu können
    ;ToDo --> Automatisch Texteditor öffnen, momentan noch manuell zu starten
    ;das Gui an sich erstellen
    ;AutoIT Hilfe:
    ;GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
    ;für uns momentan wichtig sind nur, "title", width, height, left und top
    ;wenn wir ein Gui erstellen bekommen wir einen Wert für dieses GUI
    ;dieser ist immer ganz nützlich und brauchbar, um genau zu sagen welches Fenster gemeint ist

    [/autoit] [autoit][/autoit] [autoit]

    $break = 0
    $gui_handle = GUICreate("Wordgame",280,200,-1,-1) ; -1 bei left und top stehen dafür, dass das Fenster zentriert wird
    ;Inputfelder
    ;AutoIT Hilfe: GUICtrlCreateInput ( "text", left, top [, width [, height [, style [, exStyle]]]] )
    ;Wir benötigen auch hier nur: "text",left,top,width,height
    ;aber aufpassen!!, width, height kommen nach Text nicht als erstes im Vergleich zum GUI_Create Befehl
    $aMin_control = GUICtrlCreateInput("Min-Wert a:",30,5,100,25)
    $aMax_control = GUICtrlCreateInput("Max-Wert a:",155,5,100,25)
    $bMin_control = GUICtrlCreateInput("Min-Wert b:",30,35,100,25)
    $bMax_control = GUICtrlCreateInput("Max-Wert b:",155,35,100,25)
    $cMin_control = GUICtrlCreateInput("Min-Wert c:",30,65,100,25)
    $cMax_control = GUICtrlCreateInput("Max-Wert c:",155,65,100,25)
    $dMin_control = GUICtrlCreateInput("Min-Wert d:",30,95,100,25)
    $dMax_control = GUICtrlCreateInput("Max-Wert d:",155,95,100,25)
    $eMin_control = GUICtrlCreateInput("Min-Wert e:",30,125,100,25)
    $eMax_control = GUICtrlCreateInput("Max-Wert e:",155,125,100,25)
    $start = GUICtrlCreateButton("Start",115,160,50,25)
    GUISetState() ;macht das gerade zusammengebastelte Fenter sichtbar, bringt es zum Vorschein

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GuiGetmsg() ;frägt ab, was gedrückt wurde
    Switch $msg ;je nachdem was gedrückt wurde, wird was anderes ausgeführt
    Case $start ;wenn Start Button gedrückt wurde
    ShellExecute("notepad") ;Notepad, Texteditor, wird schon mal angestartet
    _guiread() ;Funktion zum Felder auslesen wird aufgerufen
    GUISetState(@SW_HIDE) ;nach dem Start-Button drücken, wird das GUI wieder unsichtbar gemacht
    Case $GUI_EVENT_CLOSE ;wenn das X gedrückt wird bzw. Fenster geschlossen wird, wird auch das Skript beendet
    Exit ;beendet das Skript wenn das X geschlosen wird
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _guiread() ;liest die Input-Felder aus
    Global $aMin = GUICtrlRead($aMin_control)
    Global $aMax = GUICtrlRead($aMax_control)
    Global $bMin = GUICtrlRead($bMin_control)
    Global $bMax = GUICtrlRead($bMax_control)
    Global $cMin = GUICtrlRead($cMin_control)
    Global $cMax = GUICtrlRead($cMax_control)
    Global $dMin = GUICtrlRead($dMin_control)
    Global $dMax = GUICtrlRead($dMax_control)
    Global $eMin = GUICtrlRead($eMin_control)
    Global $eMax = GUICtrlRead($eMax_control)
    Global $a = Random($aMin,$aMax,1)
    Global $b = Random($bMin,$bMax,1) ;oder: Global $b = $a + 45 ;wenn b erst nach 45 sek angestartet werde soll, das selbe mit c,d und e
    Global $c = Random($cMin,$cMax,1)
    Global $d = Random($dMin,$dMax,1)
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _start()
    While 1
    sleep(1000) ;genau 1 Sekunde, wegen oberen Zeitangaben
    ;hier wird heruntergezählt wann der nächste Buchstabe kommt
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1
    ;falls bei einem Wert = 0 dann ist es Zeit in die Tasten zu greifen :)
    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;Funktionen für die einzelnen Buchstaben
    Func _a() ;hier wird der Buchstabe gedrückt und ein neuer Wert ermittelt
    Send("a") ;später mit ControlSend ersetzen eventuell
    Global $a = Random($aMin,$aMax,1) ;Minimum und Maximumgrenze wird berücksichtigt, 1 steht für ganzzahlige Werte
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _b()
    Send("b")
    Global $b = Random($bMin,$bMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _c()
    Send("c")
    Global $c = Random($cMin,$cMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _d()
    Send("d")
    Global $d = Random($dMin,$dMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _e()
    Send("e")
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _break()
    Switch $break ;Check ob Pause schon aktiv oder nicht
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch
    While $break = 1 ;wenn ja, dann pausiert das Skript
    sleep(300) ;um CPU nicht zu arg zu belasten
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exit()
    Exit ;beendet das Programm
    EndFunc

    [/autoit]

    So, jetzt müssten wir alle Fragen beantwortet haben ;)

    Gruß Stormy und gute Nacht/Morgen

    ps: hab noch paar a, b, c, d und es aus den AutoIt Skripten rausgelöscht, hab während das Skript gelaufen ist, anstatt zu beenden einfach rübergeswitched zu Scite :D :D

    5 Mal editiert, zuletzt von stormy (24. April 2008 um 00:34)

  • Hallo, Sorry das ich nicht gleich geantwortet habe aber autoit war glaub down.

    wenn ich es so nehme wie du es im letzte Beispiel hast also so:
    #include <GuiConstants.au3>
    Opt("TrayIconDebug",1)

    HotKeySet("{PGUP}","_start") ;"Bild hoch" um Skript/Programm zu starten
    HotKeySet("{Pause}","_break") ;"Pause" um Skript/Programm zu pausieren
    HotKeySet("{PGDN}","_exit") ;"Bild Runter" um das Skript/Programm zu beenden

    ;Min und Maxwerte der Zeit für a,b,c,d,e
    ;ToDo --> GUI erstellen um Werte eintragen zu können
    ;ToDo --> Automatisch Texteditor öffnen, momentan noch manuell zu starten
    ;das Gui an sich erstellen
    ;AutoIT Hilfe:
    ;GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
    ;für uns momentan wichtig sind nur, "title", width, height, left und top
    ;wenn wir ein Gui erstellen bekommen wir einen Wert für dieses GUI
    ;dieser ist immer ganz nützlich und brauchbar, um genau zu sagen welches Fenster gemeint ist

    $break = 0
    $gui_handle = GUICreate("Wordgame",280,200,-1,-1) ; -1 bei left und top stehen dafür, dass das Fenster zentriert wird
    ;Inputfelder
    ;AutoIT Hilfe: GUICtrlCreateInput ( "text", left, top [, width [, height [, style [, exStyle]]]] )
    ;Wir benötigen auch hier nur: "text",left,top,width,height
    ;aber aufpassen!!, width, height kommen nach Text nicht als erstes im Vergleich zum GUI_Create Befehl
    $aMin_control = GUICtrlCreateInput("Min-Wert a:",30,5,100,25)
    $aMax_control = GUICtrlCreateInput("Max-Wert a:",155,5,100,25)
    $bMin_control = GUICtrlCreateInput("Min-Wert b:",30,35,100,25)
    $bMax_control = GUICtrlCreateInput("Max-Wert b:",155,35,100,25)
    $cMin_control = GUICtrlCreateInput("Min-Wert c:",30,65,100,25)
    $cMax_control = GUICtrlCreateInput("Max-Wert c:",155,65,100,25)
    $dMin_control = GUICtrlCreateInput("Min-Wert d:",30,95,100,25)
    $dMax_control = GUICtrlCreateInput("Max-Wert d:",155,95,100,25)
    $eMin_control = GUICtrlCreateInput("Min-Wert e:",30,125,100,25)
    $eMax_control = GUICtrlCreateInput("Max-Wert e:",155,125,100,25)
    $start = GUICtrlCreateButton("Start",115,160,50,25)
    GUISetState() ;macht das gerade zusammengebastelte Fenter sichtbar, bringt es zum Vorschein

    While 1
    $msg = GuiGetmsg() ;frägt ab, was gedrückt wurde
    Switch $msg ;je nachdem was gedrückt wurde, wird was anderes ausgeführt
    Case $start ;wenn Start Button gedrückt wurde
    ShellExecute("notepad") ;Notepad, Texteditor, wird schon mal angestartet
    _guiread() ;Funktion zum Felder auslesen wird aufgerufen
    GUISetState(@SW_HIDE) ;nach dem Start-Button drücken, wird das GUI wieder unsichtbar gemacht
    Case $GUI_EVENT_CLOSE ;wenn das X gedrückt wird bzw. Fenster geschlossen wird, wird auch das Skript beendet
    Exit ;beendet das Skript wenn das X geschlosen wird
    EndSwitch
    WEnd

    Func _guiread() ;liest die Input-Felder aus
    Global $aMin = GUICtrlRead($aMin_control)
    Global $aMax = GUICtrlRead($aMax_control)
    Global $bMin = GUICtrlRead($bMin_control)
    Global $bMax = GUICtrlRead($bMax_control)
    Global $cMin = GUICtrlRead($cMin_control)
    Global $cMax = GUICtrlRead($cMax_control)
    Global $dMin = GUICtrlRead($dMin_control)
    Global $dMax = GUICtrlRead($dMax_control)
    Global $eMin = GUICtrlRead($eMin_control)
    Global $eMax = GUICtrlRead($eMax_control)
    Global $a = Random($aMin,$aMax,1)
    Global $b = Random($bMin,$bMax,1) ;oder: Global $b = $a + 45 ;wenn b erst nach 45 sek angestartet werde soll, das selbe mit c,d und e
    Global $c = Random($cMin,$cMax,1)
    Global $d = Random($dMin,$dMax,1)
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    Func _start()
    While 1
    sleep(1000) ;genau 1 Sekunde, wegen oberen Zeitangaben
    ;hier wird heruntergezählt wann der nächste Buchstabe kommt
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1
    ;falls bei einem Wert = 0 dann ist es Zeit in die Tasten zu greifen :)
    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc

    ;Funktionen für die einzelnen Buchstaben
    Func _a() ;hier wird der Buchstabe gedrückt und ein neuer Wert ermittelt
    Send("a") ;später mit ControlSend ersetzen eventuell
    Global $a = Random($aMin,$aMax,1) ;Minimum und Maximumgrenze wird berücksichtigt, 1 steht für ganzzahlige Werte
    EndFunc

    Func _b()
    Send("b")
    Global $b = Random($bMin,$bMax,1)
    EndFunc

    Func _c()
    Send("c")
    Global $c = Random($cMin,$cMax,1)
    EndFunc

    Func _d()
    Send("d")
    Global $d = Random($dMin,$dMax,1)
    EndFunc

    Func _e()
    Send("e")
    Global $e = Random($eMin,$eMax,1)
    EndFunc

    Func _break()
    Switch $break ;Check ob Pause schon aktiv oder nicht
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch
    While $break = 1 ;wenn ja, dann pausiert das Skript
    sleep(300) ;um CPU nicht zu arg zu belasten
    WEnd
    EndFunc

    Func _exit()
    Exit ;beendet das Programm
    EndFunc

    dann funktionier alles hervoragend. Was ich aber nicht weiß ist ab jetzt eine ganze Zufallszahl zwischen den grenzen gweählt wird als wen min 1 und max 5 ist, wir dann nur 1,2,3,4,5 per zufall gewählt.
    Oder kommen auch so zahlen wie 2,476 oder 4,976

    Sonst kalappt alles hervoragend.

    Gruß

    Flubber

  • [autoit]

    random(1,5) ;<== so werden alle zahlen von 1 bis 5 ausgespuckt, auch kommazahlen

    [/autoit]
  • Wäre auch in meinem Code gestanden:

    Spoiler anzeigen
    [autoit]

    Global $a = Random($aMin,$aMax,1) ;Minimum und Maximumgrenze wird berücksichtigt, 1 steht für ganzzahlige Werte

    [/autoit]


    (auch wenn nur Indirekt)
    Funzt des Prog jetzt so wie du es willst?

    Gruß und schönen Abend noch

    Stormy

  • Also wen ich es jetzt so schreibe:


    Spoiler anzeigen


    #include <GuiConstants.au3>
    Opt("TrayIconDebug",1)

    HotKeySet("{PGUP}","_start") ;"Bild hoch" um Skript/Programm zu starten
    HotKeySet("{Pause}","_break") ;"Pause" um Skript/Programm zu pausieren
    HotKeySet("{PGDN}","_exit") ;"Bild Runter" um das Skript/Programm zu beenden

    ;Min und Maxwerte der Zeit für a,b,c,d,e
    ;ToDo --> GUI erstellen um Werte eintragen zu können
    ;ToDo --> Automatisch Texteditor öffnen, momentan noch manuell zu starten
    ;das Gui an sich erstellen
    ;AutoIT Hilfe:
    ;GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
    ;für uns momentan wichtig sind nur, "title", width, height, left und top
    ;wenn wir ein Gui erstellen bekommen wir einen Wert für dieses GUI
    ;dieser ist immer ganz nützlich und brauchbar, um genau zu sagen welches Fenster gemeint ist

    $break = 0
    $gui_handle = GUICreate("Wordgame",280,200,-1,-1) ; -1 bei left und top stehen dafür, dass das Fenster zentriert wird
    ;Inputfelder
    ;AutoIT Hilfe: GUICtrlCreateInput ( "text", left, top [, width [, height [, style [, exStyle]]]] )
    ;Wir benötigen auch hier nur: "text",left,top,width,height
    ;aber aufpassen!!, width, height kommen nach Text nicht als erstes im Vergleich zum GUI_Create Befehl
    $aMin_control = GUICtrlCreateInput("Min-Wert a:",30,5,100,25)
    $aMax_control = GUICtrlCreateInput("Max-Wert a:",155,5,100,25)
    $bMin_control = GUICtrlCreateInput("Min-Wert b:",30,35,100,25)
    $bMax_control = GUICtrlCreateInput("Max-Wert b:",155,35,100,25)
    $cMin_control = GUICtrlCreateInput("Min-Wert c:",30,65,100,25)
    $cMax_control = GUICtrlCreateInput("Max-Wert c:",155,65,100,25)
    $dMin_control = GUICtrlCreateInput("Min-Wert d:",30,95,100,25)
    $dMax_control = GUICtrlCreateInput("Max-Wert d:",155,95,100,25)
    $eMin_control = GUICtrlCreateInput("Min-Wert e:",30,125,100,25)
    $eMax_control = GUICtrlCreateInput("Max-Wert e:",155,125,100,25)
    $start = GUICtrlCreateButton("Start",115,160,50,25)
    GUISetState() ;macht das gerade zusammengebastelte Fenter sichtbar, bringt es zum Vorschein

    While 1
    $msg = GuiGetmsg() ;frägt ab, was gedrückt wurde
    Switch $msg ;je nachdem was gedrückt wurde, wird was anderes ausgeführt
    Case $start ;wenn Start Button gedrückt wurde
    ShellExecute("notepad") ;Notepad, Texteditor, wird schon mal angestartet
    _guiread() ;Funktion zum Felder auslesen wird aufgerufen
    GUISetState(@SW_HIDE) ;nach dem Start-Button drücken, wird das GUI wieder unsichtbar gemacht
    Case $GUI_EVENT_CLOSE ;wenn das X gedrückt wird bzw. Fenster geschlossen wird, wird auch das Skript beendet
    Exit ;beendet das Skript wenn das X geschlosen wird
    EndSwitch
    WEnd

    Func _guiread() ;liest die Input-Felder aus
    Global $aMin = GUICtrlRead($aMin_control)
    Global $aMax = GUICtrlRead($aMax_control)
    Global $bMin = GUICtrlRead($bMin_control)
    Global $bMax = GUICtrlRead($bMax_control)
    Global $cMin = GUICtrlRead($cMin_control)
    Global $cMax = GUICtrlRead($cMax_control)
    Global $dMin = GUICtrlRead($dMin_control)
    Global $dMax = GUICtrlRead($dMax_control)
    Global $eMin = GUICtrlRead($eMin_control)
    Global $eMax = GUICtrlRead($eMax_control)
    Global $a = Random($aMin,$aMax)
    Global $b = Random($bMin,$bMax) ;oder: Global $b = $a + 45 ;wenn b erst nach 45 sek angestartet werde soll, das selbe mit c,d und e
    Global $c = Random($cMin,$cMax)
    Global $d = Random($dMin,$dMax)
    Global $e = Random($eMin,$eMax)
    EndFunc

    Func _start()
    While 1
    sleep(1000) ;genau 1 Sekunde, wegen oberen Zeitangaben
    ;hier wird heruntergezählt wann der nächste Buchstabe kommt
    $a -= 1
    $b -= 1
    $c -= 1
    $d -= 1
    $e -= 1
    ;falls bei einem Wert = 0 dann ist es Zeit in die Tasten zu greifen :)
    If $a = 0 Then _a()
    If $b = 0 Then _b()
    If $c = 0 Then _c()
    If $d = 0 Then _d()
    If $e = 0 Then _e()
    WEnd
    EndFunc

    ;Funktionen für die einzelnen Buchstaben
    Func _a() ;hier wird der Buchstabe gedrückt und ein neuer Wert ermittelt
    Send("a") ;später mit ControlSend ersetzen eventuell
    Global $a = Random($aMin,$aMax) ;Minimum und Maximumgrenze wird berücksichtigt, 1 steht für ganzzahlige Werte
    EndFunc

    Func _b()
    Send("b")
    Global $b = Random($bMin,$bMax)
    EndFunc

    Func _c()
    Send("c")
    Global $c = Random($cMin,$cMax)
    EndFunc

    Func _d()
    Send("d")
    Global $d = Random($dMin,$dMax)
    EndFunc

    Func _e()
    Send("e")
    Global $e = Random($eMin,$eMax)
    EndFunc

    Func _break()
    Switch $break ;Check ob Pause schon aktiv oder nicht
    Case 0
    $break = 1
    Case 1
    $break = 0
    EndSwitch
    While $break = 1 ;wenn ja, dann pausiert das Skript
    sleep(300) ;um CPU nicht zu arg zu belasten
    WEnd
    EndFunc

    Func _exit()
    Exit ;beendet das Programm
    EndFunc


    kommen (hab jetzt die ,1 entfernt) die Kommazahlen raus? Ihr wisst doch das ich so wenig checke ;)


    Jo sonst klappt alles super, das einzige wen ich mache das "b" 20 Sek. nach a startet klappt das super. Aber wen ich dann Pause mache und dann die Pause wieder beende kommt es zu ner Zeit verschiebung. dann kommt "b" oft 21 oder 22 Sek nach dem "a"


    Gruß


    Flubber

    [color=#000090]Edit BugFix: Spoiler gesetzt, übrigens brauchst du Syntaxhervorhebung nicht selbst formatieren - dazu gibt es Tags: [ autoit ] CODE [ /autoit ] (ohne Leerzeichen in den eckigen Klammern)

    Einmal editiert, zuletzt von BugFix (29. April 2008 um 15:02)