namespace Memory.Logic { public class Game(IScoreHandler scoreHandler) { public const int DECKSIZE = 10; public const int GRIDSIZE = 5; public List Cards { get; } = CreateDeck(DECKSIZE); public IScoreHandler ScoreHandler { get; } = scoreHandler; private static List CreateDeck(int pairs) { List cards = []; for (int i = 1; i < pairs + 1; i++) { cards.Add(new(i)); cards.Add(new(i)); } Random random = new(); return [..cards.OrderBy(card => random.Next())]; } public Card? GetChoice1() { return Cards.FirstOrDefault(card => card.IsChoice1); } public Card? GetChoice2() { return Cards.FirstOrDefault(card => card.IsChoice2); } public bool IsFinished() { return Cards.All(card => card.Completed); } public void ClickCard(Card card) { Card? choice1 = GetChoice1(); Card? choice2 = GetChoice2(); if (!card.Completed) { if ((choice1 == null && choice2 == null) || (choice1 != null && choice2 != null)) { if (choice1 != null) { choice1.IsChoice1 = false; } if (choice2 != null) { choice2.IsChoice2 = false; } card.IsChoice1 = true; } else if (choice1 != null && choice2 == null && choice1 != card) { card.IsChoice2 = true; if (choice1.Matches(card)) { choice1.Completed = true; card.Completed = true; // handle score etc } } } } } }