Der Lottozahlengenerator ist weniger spektakulär und ist mehr ein Mittel zum Zweck.
== About Shoes ==
Shoes ist ein Cross-Platform-Toolkit um grafische Oberflächen (GUIs) zu erstellen.
Das schöne an Shoes ist, das es sehr einfach zu erlernen, gut dokumentiert ist und sich sowohl unter Win als auch unter Unix perfekt an das aktuelle Fenstermanagement anpasst.
Hier ein einfaches Beispielfenster mit einem Button und einem event.
Hier ist das manual zu finden.
== Ein Programm starten ==
Man benötigt keine Libs oder oder Zusatzgems die man einbinden muss um das Programm auszuführen. Zuerst muss man die ShoesApp herunterladen.
Wenn man die App startet sollte man ein solches Fenster zu sehen bekommen:
[Blockierte Grafik: http://i.imgur.com/shw28.png]
Man wählt einfach "Open an App" und wählt die *.rb Datei mit der Shoes.app Methode aus ... und schon sieht man das Ergebnis.
== Motivation ==
Unser Projekt soll am Ende so aussehen :
[Blockierte Grafik: http://i.imgur.com/JovBQ.png]
Mit einem Klick auf den Button werden neue Zahlen generiert .... nicht mehr, nicht weniger. (Natürlich dürft Ihr das Programm erweitern )
Um dieses Ergebnis zu erhalten, werden wir grade einmal 40 Zeilen Code benötigen !
== Der Lottozahlengenerator ==
Als erstes werden wir die GUI erstellen und uns danach um die Programmlogik kümmern.
=== GUI ===
Der Code für das leere Fenster mit Größenbegrenzung sowie Titel sollte selbsterklärend sein.
Die draw-Methode zum zeichnen des Inhaltes kommt in unsere Lottoklasse.
Damit wir auch innerhalb unserer Lottoklasse auf das Shoesobjekt zugreifen können müssen wir die Instanz übergeben.
Wir übergeben einfach im Konstruktor die Instanz, welche wir in der Klasse in der Instanzvariable @shoes speichern.
Alles anzeigen
Die fertige draw-Methode sieht am Ende so aus:
Alles anzeigen
Die para-Methode (Paragraph) gibt einen String aus.
Die Methode generate_lotto_numbers werden wir nachfolgend implementieren. Diese Methode gibt ein eindimensionales Array zurück.
In Shoes hat man 2 Methode um die Ausgabe in und mit "Slots" (Container) zu formatieren. Die eine heisst flow, die andere stack.
Wie der Name schon verrät ist flow (fließen) für die horizontale Ausrichtung und stack (Stapel) für die Vertikale Ausrichtung zuständig.
Es ist keine Pflicht Slots zu benutzen, man kann die Elemente natürlich auch direkt in das Fenster setzen.
Mehr über Slots gibts es hier!
Unsere Zahlen sollen von links nach rechts "fließen".
[Blockierte Grafik: http://i.imgur.com/p2SP6.png]
Wir nutzen hier einfach flow als Block und geben das Array aus.
Hier wird nicht die each-Methode genutzt, da das letzte Element im Array die Zusatzzahl ist, welche mit dem Vermerk "Zusatzzahl" ausgegeben werden soll, daher der Umweg über die times-Methode.
(Wer noch nicht so viel oder garnicht mit Ruby gearbeitet hat, zur Info, alles ist ein Objekt, es gibt keine primitiven Datentypen. Somit ist auch die Zahl 6 ein Objekt auf die wir ganz einfach die Methode times anwenden können.)
Die Methode button gibt einfach einen Button mit dem angegebenen String aus. Der folgende Block beschreibt die Action des onclick-Events. Hier nutzen wir die clear-Methode um den Inhalt des Fensters zu löschen und rufen die draw Methode auf um alles , mit neuen Zahlen, neu zu zeichen.
Das ganze kann man auch anders schreiben.
Alle weiteren Elemente und Elementeigenschaften von Shoes findet man hier!
Wer die GUI schöner und bunter machen möchte guckt einfach im manual bei den styles und/oder bei den unterstützten colors.
=== Programmlogik ===
Zu guter letzt erstellen wir nur noch die generate_lotto_numbers-Methode, welche das Array mit den 6 Lottozahlen und der Zusatzzahl anlegt.
Alles anzeigen
Dazu speichern wir ein Array in der Variable Lotto und gehen mittels der map!-Methode, das Array durch und erstellen die Zufallszahlen.
Da auf einem Lottoschein jede Zahl nur einmal vorkommen darf, existiert innerhalb des map!-Blockes ein weiterer Block mit einer While-Schleife der solange eine Zufallszahl zwischen 1 und 49 sucht, wie die include?-Methode true zurückliefert, also die Zahl schon vorhanden ist.
Wenn dies nicht der Fall ist, dann wird die Zahl gespeichert.
Am Ende wird eine Zusatzzahl zwischen 1 und 9 generiert und mittels push an das Ende des Arrays angehängt.
Thats it !
Man hat auch die Möglichkeit mit Shoes, das Ergebnis in eine ausführbare Shoes,OSX,Windows oder Linux Datei zu "packen". Darauf wird hier nicht weiter eingegangen.
== Das fertige Programm ==
Alles anzeigen
Shoes ist ein Cross-Platform-Toolkit um grafische Oberflächen (GUIs) zu erstellen.
Das schöne an Shoes ist, das es sehr einfach zu erlernen, gut dokumentiert ist und sich sowohl unter Win als auch unter Unix perfekt an das aktuelle Fenstermanagement anpasst.
Hier ein einfaches Beispielfenster mit einem Button und einem event.
Hier ist das manual zu finden.
== Ein Programm starten ==
Man benötigt keine Libs oder oder Zusatzgems die man einbinden muss um das Programm auszuführen. Zuerst muss man die ShoesApp herunterladen.
Wenn man die App startet sollte man ein solches Fenster zu sehen bekommen:
[Blockierte Grafik: http://i.imgur.com/shw28.png]
Man wählt einfach "Open an App" und wählt die *.rb Datei mit der Shoes.app Methode aus ... und schon sieht man das Ergebnis.
== Motivation ==
Unser Projekt soll am Ende so aussehen :
[Blockierte Grafik: http://i.imgur.com/JovBQ.png]
Mit einem Klick auf den Button werden neue Zahlen generiert .... nicht mehr, nicht weniger. (Natürlich dürft Ihr das Programm erweitern )
Um dieses Ergebnis zu erhalten, werden wir grade einmal 40 Zeilen Code benötigen !
== Der Lottozahlengenerator ==
Als erstes werden wir die GUI erstellen und uns danach um die Programmlogik kümmern.
=== GUI ===
Der Code für das leere Fenster mit Größenbegrenzung sowie Titel sollte selbsterklärend sein.
Die draw-Methode zum zeichnen des Inhaltes kommt in unsere Lottoklasse.
Damit wir auch innerhalb unserer Lottoklasse auf das Shoesobjekt zugreifen können müssen wir die Instanz übergeben.
Wir übergeben einfach im Konstruktor die Instanz, welche wir in der Klasse in der Instanzvariable @shoes speichern.
Quellcode
Die fertige draw-Methode sieht am Ende so aus:
Quellcode
- def draw
- # Überschrift
- @shoes.para "Lottozahlengenerator"
- # Zahlen generieren (haben wir noch nicht implementiert)
- lr = generate_lotto_numbers
- # Ausgabe
- @shoes.flow do
- 6.times { |t| @shoes.para lr[t].to_s }
- @shoes.para "Zusatzzahl: " + lr[6].to_s
- end
- # Button
- @shoes.button "Lottozahlen generieren" do
- @shoes.clear
- draw
- end
- end
Die para-Methode (Paragraph) gibt einen String aus.
Die Methode generate_lotto_numbers werden wir nachfolgend implementieren. Diese Methode gibt ein eindimensionales Array zurück.
In Shoes hat man 2 Methode um die Ausgabe in und mit "Slots" (Container) zu formatieren. Die eine heisst flow, die andere stack.
Wie der Name schon verrät ist flow (fließen) für die horizontale Ausrichtung und stack (Stapel) für die Vertikale Ausrichtung zuständig.
Es ist keine Pflicht Slots zu benutzen, man kann die Elemente natürlich auch direkt in das Fenster setzen.
Mehr über Slots gibts es hier!
Unsere Zahlen sollen von links nach rechts "fließen".
[Blockierte Grafik: http://i.imgur.com/p2SP6.png]
Wir nutzen hier einfach flow als Block und geben das Array aus.
Hier wird nicht die each-Methode genutzt, da das letzte Element im Array die Zusatzzahl ist, welche mit dem Vermerk "Zusatzzahl" ausgegeben werden soll, daher der Umweg über die times-Methode.
(Wer noch nicht so viel oder garnicht mit Ruby gearbeitet hat, zur Info, alles ist ein Objekt, es gibt keine primitiven Datentypen. Somit ist auch die Zahl 6 ein Objekt auf die wir ganz einfach die Methode times anwenden können.)
Die Methode button gibt einfach einen Button mit dem angegebenen String aus. Der folgende Block beschreibt die Action des onclick-Events. Hier nutzen wir die clear-Methode um den Inhalt des Fensters zu löschen und rufen die draw Methode auf um alles , mit neuen Zahlen, neu zu zeichen.
Das ganze kann man auch anders schreiben.
Alle weiteren Elemente und Elementeigenschaften von Shoes findet man hier!
Wer die GUI schöner und bunter machen möchte guckt einfach im manual bei den styles und/oder bei den unterstützten colors.
=== Programmlogik ===
Zu guter letzt erstellen wir nur noch die generate_lotto_numbers-Methode, welche das Array mit den 6 Lottozahlen und der Zusatzzahl anlegt.
Quellcode
Dazu speichern wir ein Array in der Variable Lotto und gehen mittels der map!-Methode, das Array durch und erstellen die Zufallszahlen.
Da auf einem Lottoschein jede Zahl nur einmal vorkommen darf, existiert innerhalb des map!-Blockes ein weiterer Block mit einer While-Schleife der solange eine Zufallszahl zwischen 1 und 49 sucht, wie die include?-Methode true zurückliefert, also die Zahl schon vorhanden ist.
Wenn dies nicht der Fall ist, dann wird die Zahl gespeichert.
Am Ende wird eine Zusatzzahl zwischen 1 und 9 generiert und mittels push an das Ende des Arrays angehängt.
Thats it !
Man hat auch die Möglichkeit mit Shoes, das Ergebnis in eine ausführbare Shoes,OSX,Windows oder Linux Datei zu "packen". Darauf wird hier nicht weiter eingegangen.
== Das fertige Programm ==
Quellcode
- # Lottoklasse
- class Lottogenerator
- def initialize shoes
- @shoes = shoes
- draw
- end
- def generate_lotto_numbers
- lotto = Array.new(6)
- # 6 aus 49
- lotto.map! {|l|
- # Stichwort Mathematik, Stochastik > ungeordnet, ohne zurücklegen
- begin
- randLottoInt = ((rand * 49) + 1).to_i
- end while lotto.include?(randLottoInt)
- l = randLottoInt
- }
- # Zusatzzahl
- lotto.push(((rand * 9) + 1).to_i)
- end
- def draw
- # Überschrift
- @shoes.para "Lottozahlengenerator"
- # Zahlen generieren
- lr = generate_lotto_numbers
- # Ausgabe
- @shoes.flow do
- 6.times { |t| @shoes.para lr[t].to_s }
- @shoes.para "Zusatzzahl: " + lr[6].to_s
- end
- # Button
- @shoes.button "Lottozahlen generieren" do
- @shoes.clear
- draw
- end
- end
- end
- # GUI
- Shoes.app :title => "Lottogenerator", :height => 120, :width => 250 do
- Lottogenerator.new(self)
- end
9.342 mal gelesen