Programmieren mit Swift - Für macOS und iOS
Programmieren mit Swift - Für macOS und iOS
Die Lottozahlen : 6 aus 49

Ziel dieser Lektion soll es sein, eine Anwendung zu erstellten, die wie bei der Ziehung der Lottozahlen, sechs unterschiedliche 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“ mit dem einfachen Namen „Lotto“. Neben der grafischen Oberfläche, der MainMenu.xib, wird die Entwicklungsumgebung mit AppDelegate eine Klasse anlegen, die als Controller für die Anwendung verwendet werden kann. Dort geht es dann auch sofort weiter.
Erweitern Sie der Datei AppDelegate.m um ein privates Interface mit sechs IBOutlet vom Typ NSTextfield. Diese Eigenschaften werden benötigt, um später die Zufallszahlen in sechs verschiedenen Textfeldern im Programmfenster anzuzeigen. Nennen Sie die Outlets „zufall1“ bis „zufall6“.
Des weiteren benötigt der Controller eine IBAction-Methode, welche Sie ebenfalls in der Datei einfügen müssen. Mit Hilfe der Action soll bei jedem Anklicken einer Schaltfläche eine neue Zufallszahlen errechnen werden. Nennen Sie diese IBAction „lottoSpielen“. Die Implementierungsdatei AppDelegate.m sollte anschließend so aussehen:
#import "AppDelegate.h"

@interface AppDelegate ()

@property (weak) IBOutlet NSTextField *zufall1;
@property (weak) IBOutlet NSTextField *zufall2;
@property (weak) IBOutlet NSTextField *zufall3;
@property (weak) IBOutlet NSTextField *zufall4;
@property (weak) IBOutlet NSTextField *zufall5;
@property (weak) IBOutlet NSTextField *zufall6;

@end

@implementation AppDelegate

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

}

- (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. Zwar haben viele Programmiersprachen einen Zufallszahlengenerator, diese bedienen sich aber nicht selten umfangreichen 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, dass eine Anwendung nach dem Start immer die gleiche Zahlenfolge ausgibt. Diese Zahlen würden dann willkürlich erscheinen, wären aber trotzdem vorhersagbar. Dieses 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 daher in der „AppDelegate.m“ die applicationDidFinishLaunching:-Methode wie im folgenden Listing zu sehen.
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    srandom((int)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;
    self.zufall1.intValue = z;

    z = (random() % 49) +1;
    self.zufall2.intValue = z;

    z = (random() % 49) +1;
    self.zufall3.intValue = z;

    z = (random() % 49) +1;
    self.zufall4.intValue = z;

    z = (random() % 49) +1;
    self.zufall5.intValue = z;

    z = (random() % 49) +1;
    self.zufall6.intValue = z;
}
Öffnen Sie anschließend den Interface Builder durch Auswahl der MainMeni.xib und entwerfen Sie ein Programmfenster, das den IBOutlet und der IBAction der Controllerklasse entspricht. Alles, was Sie brauchen, sind sechs NSTextField und einen NSButton.
stacks_image_13F09ACA-EFD8-40AB-926B-DB36B3F725F8
Sind die Steuerelemente platziert, wählen Sie das AppDelegate-Objekt aus der Seitenleisten des Interface Builders und öffnen Sie anschließend in den Inspector in die Connections-Ansicht. Hier finden Sie alle „Anschlüsse“, die zuvor in der Implementierung der Controllerklasse deklariert wurde. Sie müssen jetzt nur noch mit den Objekten auf der grafischen Oberfläche verbunden werden. Klicken Sie in die kleinen Kreise neben die Bezeichner und ziehen Sie von dort Verbindungslinien der Outlets zufall1 bis zufall6 auf die verschiedenen Textfelder und von der Action lottoSpielen auf die Schaltfläche.
stacks_image_9141C1EF-5CDD-4618-95D8-F8B55E9CDFA0
Jetzt können Sie Ihre Anwendung testen. Sie wird wie programmiert funktionieren, aber leider kann es passieren, dass manche Zahlen doppelt ausgespielt werden. Die Zahlen sind zwar zufällig, aber auch von einander unabhängig. Das ist bei einem richtigen Lottospiel anders.

nächste Seite