예제 #1
0
        //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);
        }
예제 #2
0
        //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;
            }
        }