• Offizieller Beitrag

    Mir war grad langweilig und so habe ich mal eben einen Lottozahlen-Generator geschrieben.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <array.au3>
    Opt('GUIOnEventMode', 1); Den OnEvent-Mode benutzen

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

    Dim $trommel[50], $kugel[6], $anzeige[50]; Arrays deklarieren
    $title = 'Lottozahlen 6 aus 49'; Text für Message-Box, Fenstertitel und Überschrift zuweisen

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

    For $i = 0 To 49; In dieser Schleife wird getestet, ob die Grafikdateien für die Kugeln vorhanden sind
    If Not FileExists('gfx\' & $i & '.gif') Then; Wenn die jeweilige Datei nicht existiert, dann...
    $msg = 'Die Datei: "gfx\' & $i & '.gif" konnte nicht gefunden werden.'; Text für die Ausgabe erstellen
    $msg &= @CRLF & 'Das Programm wird beendet!'
    MsgBox(48, $title, $msg); Den Text in einer Message-Box anzeigen
    Exit; und das Programm beenden
    EndIf
    Next

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

    GUICreate($title, 540, 590); Fenster erstellen (540 Pixel breit und 590 Pixel hoch, auf dem Bildschirm zentriert (Vorgabe))
    GUISetBkColor(0xFFEBCD); Hintergrundfarbe für das Fenster setzen
    GUISetOnEvent($GUI_EVENT_CLOSE, 'Beenden'); Beim Klick auf 'Schließen' wird die Funtion 'Beenden' ausgeführt

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

    GUICtrlCreateLabel($title, 40, 10, 350, 40); Überschrift anzeigen
    GUICtrlSetFont(-1, 24, 800, 0, 'Arial'); Größe, Breite und Font der Überschrift

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

    GUICtrlCreateGraphic(20, 60, 500, 500); Graphic (Hintergrund für die Kugeln) erstellen
    GUICtrlSetGraphic(-1, $GUI_GR_RECT, 0, 0, 500, 500); diese besteht nur aus einem Quadrat
    GUICtrlSetBkColor(-1, 0xFFFFFF); in der Farbe 'weiß' (die Grafiken der Kugeln haben einen weißen Hintergrund)

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

    For $i = 0 To 6; Schleife für Kugelreihen (7 Reihen)
    For $j = 0 To 6; Schleife für Kugelspalten (7 Spalten)
    ; die Bilder für die Kugeln generieren und erstmal nur als graue (0.gif) Kugeln darstellen. Das Array $anzeige[1...49] ist dann der Zeiger auf die Kugeln
    $anzeige[$j + 1 + $i * 7] = GUICtrlCreatePic('gfx\0.gif', 30 + $j * 70, 70 + $i * 70, 60 ,60)
    Next
    Next

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

    GUICtrlCreateButton('Neue Ziehung', 400, 15, 110, 30); den Button für 'Neue Ziehung' erstellen
    GUICtrlSetFont(-1, 10, 800, 0, 'Arial'); Größe, Breite und Font der Buttonbeschriftung
    GUICtrlSetOnEvent(-1, 'Ziehung'); Die Funktion 'Ziehung' wird aufgerufen, wenn der Button angeklickt wird

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

    GUICtrlCreateLabel(chr(169) & ' 2007 by Thomas Stephan (Oscar)', 300, 565, 240, 20); Copyright-Schriftzug anzeigen
    GUICtrlSetFont(-1, 10, 400, 0, 'Arial'); Größe, Breite und Font des Schriftzugs

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

    GUISetState(); GUI anzeigen

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

    Ziehung(); Funktion einmal aufrufen, damit beim Start bereits Zahlen angezeigt werden

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

    While 1; Diese Schleife sorgt dafür, dass sich das Programm nicht vorzeitig beendet (OnEvent-Mode)
    Sleep(100); Der Sleep-Befehl verhindert eine zu hohe Prozessorlast
    WEnd

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

    Func Beenden(); Die Funktion zum beenden des Programm
    Exit
    EndFunc

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

    Func Ziehung(); Die Funktion zum 'ziehen' und anzeigen der Kugeln
    For $i = 0 To 5; In dieser Schleife werden die Kugeln von der vorherigen Ziehung...
    GUICtrlSetImage($anzeige[$kugel[$i]], 'gfx\0.gif'); ...wieder als graue (0.gif) Kugeln angezeigt
    Next

    For $i = 1 To 49; Diese Schleife weist dem Array ($trommel) die Zahlen 1...49 zu
    $trommel[$i] = $i
    Next

    For $i = 0 To 5; Hier beginnt die eigentliche 'Ziehung' der Zahlen
    $r = Random(1, UBound($trommel)-1, 1); Zufallswert zwischen 1 und dem Ende des Arrays (Wichtig: $r ist nur der Zeiger auf die Zufallszahl)
    $kugel[$i] = $trommel[$r]; Der Zeiger $r zeigt auf die Zahl im Array ($trommel) und die wird in das Array ($kugel) übernommen.
    _ArrayDelete($trommel, $r); Jetzt noch die 'gezogene' Zahl aus dem Array ($trommel) entfernen, damit sie nicht nochmal gezogen werden kann.
    ;Selbst wenn $r im nächsten Schleifendurchlauf zufällig wieder den gleichen Wert erhält, so zeigt $r jetzt ja auf eine andere Zahl, weil '_ArrayDelete'
    ;die vorherige Zahl aus dem Array $trommel entfernt hat und alle anderen Array-Einträge eins nach unten verschoben wurden.
    ; Außerdem wird von der Funktion '_ArrayDelete' das Array-Ende von $trommel um eins nach unten gesetzt.
    Next; Das Array $kugel[0...5] enthält nach der Schleife die 6 'gezogenen' Kugeln

    For $i = 0 To 5; In dieser Schleife werden die Kugeln angezeigt
    ; Hier wird ein neues Bild (die jeweilige Zahl als grüne Kugel) für die oben generierten Kugeln ($anzeige[1...49]) geladen
    GUICtrlSetImage($anzeige[$kugel[$i]], 'gfx\' & $kugel[$i] & '.gif')
    Next

    ReDim $trommel[50]; Weil '_ArrayDelete' das Ende des Arrays nach unten korrigiert, wird hier das Array wieder auf 50 gesetzt
    EndFunc

    [/autoit]

    Im Scriptverzeichnis muss das Verzeichnis mit den Grafiken vorhanden sein. Am besten das ZIP-Archiv downloaden und entpacken. Da ist alles drin.

    Edit: Ich habe das Script mal ausführlich kommentiert, sodass auch Anfänger etwas davon haben.

  • ok dir war langweilig kann ich verstehen hab ich auch oft aber was hat dien script denn für einen sinn?

  • Hi Oscar,

    wie versprochen zu „ Lottozahlen “ meine Kritik :

    Alles in Allem ein Gutes Konzept gut umgesetzt. Die Oberfläche (GUI) mit Aha – Effekt hat auch unter der Haube etwas zu bieten. Das Ganze sehr großzügig kommentiert. Wirkliche Fehler konnte ich nicht feststellen.

    Dennoch ein zwei Bemerkungen seien erlaubt:

    1.Funktionen in AutoIT beginnen wohl mit dem Unterstrich (zB. _Muster()).
    2.Als Eselsbrücke für Kommentare stelle ich mir immer die Frage :
    „ Warum habe ich es genau so und nicht Anders gemacht ? „

    Abschließend bleibt nur noch die Spannung auf den Autor und seine künftigen Werke.

    Weiterhin
    viel Spaß und Erfolg!
    Euer Ritzelrocker04

    • Offizieller Beitrag

    Erstmal Danke für die lobenden Worte. :)

    1.Funktionen in AutoIT beginnen wohl mit dem Unterstrich (zB. _Muster()).
    2.Als Eselsbrücke für Kommentare stelle ich mir immer die Frage :
    „ Warum habe ich es genau so und nicht Anders gemacht ? „

    Zu 1.: Das kann man so oder so sehen. Ich handhabe das eigentlich lieber so, dass ich Funktionen innerhalb des Scriptes ohne Unterstrich schreibe und Funktionen, die per <include> eingebunden sind, dann dementsprechend mit Unterstrich.

    Zu 2.: Es kommt immer darauf an, für wen ich das kommentiere. Tue ich das nur für mich (um mich später daran zu erinnern, warum das da steht) oder tue ich das für Anfänger (z.B. hier im Forum). Im letzteren Fall fällt der Kommentar schonmal etwas üppiger aus. :D