I’ve been designing a bunch of Tarot-based games behind the scenes lately, and was looking for some resources to make sure the mechanics are well balanced.
So about a month ago, I went on Reddit and asked for some book recommendations about the underlying probabilities of card games.
One of the responses I found most helpful was from a user telling me to dive deeper into statistics and calculate them myself. I’m fairly comfortable with Excel and numbers, so… I did just that (and forgot about it until today)!
So I’ve created a Google Sheets document which includes probabilities for:
- Combinations of D6 (from 1 up to 6 dies)
- DnD Dice set
- Playing Cards (52 and 54 cards decks)
- Tarot Cards (Major Arcana, Minor Arcana, Combined)
All probabilities are presented as fractions and percentages, and I’ve also turned everything into bar charts for the visual learners amongst us.
Here’s a quick legend to help you understand everything:
- Specific Card: Drawing any single card in the whole deck.
- Specific Suit (Any Rank): Drawing any card in a suit, no matters its rank.
- Specific Rank (Any Suit): Drawing any card of a specific rank, no matter its suit.
- Any Numbered Cards: Drawing any numbered (non-face/court) card of any suit.
- Any Court Card: Drawing any court/face of any suit.
- Any Major Arcana: Drawing any Major Arcana card from the whole deck.
- Any Minor Arcana: Drawing any Minor Arcana card from the whole deck.
- Within Whole Deck/Within Specific Arcana: Whether the probability is calculated across the whole deck, or by using the Majors and Minors separately.
Also, here’s the Python script I’ve written to figure out the D6 combinations, so have fun with it if you want to double check my work, or if you’re a mad lad who uses more than 7 dice at once.
from collections import Counter
from itertools import product
def calculate_dice_probabilities(num_dice):
outcomes = list(product(range(1, 7), repeat=num_dice))
sum_counts = Counter(sum(outcome) for outcome in outcomes)
total_outcomes = len(outcomes)
probabilities = {s: (count, total_outcomes) for s, count in sorted(sum_counts.items())}
return probabilities, total_outcomes
def display_probability_table(num_dice):
probabilities, common_denominator = calculate_dice_probabilities(num_dice)
print(f"Sum\tProbability")
for sum_value, (count, total_outcomes) in probabilities.items():
print(f"{sum_value}\t{count}/{common_denominator}")
if __name__ == "__main__":
num_dice = int(input("Enter the number of d6 dice: "))
display_probability_table(num_dice)
I hope you guys find this document helpful for your divination practices, game development projects and other gaming-related endeavors.
Let me know if you have questions, notice any mistake, or would like to see the stats for other randomizing tools!
Nikodemus of Psykeon 🧙♂️🃏