The array route probably ends up with less work, if your smart enough to organize the card states (in-deck, in-hand, in-play)
The family route seems more simple to understand, grouping each card/sprite into families (FamilyA=PlayerA's Deck; FamilyB=PlayerB's Deck). Each card/sprite would also have their own private variable that changes from 'in-deck' to 'in-hand' to 'in-play', and back to 'in-hand' sometimes, which can be controlled with the FSM, correct?