Beispielprojekt_Memory/TestProject/Controller/MainController.cs

67 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TestProject
{
class MainController
{
//Liste der Karten
List<Karte> 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<int> 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--;
}
}
}
}