This repository has been archived on 2025-11-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
StripJackNaked/PlayCardsLibrary/PlayingCards.cs

78 lines
2.2 KiB
C#

namespace PlayingCards
{
public enum Suit { Spades, Clubs, Diamonds, Hearts }
public enum PictureCard { Jack = 1, Queen, King, Ace }
public class Card
{
public string Value;
public Suit Suit;
public string NamedValue => Value + " of " + Suit;
public bool IsPicture => Enum.IsDefined(typeof(PictureCard), Value);
public bool IsNumber => !Enum.IsDefined(typeof(PictureCard), Value);
public bool IsBlack => (Enum.GetName(Suit) == "Spades" || Enum.GetName(Suit) == "Clubs");
public bool IsRed => (Enum.GetName(Suit) == "Diamonds" || Enum.GetName(Suit) == "Hearts");
}
public class Deck
{
public List<Card> Cards = new();
public Deck()
{
foreach (Suit suit in Enum.GetValues(typeof(Suit)))
{
// Add number cards
for (int i = 2; i <= 10; i++)
{
Cards.Add(new Card()
{
Value = i.ToString(),
Suit = suit
});
}
// Add picture cards
foreach (PictureCard pictureCard in Enum.GetValues(typeof(PictureCard)))
{
Cards.Add(new Card()
{
Value = Enum.GetName(pictureCard),
Suit = suit
});
}
}
Shuffle();
}
private static Random rng = new();
public void Shuffle()
{
Cards = Cards.OrderBy(a => rng.Next()).ToList();
}
}
public class Actions
{
public static bool MoveCard(List<Card> From, List<Card> To, Card card = null)
{
if (From.Count() == 0)
{
return false; // No cards available to move
}
if (card is null)
{
card = From.FirstOrDefault(); // FIFO
}
if (From.Contains(card) && !To.Contains(card))
{
To.Add(card);
From.Remove(card);
return true;
}
return false; // If we're here, something went bang
}
}
}