Put PlayingCardLibrary in separate project

This commit is contained in:
2022-08-12 17:04:10 +10:00
parent 25837857ca
commit 112127ee9d
5 changed files with 20 additions and 2 deletions

View File

@@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,77 @@
namespace PlayingCardsLibrary
{
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 static List<Card> Cards = new();
public static void Enumerate()
{
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
});
}
}
}
private static Random rng = new();
public static 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
}
}
}