68 lines
1.9 KiB
C#
68 lines
1.9 KiB
C#
namespace Memory.Logic
|
|
{
|
|
public class Game
|
|
{
|
|
public const int DECKSIZE = 10;
|
|
public const int GRIDSIZE = 5;
|
|
public List<Card> Cards { get; } = CreateDeck(DECKSIZE);
|
|
|
|
private static List<Card> CreateDeck(int pairs)
|
|
{
|
|
List<Card> 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
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|