Lotto : 6 aus 49
Ziel dieser Lektion soll es sein, eine Anwendung zu erstellten, die wie bei der Ziehung der Lottozahlen sechs Zufallszahlen auslost. Obwohl das im erste Moment recht einfach klingt, verbirgt diese Problemstellung einige Fallen und eignet sich daher bestens, um Ihre Kenntnisse in Objective-C zu erweitern.
Erzeugen Sie in Xcode ein neues Projekt vom Typ „Cocoa Application“ und nennen sie es „Lotto“. Erstellen Sie ebenfalls wieder eine neue Objective-C Klasse, die Sie „MyController“ nennen.
Fügen Sie nun der Headerdatei dieser Klasse sechs Outlets vom Typ NSTextfield hinzu. Die Textfelder werden benötigt, um die sechs Zufallszahlen im Programmfenster anzuzeigen. Nennen Sie die Outlets „zufall1“ bis „zufall6“.
Zusätzlich benötigen Sie noch eine Action, die Sie ebenfalls der Klasse hinzufügen müssen. Diese Action wird später bei jedem Anklicken eines Button neue Zufallszahlen errechnen. Nennen Sie diese Action „lottoSpielen“. Die Interfacedatei „MyController.h“ sollte anschließend so aussehen:
Ziel dieser Lektion soll es sein, eine Anwendung zu erstellten, die wie bei der Ziehung der Lottozahlen sechs Zufallszahlen auslost. Obwohl das im erste Moment recht einfach klingt, verbirgt diese Problemstellung einige Fallen und eignet sich daher bestens, um Ihre Kenntnisse in Objective-C zu erweitern.
Erzeugen Sie in Xcode ein neues Projekt vom Typ „Cocoa Application“ und nennen sie es „Lotto“. Erstellen Sie ebenfalls wieder eine neue Objective-C Klasse, die Sie „MyController“ nennen.
Fügen Sie nun der Headerdatei dieser Klasse sechs Outlets vom Typ NSTextfield hinzu. Die Textfelder werden benötigt, um die sechs Zufallszahlen im Programmfenster anzuzeigen. Nennen Sie die Outlets „zufall1“ bis „zufall6“.
Zusätzlich benötigen Sie noch eine Action, die Sie ebenfalls der Klasse hinzufügen müssen. Diese Action wird später bei jedem Anklicken eines Button neue Zufallszahlen errechnen. Nennen Sie diese Action „lottoSpielen“. Die Interfacedatei „MyController.h“ sollte anschließend so aussehen:
| #import
<Cocoa/Cocoa.h> @interface MyController : NSObject { IBOutlet NSTextField *zufall1; IBOutlet NSTextField *zufall2; IBOutlet NSTextField *zufall3; IBOutlet NSTextField *zufall4; IBOutlet NSTextField *zufall5; IBOutlet NSTextField *zufall6; } - (IBAction)lottoSpielen:(id)sender; @end |
Mit dem Zufall ist es in der Programmierung immer etwas schwierig, denn richtige Zufallszahlen können die wenigsten Computer erzeugen. Deshalb bedienen sie sich Tabellen oder Formeln, in denen schon Werte vorgegeben sind. Natürlich sind diese Tabellen extrem komplex und werden sehr kompliziert berechnet, trotzdem kann es passieren, das eine Anwendung nach dem Start immer die gleiche Zahlenfolge ausgibt. Diese Zahlen würden dann willkürlich erscheinen, wären aber trotzdem vorhersagbar. Diese Verhalten gilt es zu verhindern.
Der einfachste Weg den Zufallszahlengenerator zu beeinflussen ist es, an einer beliebigen Stelle der Zahlentabelle zu beginnen. Dieser Wert, Seed (zu deutsch „Saat“), bestimmt den Startpunkt in der Zahlentabelle. Der Seed-Wert in Verbindung mit der aktuellen Uhrzeit (die sich ja ständig ändert) ermöglicht es, Zahlenreihen zu erzeugen, die einem Menschen wie zufällig vorkommen. Die einfachste Möglichkeit den Zufallszahlen-Generator mit einem Seed-Wert neu zu initialisieren, ist beim Programmstart. Erweitern Sie „MyController.m“ um die schon bekannte awakeFromNib-Methode.
Der einfachste Weg den Zufallszahlengenerator zu beeinflussen ist es, an einer beliebigen Stelle der Zahlentabelle zu beginnen. Dieser Wert, Seed (zu deutsch „Saat“), bestimmt den Startpunkt in der Zahlentabelle. Der Seed-Wert in Verbindung mit der aktuellen Uhrzeit (die sich ja ständig ändert) ermöglicht es, Zahlenreihen zu erzeugen, die einem Menschen wie zufällig vorkommen. Die einfachste Möglichkeit den Zufallszahlen-Generator mit einem Seed-Wert neu zu initialisieren, ist beim Programmstart. Erweitern Sie „MyController.m“ um die schon bekannte awakeFromNib-Methode.
| -(void)
awakeFromNib { srandom(time(NULL)); } |
Jetzt müssen Sie nur noch die lottoSpielen-Methode implementieren, um sechs Zufallszahlen zu generieren.
| -
(IBAction)lottoSpielen:(id)sender { int z; z = (random() % 49) +1; [zufall1 setIntValue:z]; z = (random() % 49) +1; [zufall2 setIntValue:z]; z = (random() % 49) +1; [zufall3 setIntValue:z]; z = (random() % 49) +1; [zufall4 setIntValue:z]; z = (random() % 49) +1; [zufall5 setIntValue:z]; z = (random() % 49) +1; [zufall6 setIntValue:z]; } |
Öffnen Sie anschließend den Intreface Builder und entwerfen Sie ein Programmfenster, das den Outlet und Action der Controllerklasse entspricht. Alles, was Sie brauchen, sind sechs NSTextField und einen NSButton.

Als nächstes benötigt der Interface Builder eine Klasseninstanz, aber das sollte für Sie kein Problem mehr darstellen. Ziehen Sie ein NSObject aus der Steuerelementpalette und setzten Sie die Klassenidentität mit dem Inspector auf „MyController“. Dass diese Instanz daraufhin mit zwei Worten „My Controller“ bezeichnet wird, liegt nur an der Darstellung des Interface Builder und ist kein Grund zur Sorge.

Nachdem Sie auch die nötigen Verbindung zwischen Outlet, Action und den Steuerelementen gezeichnet haben, können Sie die Anwendung testen. Sie wird wie programmiert funktionieren, allerdings kann es passieren, dass manche Zahlen doppelt ausgespielt werden, da alle Zufallszahlen unabhängig voneinander sind.
