[C] Sette e mezzo

Shalud
Devo creare una simulazione di sette e mezzo tra due giocatori. Ora, mi sono creato un piccolo codice per stampare una carta random. Il problema è che non so implementarlo creando una funzione esterna al main e richiamandola nel main stesso



#include <stdio.h>
#include <stdlib.h>
typedef enum
{denari,bastoni,spade,coppe}Semi_nap;

struct carta
{
    int valore;
    Semi_nap seme;
};
typedef struct carta Carta;
Carta mazzo[40]={{1,denari},{2,denari},{3,denari},{4,denari},{5,denari},{6,denari},{7,denari},{8,denari},{9,denari},{10,denari},
    {1,bastoni},{2,bastoni},{3,bastoni},{4,bastoni},{5,bastoni},{6,bastoni},{7,bastoni},{8,bastoni},{9,bastoni},{10,bastoni},
    {1,spade},{2,spade},{3,spade},{4,spade},{5,spade},{6,spade},{7,spade},{8,spade},{9,spade},{10,spade},
    {1,coppe},{2,coppe},{3,coppe},{4,coppe},{5,coppe},{6,coppe},{7,coppe},{8,coppe},{9,coppe},{10,coppe}};



void main()
{           int i;
            char semi[][50]={"di denari","di bastoni","di spade","di coppe"};
            srand(time(NULL));
            i=rand()%39;

  printf("%d %s", mazzo[i].valore, semi[mazzo[i].seme]);



}

Risposte
Super Squirrel
Alcune osservazioni:

- qual è l'utilità dei typedef?
- manca la libreria time.h che definisce la funzione time;
- non so se in C "void main" è accettabile, ma da quello che so io (C++) il main deve ritornare un intero;
- cosa dovrebbe rappresentare quella matrice di char chiamata semi presente nel main?
- rand()%39 produce un numero compreso tra 0 e 38, ma gli indici dell'array mazzo vanno da 0 a 39.

Per quanto riguarda la tua richiesta dovresti prima spiegarci come intendi impostare il programma.


EDIT
Riguardo al punto 1 ho appena letto che a differenza del C++, nel C per dichiarare un'istanza di una struct precedentemente dichiarata bisogna utilizzare nuovamente la parola chiave struct. L'utilizzo del typedef ha quindi senso.
Riguardo al punto 4 ho capito l'espediente che hai utilizzato, anche se non mi sembra una soluzione molto elegante.

apatriarca
La logica con cui estrai le carte non va bene per il gioco che stai implementando. Scegliere una nuova carta a caso può infatti portare alla stessa carta estratta più volte, cosa che ovviamente non potrebbe succedere in un gioco reale in cui le carte sono estratte da un singolo mazzo. Il metodo quindi più semplice per implementare la logica di estrazione senza ripetizione è quella di simulare la presenza di un mazzo con un array di carte che viene mischiato all'inizio di ogni partita. A questo punto l'estrazione consiste semplicemente nella scelta della i-esima carta del mazzo. Per mischiare il mazzo puoi ad esempio usare l'algoritmo Fisher-Yates shuffle.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.