Files
MauMau-Server/Mau/Deck.cs
DTieman 3c2032a800
All checks were successful
Build Mau & Deploy Mau / build (push) Successful in 1m33s
Build Mau & Deploy Mau / deploy (push) Has been skipped
Added:
- Chat message cleaning to prevent HTML injection
- Player hand size to game state
- Deck automatically creates sets when it doesnt have any cards left
2024-04-21 16:27:58 +02:00

77 lines
1.7 KiB
C#

namespace MauMau_Server.Mau;
public class Deck
{
public List<Card> UnusedDeck = new();
public List<Card> UsedDeck = new();
public Deck()
{
CreateSet();
ShuffleDeck();
}
private void CreateSet()
{
foreach (CardType cardType in Enum.GetValues(typeof(CardType)))
{
if (cardType == CardType.JOKER)
{
UnusedDeck.Add(new Card(cardType, CardValue.RED));
UnusedDeck.Add(new Card(cardType, CardValue.BLACK));
continue;
}
foreach (CardValue cardValue in Enum.GetValues(typeof(CardValue)))
{
if (cardValue is CardValue.RED or CardValue.BLACK) continue;
UnusedDeck.Add(new Card(cardType, cardValue));
}
}
}
public List<Card> GetUnusedDeck()
{
return UnusedDeck;
}
public Card DrawCard()
{
if (UnusedDeck.Count == 0) ReshuffleDeck();
var card = UnusedDeck[0];
UnusedDeck.RemoveAt(0);
return card;
}
public List<Card> DrawCards(int amount)
{
var cards = new List<Card>();
for (var i = 0; i < amount; i++)
{
cards.Add(DrawCard());
}
return cards;
}
public void AddCardToUsedDeck(Card card)
{
UsedDeck.Add(card);
}
private void ReshuffleDeck()
{
UnusedDeck.AddRange(UsedDeck);
UsedDeck.Clear();
if (UnusedDeck.Count == 0)
{
CreateSet();
}
ShuffleDeck();
}
private void ShuffleDeck()
{
UnusedDeck = UnusedDeck.OrderBy(x => Guid.NewGuid()).ToList();
}
}