Bauen mit Microsoft - Das zweite Spiel

Ziel dieser Anleitung ist die Entwicklung eines kleinen Konzentrationsspiels, bei dem eine Tonfolge generiert wird, welche es sich zu merken gilt. Ein Benutzer kann dann diese Tonfolge, welche auch visualisiert dargestellt wird, über Buttons eingeben. Gibt er die richtige Folge ein, erscheint eine Erfolgsmeldung, bei einem Fehler erscheint eine entsprechende Meldung. Der Schwierigkeitsgrad ist frei wählbar und resultiert in unterschiedlicher Länge der Tonfolgen.

Nachdem Sie die Microsoft Visual C# Express Edition installiert haben, starten Sie das Programm über den erstellten Startmenüeintrag. Wählen Sie als Tastaturlayout (oder wie immer das genau heißt) C# Entwickler.

Schritt 1: Am Anfang war das Fenster…

Legen Sie ein neues Projekt über „File->New Project->Windows Application“ an und geben Sie als „Solution Name“ „Meine erste Projektmappe“ sowie als „Name“ „Konzentrationsspiel“ ein.

Legen Sie ein neues Projekt über „File->New Project->Windows Application“ an

Auf der rechten Seite sehen Sie Ihre Projektmappe, welche das Projekt „Ratespiel“ enthält und ein Eigenschaftenfenster, welches die Eigenschaften des aktuell ausgewählten Objektes anzeigt.

Auf der linken Seite sehen Sie die Toolbox, welche alle nötigen Steuerelemente enthält, die Sie in Ihr Ratespiel einbinden können. In der Mitte des Bildschirms ist Ihre Form, also das Hauptfenster Ihrer Anwendung, dargestellt.

Schritt 2: Der Arbeiter

Ziehen Sie nun einen Button aus der Toolbox auf Ihre Form. Wenn Sie den Button markiert haben (der Button hat den Fokus), sehen Sie dessen Eigenschaften unten rechts im Eigenschaftenfenster. Ändern Sie die Eigenschaft „Text“, welche mit „button1“ vorbelegt ist, indem Sie den Text „button1“ löschen; in diesem Fall soll kein Text auf dem Button angezeigt werden. Ändern Sie zudem die BackColor-Eigenschaft auf eine Farbe Ihrer Wahl. Den in diesem Absatz beschriebenen Vorgang wiederholen Sie nun noch 3 Mal, so dass Sie ingesamt 4 Buttons mit unterschiedlichen Farben (nicht schwarz) sehen.

Ziehen Sie nun zwei weitere Buttons auf die Form. Ändern Sie den Text auf „Neue Tonfolge“ bzw. „Spiele Tonfolge“ und passen Sie die Größe der Buttons an, so dass der gesamte Text sichtbar wird. Nachfolgend ziehen Sie eine Textbox neben den Button mit der Aufschrift „Neue Tonfolge“ und tragen Sie als Text die Zahl „5“ ein.

Doppelklicken Sie nun auf den Button „Neue Tonfolge“ und fügen Sie den folgenden Quelltext ein:


int number = 0;
try
{
number = int.Parse(textBox1.Text.ToString());
}
catch (Exception)
{
MessageBox.Show("Bitte geben Sie eine ganze Zahl ein!");
}
buttonOrder = new List<int>();
for (int i = 0; i < number; i++)
{
buttonOrder.Add(randomizer.Next(0, buttonFrequencyDict.Count));
}
userOrder.Clear();

Klicken Sie auf die Abbildung um den Code zu erhalten!

Die oben stehenden Zeilen lesen den Inhalt der Textbox aus und verwandeln diesen, wenn möglich, in eine Zahl. Anschließend wird eine Reihe von Zufallszahlen generiert, die dann in eine Liste gespeichert werden. Die hier benutzte Liste (buttonOrder) muss noch erzeugt werden, was wir in einem nächsten Schritt tun.

Wenn Sie nun im Quelltext nach oben scrollen, sehen Sie den Konstruktor Ihrer Form (public Form1()). Fügen Sie oberhalb dieser Zeile den folgenden Quelltext ein:


List<int> buttonOrder;
Dictionary<Button, int> buttonFrequencyDict;
Dictionary<int, Button> buttonNumberButtonDict;
Dictionary<Button, int> buttonButtonNumberDict;
Random randomizer;
List<int> userOrder;

Klicken Sie auf die Abbildung um den Code zu erhalten!

Mit obigen Zeilen haben Sie die benötigte Liste (buttonOrder), eine weitere Liste (userOrder), den benötigten Zufallsgenerator (randomizer) und 3 so genannte „Dictionaries“ erzeugt, deren Verwendung später von Bedeutung sein wird.

Schauen Sie sich nun den Konstruktor an. Dieser enthält die Zeile InitializeComponent();

Fügen Sie direkt unter dieser Zeile den folgenden Quelltext ein:


userOrder = new List<int>();
buttonOrder = new List<int>();
buttonFrequencyDict = new Dictionary<Button, int>();
buttonNumberButtonDict = new Dictionary<int, Button>();
buttonButtonNumberDict = new Dictionary<Button, int>();
randomizer = new Random();
int i = 0;

Button button=new Button();
foreach (Control o in this.Controls)
{
try
{
button = (Button)o;
}
catch (Exception)
{
//do nothing
}
if (button.Text.Length < 1)

Klicken Sie auf die Abbildung um den Code zu erhalten!


{
buttonFrequencyDict.Add(button, 440 + i * 20);
buttonNumberButtonDict.Add(i, button);
buttonButtonNumberDict.Add(button, i);
i++;
}
}

Klicken Sie auf die Abbildung um den Code zu erhalten!

In den eingefügten Zeilen werden die Listen, der Zufallsgenerator und die Dictionaries initialisiert.

Wechseln Sie nun wieder in die Designansicht, so dass Sie Ihre Form sehen. Doppelklicken Sie auf den Button „Spiele Tonfolge“ und fügen Sie den folgenden Quelltext ein:


for (int i = 0; i < buttonOrder.Count; i++)
{
buttonNumberButtonDict[buttonOrder[i]].Text = "Beep";
this.Refresh();
Console.Beep(buttonFrequencyDict[buttonNumberButtonDict[buttonOrder[i]]
], 500); buttonNumberButtonDict[buttonOrder[i]].Text = "";
this.Refresh();
}
userOrder.Clear();

Klicken Sie auf die Abbildung um den Code zu erhalten!

Obiger Quelltext spielt die Tonfolge, welche generiert wurde, wenn auf „Neue Tonfolge“ geklickt wurde und zeigt zudem das Wort „Beep“ auf dem Button, welcher dem jeweiligen Ton zugeordnet ist.

Abschließend doppelklicken Sie in der Designansicht auf jeden der farblichen Buttons und fügen Sie jeweils die nachfolgenden Zeilen ein:


Console.Beep(buttonFrequencyDict[(Button)sender], 500);
validate(sender);

Klicken Sie auf die Abbildung um den Code zu erhalten!

Die Methode validate() ist noch nicht implementiert, also holen wir dies nach. Suchen Sie sich eine Stelle im Quelltext, an der Sie die Methode einfügen möchten. Ihr Quelltext endet mit drei schließenden geschweiften Klammern. Sie können die Methode zwischen der ersten und zweiten geschweiften Klammer einfügen:


private void validate(object sender)
{
userOrder.Add(buttonButtonNumberDict[(Button)sender]);
if (userOrder.Count == buttonOrder.Count)
{
bool correct = true;
for (int i = 0; i < userOrder.Count; i++)
{
if (userOrder[i] != buttonOrder[i])
{
correct = false;
break;
}
}
if(correct)
MessageBox.Show("Herzlichen Glückwunsch!");
else
MessageBox.Show("Leider verloren!");
userOrder.Clear();
}
}

Klicken Sie auf die Abbildung um den Code zu erhalten!

Speichern Sie nun Ihr Projekt und starten Sie es. Das Ergebnis sieht nun folgendermaßen aus:

Das Ergebnis

Sie können das Spiel nun um verschiedene Features erweitern. Sie können z.B. eine automatische Erhöhung des Schwierigkeitsgrades implementieren oder die Abspielzeit der Töne für den Benutzer einstellbar machen. Viel Spaß beim Programmieren!