IMHO for this kind of game the best approach is the "event and query"(TM) (the name was just invented ) so that cards are event guided and can query the system to know what they can do.
(i'm referring to magic too )

So let's say that a card X have "add +1/+1 when a red card is played", you should add a "hook" on the event relative to card playing, and in that event handler control if the card is red and do the powering up.

So the game goes:
- Player A play a card.
- The system ask to the cards "anyone cares if player A plays that card?" (by looking on the relative event table)
- The card X says "i care!" (by adding herself to the event table when it was played) and so the "add +1/+1" is triggered.

You can have all possible event. Card drawing, Card discarding, playing, creature dying, creature taking damages, life point losing, etc etc. The more events you prepare, the more card you can handle in your model (and the more code you will write, but not that much if you plan things well)

The same thing for each possible action.

Instead, when a creature X attack and player B uses it's creature Y to defend, Y ask X (with a query system) if he can block it. Y can reply with a standard answare (where you could handle things like flying, etc) or with a custom answare (that probably reduces to an overriden method, but that depends on how you implement things).

You can have lots of possibilities: quering a creature if it can attack, if it can take damage, if it can be played, ecc ecc, and the same for spells or whatever your game uses.

You should try to think about all possible cases and try to figure out a model that handles all.
I suggest to list some various cards (50 or 100 for example) and try and see if you can handle all them.

BTW DoomTrooper is the same as Mutant Chronicles ?