using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TestProject { class MainController { //Liste der Karten List KartenListe = new(); //"View" MainWindow mainWindow; //Hierbei handelt es sich um einen Konstruktor. Dieser wird immer beim Erstellen der Klasse mit new aufgerufen. Dieser Konstruktor will zusätzlich als Übergabewert das MainWindow haben. public MainController(MainWindow mw) { //Setzen der "View", also des Hauptfensters mainWindow = mw; //Erstellen der Karten KartenListe = Karte.GenerateCardPairs(5); //Einfügen der Karten in die GUI mainWindow.InsertCardsIntoGui(KartenListe); } //Diese Methode behandelt die Aktion, wenn ein User auf ein gewisses Element klickt. Dabei benötigt die Methode die individuelle ID der Karte. public void ClickOnCard(int individualID) { //Zuerst suchen wir die Karte, zu der die ID gehört Karte k = KartenListe.Where(k => k.IndividualID == individualID).ToList().First(); //Dann ändern wir den Status ab k.IsChecked = !k.IsChecked; //Danach prüfen wir, ob Elemente rausgenommen werden müssen. testCards(); //Zum Schluss geben wir die neue Liste zur GUI, die diese dann aktualisiert mainWindow.InsertCardsIntoGui(KartenListe); } //Diese Methode überprüft, ob zwei gleiche Elemente ausgewählt sind und löscht diese dann aus der Liste. void testCards() { //Zuerst holen wir uns alle Elemente, die gecheckt (ausgewählt) sind. var checkedList = KartenListe.Where(k => k.IsChecked).ToList(); //In dieser Liste sollen dann alle PairIDs stehen, die rausgelöscht werden sollen List ints = new(); //Mit der geschachtelten foreach-Schleife vergleichen wir alle Elemente miteinander und merken uns, wo beide Pairs gleich gleich waren foreach (var element in checkedList) foreach(var item in checkedList) if(element.IndividualID != item.IndividualID && element.PairID == item.PairID) ints.Add(item.PairID); //Zum Schluss laufen wir durch alle Karten durch und löschen die jewiligen Pairs aus der Liste. for (int i = 0; i < KartenListe.Count; i++) if (ints.Contains(KartenListe[i].PairID)) { KartenListe.RemoveAt(i); i--; } } } }