vokabeltrainer

  • hey ich hab vor 3 tagen angefangen mit autoit zu schreiben und versuche grade einen vokabeltrainer zu machen:

    [autoit]

    $Rnd = Random (1,2,1) ;Damit soll ein Zufall bei den Vokabeln hergestellt werden

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

    If $Rnd = "1" Then ;Vokabel 1

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

    $Vok1 = InputBox ("Hallo" , "Was heißt 'Hallo' auf englisch?")
    Global $Vok1richtig = "Hello"
    If $Vok1 = $Vok1richtig Then
    MsgBox (0, "Richtig! ", "Gut gemacht! ")
    EndIf

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

    If $Vok1 <> $Vok1richtig Then
    MsgBox (0, "Falsch! ", "Das war leider falsch.")
    EndIf

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

    EndIf

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

    If $Rnd = "2" Then ;Vokabel2

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

    $Vok1 = InputBox ("Auto" , "Was heißt 'Auto' auf englisch?")
    Global $Vok1richtig = "Car"
    If $Vok1 = $Vok1richtig Then
    MsgBox (0, "Richtig! ", "Gut gemacht! ")
    EndIf

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

    If $Vok1 <> $Vok1richtig Then
    MsgBox (0, "Falsch! ", "Das war leider falsch.")
    EndIf
    EndIf

    [/autoit]

    so jetzt meine frage: kann man es machen dass nicht nur eine vokabel kommt sondern alle?
    danke im vorraus
    derfium

  • Du kannst das ganze über eine For-Schleife und einer Überpfrüfung ob die Vokabel bereits dran war machen.
    Zur Überrüfung musst du die vokabeln in ein Array oder in eine Datei speichern und später lesen.
    Bsp. für ein Arry: $Vok[a][b]

    • a = Nummer der Vokabel
    • b = mehr Infos:

      • Vokabel auf deutsch
      • Vokabel auf FS
      • War die Vokabel schon mal dran? (Logischer Schalter)
  • sorry aber iwie versteh ich nich so ganz wie du das meinst, und auch den link den du mir gegeben hast hilft mir nicht viel da ic h den script nciht verstehe... -.-''

  • code
    [autoit]

    Global $aVokabel[3][3] ;gesamtanzahl der vokabeln
    $aVokabel[0][1] = "Hello"
    $aVokabel[1][1] = "Car"
    $aVokabel[2][1] = "Sandwich"
    ; ~~ bis $aVokabel[n][1]

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

    ; ~~ Die Wörter auf Deutsch
    $aVokabel[0][2] = "Hallo"
    $aVokabel[1][2] = "Auto"
    $aVokabel[2][2] = "Sandwich"
    ; ~~ ebenfalls bis $aVokabel[n][2]

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

    $iRichtig = 0

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

    For $i = 0 To Ubound ($aVokabel) - 1 Step 1
    $aVokabel[$i][0] = InputBox ($aVokabel[$i][2], "Wie heißt '"& $aVokabel[$i][2] &"' auf Englisch?")
    If $aVokabel[$i][0] = $aVokabel[$i][1] Then
    MsgBox (0, "Richtig!", "Gut gemacht!")
    $iRichtig = $iRichtig + 1
    Else
    MsgBox (0, "Falsch!", "Das war leider falsch.")
    EndIf
    Next

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

    MsgBox (0, "Anzahl richtig", $iRichtig &" von "& Ubound ($aVokabel) &" richtig!")

    [/autoit]

    Wenn du neue Wörter hinzufügst, musst du die erste Zahl bei $aVokabel[3][3] erhöhen.
    Also bei 20 Vokabeln wäre es dann $aVokabel[20][3]
    In den oberen Block (mit [1] hinten) schreibst du die englischen Wörter. In den anderen Block kommen die Deutschen.

    Ich hab noch just for fun einen Counter reingemacht, der am Ende zeigt, wie viele richtig waren. :P

    Viel Spaß.

  • Da du die Vokabeln wahrscheinlich auch speichenr willst sag ich dir jetzt schonmal das du dir am besten die Ini Funktionen anguckst.
    Sectionname mit z.B. name der Unit/lection dann Wert=key mit deutsch=english . Genaueres findest du in der Wiki

    [autoit]

    IniWrite()
    IniRead()
    IniReadSection()
    ;...

    [/autoit]

    PS: $var: Nomen werden im Englischen Kleingeschrieben :P *Erbsenzähler*

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • danke aber
    $var: ich würde des auch gerne verstehen und ein paar befehle wie z.b. ubound hab ich noch nie gehört...
    gibts das vllt auch in einfach?

  • Ubound gibt die Anzahl der ArrayIndexe zurück. Da Arrays aber bekanntlich 0basierend sind musst du immer -1 machen, da ein Index = Index 0 ist.

    Bsp:
    Array mit 5 Indexen ist:
    0, 1, 2, 3, 4
    Also for i = 0 to Ubound ($aArray) -1 ;; Ubound ($aArray) -1 = 4

    EInfach mal die Hilfe benutzen ;)

    mfg BB

    "IF YOU'RE GOING TO KILL IT
    OPEN SOURCE IT!"

    by Phillip Torrone

    Zitat von Shoutbox

    [Heute, 11:16] Andy: ....böseböseböseböse....da erinnere ich mich daran, dass man den Puschelschwanz eines KaRnickels auch "Blume" nennt....ob da eins zum anderen passt? :rofl: :rofl: :rofl: :rofl:

    https://autoit.de/index.php?page…leIt#post251138

    Neon Snake

  • Am Anfang erstellst du ein zweidimensionales Array.
    In $aVokabel[n][2] werden die deutschen Wörter gespeichert. In $aVokabel[n][1] die englischen und in $aVokabel[n][0] wird das gespeichert, was der Benutzer eingibt.
    Dann startest du eine For-Schleife (wie Script-Bär bereits sagte).
    Es wird die Variable $i erstellt und ihr Wert wird auf 0 gesetzt. Somit kann das Array gleich von ganz 'unten' abgefragt werden.
    Mit Ubound ($aVokabel) wird die Gesamtgröße des Arrays bestimmt. Das ist nötig, damit das Script auch weiß, wann es die Schleife beenden soll.

    Die Eingabe erfolgt - aber das kennst du ja. :P
    Dann wird mit der If-Abfrage geprüft, ob die Eingabe stimmt. Falls ja, dann wird $iRichtig um 1 erhöht.
    Man verwendet hier auch das "Else", das die Abfrage noch mal einfacher macht und das "<>" ersetzt.
    Es heißt so viel wie "ansonsten", also wenn es eben nicht stimmt...

    Lies dir am besten die Hilfe zu den Funktionen in der Hilfe durch (Cursor auf die Funktion setzen und dann F1 in SciTE).

    Ich glaube, das wäre eigentlich die einfachste und kompakteste Möglichkeit.

  • @derfium,
    der Witz an einer Programmiersprache ist, daß man 1000 Möglichkeiten hat, ein Problem zu lösen.....
    Du könntest dein Script 467 mal hintereinanderkopieren, den Text entsprechend editieren (die Vokabeln) und hättest genau das, was du brauchst in 14359 Programmzeilen!
    Allerdings wäre das Ganze SEHR unübersichtlich, und neue Vokabeln dazuschreiben würde bedeuten, immer den Quelltext ändern zu müssen.....nicht sehr schön.

    Vokabeln und Programm trennen ist deer erste Schritt!
    Also schreibt man zum Beispiel die Vokabeln einfach in eine Datei.
    Mach in Windows den Editor auf, (oder benutze Scite) und schreib einfach die Vokabeln nebeneinander mit Komma getrennt in eine Zeile...also etwa so:

    Code
    hello,Hallo
    car,Auto
    dog,Hund
    cat,Katze


    speichere diese Daten als "Vokabeln.txt" in deinem Programmverzeichnis ab. Nun musst du beim Erweitern dieser "Datenbank" nur noch diese Datei öffnen und nicht mehr deinen Quellcode verändern.
    Ausserdem hast du nun die Möglichkeit, sowohl von Englisch nach Deutsch als auch von Deutsch nach Englisch abgefragt zu werden.^^

    Dazu musst du in deinem Programm nur die Datei öffnen, deine Vokabeln auslesen (vor dem Komma steht das deutsche Wort, hinter dem Komma das englische) und zufällig eine Vokabel auswählen und die passende Übersetzung dazu abfragen.
    Fehlen nur noch die passenden bzw. fehlenden Programmfunktionen^^
    In der deutschen Hilfe zu AutoIt solltest du fündig werden, dort sind für alle Funktionen Beispielscripte enthalten, die mit einem Mausklick ausgeführt werden können.
    Ich würde (als Anfänger) mit fileread() den Dateiinhalt in eine (String-)Variable einlesen, die Anzahl der im String enthaltenen Kommas bestimmen (damit hast du automatisch die Anzahl der Vokabeln) und dann per Random(1,$Anzahl_Kommas,1) eine Zeile der Datei auswählen.
    Das Wort links vom Komma ist das englische, rechts vom Komma das deutsche.
    Das gesamte Programm sollte bequem in 10 Zeilen passen und nur die rudimentären String- und Dateibearbeitungsfunktionen benutzen.

    Eine große Hilfe für Anfanger ist die Darstellung der Inhalte der Variablen während der Programmentwicklung
    Die DEBUG-Messageboxen in Scite zur Anzeige der Variableninhalte erhält man, wenn man den Cursor auf die zu untersuchende Variable setzt und STRG+SHIFT+D drückt. (siehe Menü 'Extras' )
    Alle DEBUG-Messagebogen auskommentieren kann man mit STRG+ALT+D
    Alle DEBUG-Zeilen löschen kann man mit STRG+ALT+Z

    Beispiel:

    Spoiler anzeigen
    [autoit]

    ;Wenn vokabeln.txt noch nicht besteht, anlegen
    if not fileexists("vokabeln.txt") then FileWrite("vokabeln.txt","hello,Hallo"&@crlf&"car,Auto"&@crlf&"dog,Hund"&@crlf&"cat,Katze"&@crlf)

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

    ;;editor öffnen, Daten können eingetragen werden, SPEICHERN nicht vergessen^^
    shellexecute("vokabeln.txt")

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

    ;Hier gehts los....
    ;Dateiinhalt in Stringvariable einlesen
    $string=fileread("vokabeln.txt")
    if @error then;falls Fehler aufgetreten sind....
    MsgBox(0,"Fehler Vokabeldatei!","Programm wird beendet! Bitte eine Datei Vokabel.txt erstellen und mit Komma getrennte Vokabelpaare eintragen!")
    exit;Ende
    endif
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$string' & @lf & @lf & 'Return:' & @lf & $string) ;### Debug MSGBOX

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

    ;Anzahl Kommas im String bestimmen
    StringReplace($string,",",",") ;komma mit komma im String ersetzen
    $AnzahlKommas=@extended ;anzahl ersetzter kommas ausgeben
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$Anzahl_Kommas' & @lf & @lf & 'Return:' & @lf & $AnzahlKommas) ;### Debug MSGBOX

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

    ;Zufallszahl bestimmen zwischen 1 und AnzahlKommas
    $Zufallszahl=random(1,$AnzahlKommas,1)
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$Zufallszahl' & @lf & @lf & 'Return:' & @lf & $Zufallszahl) ;### Debug MSGBOX

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

    ;Zufällige Zeile aus Datei auslesen
    $Zufallszeile=FileReadLine("vokabeln.txt",$Zufallszahl)
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$Zufallszeile' & @lf & @lf & 'Return:' & @lf & $Zufallszeile) ;### Debug MSGBOX

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

    ;Position des Kommas in der Zeile bestimmen
    $Kommaposition=stringinstr($Zufallszeile,",")
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$Kommaposition' & @lf & @lf & 'Return:' & @lf & $Kommaposition) ;### Debug MSGBOX

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

    ;linker Teil vom Komma ist die englische Vokabel
    $EnglischeVokabel=stringleft($zufallszeile,$kommaposition-1)
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$EnglischeVokabel' & @lf & @lf & 'Return:' & @lf & $EnglischeVokabel) ;### Debug MSGBOX

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

    ;rechter Teil vom Komma ist die deutsche Vokabel
    $DeutscheVokabel=stringtrimleft($zufallszeile,$kommaposition);linker Teil incl Komma wird abgeschnitten
    MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$DeutscheVokabel' & @lf & @lf & 'Return:' & @lf & $DeutscheVokabel) ;### Debug MSGBOX

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

    ;jetzt kommt dein Programmteil^^
    $AbgefragteVokabel = InputBox ("Hallo" , "Was heißt '"&$DeutscheVokabel&"' auf englisch?")
    If $AbgefragteVokabel = $EnglischeVokabel Then
    MsgBox (0, "Richtig! ", "Gut gemacht! ")
    Else
    MsgBox (0, "Falsch! ", "Das war leider falsch. Die englische Übersetzung von '"&$DeutscheVokabel&"' ist '"&$EnglischeVokabel&"'")
    endif

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

    $AbgefragteVokabel = InputBox ("Hallo" , "Was heißt '"&$EnglischeVokabel&"' auf deutsch?")
    If $AbgefragteVokabel = $DeutscheVokabel Then
    MsgBox (0, "Richtig! ", "Gut gemacht! ")
    Else
    MsgBox (0, "Falsch! ", "Das war leider falsch. Die deutsche Übersetzung von '"&$EnglischeVokabel&"' ist '"&$DeutscheVokabel&"'")
    endif

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