Ora cerco di implementare il gioco come suggerito.
Nel codice che ho postato, oltre alle funzioni preparaMazzo() e mescolaMazzo() che avevi già implementato, ho lasciato il main e la funzione partita() in modo che tu potessi capire il modo in cui ho pensato di impostare il programma. Per quanto riguarda le altre funzioni invece ho sostituito il codice con un commento che spiega lo scopo della funzione; ciò, insieme alla dichiarazione delle stesse funzioni, dovrebbe essere sufficiente per comprendere l'algoritmo che ho ideato.
Ovviamente non sei costretto a seguire questa linea, d'altronde uno stesso programma può essere sviluppato in diversi modi... lo scopo del codice fondamentalmente era quello di accelerare un po' il processo di indirizzamento verso la soluzione del problema. I problemi del tuo codice (tra cui ridondanza e poca chiarezza) secondo me derivano soprattutto dal fatto che non hai una visione d'insieme, nel senso che hai iniziato ad implementare qualche funzione, ma non hai ancora ben chiaro l'algoritmo complessivo.
Per esempio ho visto che hai aperto un topic in cui chiedi aiuto per l'implementazione della CPU; se il resto è già fatto e funzionante ok, nel caso contrario non sarebbe meglio prima soffermarsi sul resto limitandosi a selezionare una carta a caso dalla mano del PC (come ho anche suggerito nel commento inserito nel codice)?!
Fatta questa premessa, ti sei fatto un'idea di come dovrebbe funzionare il codice che ho postato e di come implementare le funzioni rimaste in sospeso? Hai capito lo scopo della struct gruppo? Hai notato che l'array che tu chiami "terra" può (nel caso in cui i giocatori sono solo 2) essere evitato?