Creating a randomized card game from scratch is a pretty weighty task, so we divided it into several subtasks.
First of all, the names of the cards should be randomized. Preferably, these should be formatted in such a way that they resembled card names in other fantasy-themed card games, using similar vocabulary.
Secondly, the card art should be randomized. The game should generate an image for each card based on the card’s name, preferably using filters or overlays to modify some base image based on the combination of words in the card’s name. For instance, “fire bear” may look like a photograph of a bear with a flame overlay. This also means the game should have a graphic interface to display cards as they are played.
Finally, the effects of all cards should be randomized. This is the tough one. In order to implement random card effects, we needed to abstract common card abilities into discrete components and arrange them randomly. For instance, the effect “deal three damage to your opponent” can be abstracted into an effect type (dealing damage), a numerical value (three), a target (the opposing player), and a trigger (in this case, when the card is played). Splitting it up this way allows us to rearrange possible effects and triggers into numerous configurations that can be read by the computer and by a human fairly easily. These effects can be created on creatures, which also have a mana cost, attack stat, and health stat.