Intro
A friend of mine is trying to create a real time card game where players try to match images on cards in their hand to another card that is in play.
Example: Player 1 plays a card with images {a, b, c}. Another player could play a card with any of a, b, or c on it. That is {a, d, e}, {b, d, e}, {c, d, e} all match at exactly one of the images on the card in play ({a, b, c}).
We're trying to understand how to setup this game such that:
1) Each card with N images is guaranteed to match at least N other cards (no orphaned images).
Example: the card {a, b, c} would match at least 3 other cards. One for each of a, b, and c.
2) No two cards match in more than one way. Example {a, b, c} and {a, b, d} cannot exist in the deck as both {a, b} match these two cards. At most one image should match (just {a}, just {b}, or just {c}).
3) In reality we'd like to have 8 images per card and have a deck of at least 50 cards. So instead of cards that look like {a, b, c}, we'd really have cards with 8 images and they'd look something like {a, b, c, d, e, f, g, h}.
Question
1) How many images will we need to create to support this scheme?
I've looked into building the deck as a collection of fully connected graphs which would ensure that each images on every card is "connected" to another unique card, but the number images needed grows quite quickly.
Example: To get a set of cards with 8 images on it, I see 9 vertices (cards) in a fully connected graph which requires no less than 36 images (just for 9 cards!). This is K9 in the fully connected graph link.
2) Is there some type of pseudocode or algorithm to help us build this out programatically? Ideally we'd like to adjust it so that we can affect the probability of matches.
Example: In the fully connected graph scheme, each card matches every other card (which means you can always just play whatever is in your hand). We'd ideally like a scheme where every card matches something like 1/3 or 1/4 of the deck's card population so that there's some degree of skill involved. It would be nice if the algorithm/pseudocode allowed us to affect the probability of cards matching.
Can someone help me understand this problem from at math perspective?
Thanks in advance!