Card deck
This class provides a flexible solution to generate and manipulate custom decks of cards that can be used to implement many different types of card games. It can add cards to a deck by adding card type rules that define identifiers to the type of cards and the number of card that will exist for each type. The class can also shuffle the cards in the deck and deal a given number of cards to each player.