public Dictionary <CardGroup, List <Card> > RandomlyAssignCardsToGroups() { Dictionary <CardGroup, List <Card> > groupsOfCards = new Dictionary <CardGroup, List <Card> >(); CardGroup[] groups = isOpponent ? CardGroup.OpponentGroups() : CardGroup.PlayerGroups(); List <Card> copyOfCardsInHand = cardsInHand.ToList(); foreach (CardGroup group in groups) { groupsOfCards.Add(group, new List <Card>()); List <Card> cardsNotWizard = copyOfCardsInHand.Where(card => !card.cardData.IsWizard).ToList(); Card randomCard = cardsNotWizard[Random.Range(0, cardsNotWizard.Count)]; groupsOfCards[group].Add(randomCard); copyOfCardsInHand.Remove(randomCard); } foreach (Card card in copyOfCardsInHand) { CardGroup randomGroup; do { randomGroup = groups[Random.Range(0, groups.Length)]; } while (!CardGroup.IsValidForGroup(groupsOfCards[randomGroup], card).Item1); groupsOfCards[randomGroup].Add(card); } return(groupsOfCards); }