- Offizieller Beitrag
Mir war grad langweilig und so habe ich mal eben einen Lottozahlen-Generator geschrieben.
Spoiler anzeigen
#include <GUIConstants.au3>
#include <array.au3>
Opt('GUIOnEventMode', 1); Den OnEvent-Mode benutzen
Dim $trommel[50], $kugel[6], $anzeige[50]; Arrays deklarieren
$title = 'Lottozahlen 6 aus 49'; Text für Message-Box, Fenstertitel und Überschrift zuweisen
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
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
GUICtrlCreateLabel($title, 40, 10, 350, 40); Überschrift anzeigen
GUICtrlSetFont(-1, 24, 800, 0, 'Arial'); Größe, Breite und Font der Überschrift
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)
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
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
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
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
Func Beenden(); Die Funktion zum beenden des Programm
Exit
EndFunc
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
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.