[C#]Problem

02/16/2011 00:12 elementskate#1
Hi Liebe Epvpers User!

Ich habe folgendes Problem:

Ich möchte ein kleines Programm schreiben, dass für mich ein Memoryspiel ( Ihr wisst schon, immer 2 gleiche Bilder finden :D ) mit 24 Feldern löst. Und zwar läuft das so ab:

Das Programm deckt per Zufall Felder auf und speichert die Nummer des Bildes das darunter erscheint ( Das habe ich schon gelöst )
Und nun mein Problem:

Wie schaffe ich es, das mein Programm erkennt wenn er zwei gleiche Bilder entdeckt hat und auch weiß welche Bilder das waren? ( Um beide nachher aufzudecken )

Ich hoffe ihr versteht mein Problem und könnt mir helfen,

mfg elementskate
02/16/2011 00:22 Mamon110#2
Wenn ich richtig verstanden habe, hast du es so geschrieben das er die Nummern der Felder liest ? also z.b. Feld 2 : Bild 1 .
Oder hab ich das falsch verstanden ?
02/16/2011 00:28 elementskate#3
Ja genau

Was muss ich nun machen, dass es erkennt ob es 2 gleiche Bilder hat?
02/16/2011 00:57 Mamon110#4
Ich kenn mich da nicht so aus.. Also ich kenn die ganzen Codes nicht und soo..
Aber würder dir anraten erstmal zu schauen das der dann auch bei jedem selben bild die selben nummern hat, und das dann immer speichert.
Mehr kann ich dir nicht anraten. =)
02/16/2011 08:28 -AmA-#5
Ich würde sagen du machst das ganze in einem Array (2 dimensional versteht sich)...

Beispiel für ein Memory mit 12 Karten:

Code:
[U] |1|2|3|4[/U]
[U]1| | | | [/U]
[U]2| | | | [/U]
3| | | |
Sobald eine Zahl aufgedeckt ist, kommt in die Tabelle ein Wert.(Zb.True oder etwas anderes)

So kanst du ein Algorithmus der immer 2 neue Karten auswählt einbauen.

Sobald du Lust hast dich zu vertiefen, kannst du dein Algorithmus um eine Wahrscheinlichkeitsrechnung verfeinern

Mfg AmA
02/16/2011 15:14 elementskate#6
Könntest du mir vielleicht ein Codebeispiel geben?

Und ich weiß eigentlich immer noch nicht wie ich sie vergleichen soll!
02/16/2011 16:22 RealEmX#7
Ich würde die Objekte der Karten in Array packen. In's eine Feld kommt die ID der Karte, in's zweite eine ID des "Musters".

Bsp:
Code:
int[] arrCard1 = new int[2]{1, 255} //1 = ID der Karte; 255 = ID des Musters
int[] arrCard2 = new int[2]{2, 255} //selbes Muster wie die Karte mit ID 1
int[] arrCard3 = new int[2]{3, 477} //Anders Muster :P
// [....]
Und das Abfragen wirst wohl selbst hinbekommen :P

Du kannst natürlich auch alle Karten in ein verschachteltes Array oder Mehrdimensionales Array packen, je nachdem was dir besser liegt.



MfG
EmX
02/16/2011 16:29 elementskate#8
Danke, aber du wirst lachen, genau wegen dem Abfragen habe ich Probleme!
Das Speichern krieg ich schon selbst hin aber ich hab keine Ahnung wie ich überprüfe, ob es schon einen Wert gibt der das selbe "Muster" hat und dann die Nummer(n) der Karte(n) ausgibt, die das selbe Muster haben
02/16/2011 16:30 nkkk#9
man kann auch einfach alle karten in einer liste speichern:

Code:
    class MemoryPlayer 
    {
        List<Karte> bekannteKarten;
        List<Karte> AlleKarten;
        MemoryPlayer() 
        {
            this.bekannteKarten = new List<Karte>();
            //Alle Karten füllen(mit einer doppelten for schleife am besten)
        }
        //Gibt falls zu der karte ein gegenstüch exixstiert dias gegenstueck zurück, ansonsten null
        //auzsserdem fügt es die neue karte den bisher bekannten hinzu
        public Karte VerarbeteNeueKarte(Karte neue) 
        {
            Karte gegenstueck = null;
            try 
            {
                gegenstueck = bekannteKarten.First(karte => karte.MusterId == neue.MusterId );
            }
            catch(InvalidOperationException)
            {
                //Es existeirt kein gegenstueck
            }
            bekannteKarten.Add(neue);
            return gegenstueck;
        }
        //Ermittelt welche karte als nächstes aufgedeckt werden soll
        public Karte ErmitleNeueUnbekannte() 
        {
            return AlleKarten.First(karte => bekannteKarten.Count(bk => bk.posX == karte.posX && bk.posY == karte.posY) == 0);
        }
    }
    class Karte 
    {
        public int posX { get; set; }
        public int posY { get; set; }
        public int MusterId { get; set; }
    }
kann aber nicht dafür garantuieren das der code funktioniert hab ihn nicht getetstet. Bin mir aber ziemlich sicher das er funktioniert.
02/16/2011 16:43 elementskate#10
Ich habs jetzt selbst gelöst, mit einer Hashtable!

Hier mein Code:

Code:
 Hashtable table = new Hashtable();
            table.Add(99, 5); // 1. wert ist die Nummer des Musters, 2. Wert die des Bildes
            
            int erg =Convert.ToInt32(Console.ReadLine());
            int bildnummer = Convert.ToInt32(Console.ReadLine());
         
                

            int nElementCount = table.Count;
            bool bValueCont = table.ContainsValue(bildnummer);

            if (bValueCont == false)
            {

                bool bKeyCont = table.ContainsKey(erg);
                if (bKeyCont == true)
                {
                    object ergebniss = table[erg];

                    Console.WriteLine(ergebniss);// Wenn die Nummer des Musters schon vorhanden ist, zeigt er die Nummer des Bildes an das doppelt ist
                       

                    

                  


                }
                
            }
            else
            {
                Console.WriteLine("lol");
                table.Add(erg, bildnummer);
            }
            Console.ReadKey();

Trotzdem Danke für eure Ideen!

mfg elementskate