//der Konstruktor public MemoryFeld(UniformGrid feld) { //zum Zählen für die Bilder int count = 0; //das Array für die Karten erstellen, insgesamt 42 Stück karten = new MemoryKarte[42]; //für das Paar paar = new MemoryKarte[2]; //für das Gedächtnis //es speichert für jede Karte paarweise die Position im Spielfeld gemerkteKarten = new int[2, 21]; //für das Mischen der Karten Random zufallszahl = new Random(); //keiner hat zu Beginn einen Punkt menschPunkte = 0; computerPunkte = 0; //es ist keine Karte umgedreht umgedrehteKarten = 0; //der Mensch fängt an spieler = 0; //die Spielstärke setzen spielstaerke = 10; //das Spielfeld setzen this.feld = feld; //es gibt keine gemerkten Karten for (int aussen = 0; aussen < 2; aussen++) { for (int innen = 0; innen < 21; innen++) { gemerkteKarten[aussen, innen] = -1; } } //das eigentliche Spielfeld erstellen for (int i = 0; i <= 41; i++) { //eine neue Karte erzeugen karten[i] = new MemoryKarte(bilder[count], count, this); //bei jeder zweiten Karte kommt auch ein neues Bild if ((i + 1) % 2 == 0) { count++; } } //die Karten mischen for (int i = 0; i <= 41; i++) { int temp1; MemoryKarte temp2; //eine zufällige Zahl im Bereich 0 bis 41 erzeugen temp1 = zufallszahl.Next(42); //den alten Wert in Sicherheit bringen temp2 = karten[temp1]; //die Werte tauschen karten[temp1] = karten[i]; karten[i] = temp2; } //die Karten ins Spielfeld bringen for (int i = 0; i <= 41; i++) { //die Position der Karte setzen karten[i].SetBildPos(i); //die Karte hinzufügen feld.Children.Add(karten[i]); } //die Labels für die Punkte Label mensch = new Label(); mensch.Content = "Mensch"; feld.Children.Add(mensch); menschPunkteLabel = new Label(); menschPunkteLabel.Content = 0; feld.Children.Add(menschPunkteLabel); Label computer = new Label(); computer.Content = "Computer"; feld.Children.Add(computer); computerPunkteLabel = new Label(); computerPunkteLabel.Content = 0; feld.Children.Add(computerPunkteLabel); //Button für Schummel btnSchummel = new Button(); btnSchummel.Content = "Schummel"; btnSchummel.IsEnabled = true; btnSchummel.Click += new RoutedEventHandler(btnSchummel_Click); feld.Children.Add(btnSchummel); //den Timer erzeugen //er wird alle zwei Sekunden ausgelöst timer = new System.Windows.Threading.DispatcherTimer(); timer.Interval = TimeSpan.FromMilliseconds(2000); timer.Tick += new EventHandler(timer_Tick); }
//die Methode übernimmt die wesentliche Steuerung des Spiels //Sie wird beim Anklicken einer Karte ausgeführt public void KarteOeffnen(MemoryKarte karte) { //zum Zwischenspeichern der ID und der Position int kartenID, kartenPos; //die Karten zwischenspeichern paar[umgedrehteKarten] = karte; //die ID und die Position beschaffen kartenID = karte.GetBildID(); kartenPos = karte.GetBildPos(); //die Karte in das Gedächtnis des Computers eintragen, //aber nur dann, wenn es noch keinen Eintrag an der //entsprechenden Stelle gibt if ((gemerkteKarten[0, kartenID] == -1)) { gemerkteKarten[0, kartenID] = kartenPos; } else //wenn es schon einen Eintrag gibt und der nicht mit //der aktuellen Position übereinstimmt, dann haben wir //die zweite Karte gefunden //Sie wird in die zweite Dimension eingetragen if (gemerkteKarten[0, kartenID] != kartenPos) { gemerkteKarten[1, kartenID] = kartenPos; } //umgedrehte Karten erhöhen umgedrehteKarten++; //sind 2 Karten umgedreht worden? if (umgedrehteKarten == 2) { //dann prüfen wir, ob es ein Paar ist paarPruefen(kartenID); //den Timer zum Umdrehen der Karten starten timer.Start(); } //haben wir zusammen 21 Paare, dann ist das Spiel vorbei if (computerPunkte + menschPunkte == 21) { //Der Name des Gewinners string name; //Wie viele Paare der Gewinner gezogen hat int punkte; //Punkte vergleich if (menschPunkte > computerPunkte) { name = "Mensch"; punkte = menschPunkte; } else { name = "Computer"; punkte = computerPunkte; } //den Timer anhalten timer.Stop(); MessageBox.Show("Das Spiel ist vorbei." + "\nDer Gewinner ist " + name + ".\nDer " + name + " hat " + punkte + " Paare gezogen.", "Ende", MessageBoxButton.OK, MessageBoxImage.Information); //Anwendung herunterfahren Application.Current.Shutdown(); } //Wenn umgedrehte Karte ist 1, dann schalten wir Button Schummel aus if (umgedrehteKarten == 1) { btnSchummel.IsEnabled = false; } }