[C] Sette e mezzo

Messaggioda Shalud » 07/02/2018, 18:38

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



Codice:
#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]);



}
Shalud
Starting Member
Starting Member
 
Messaggio: 1 di 2
Iscritto il: 07/02/2018, 18:11

Re: [C] Sette e mezzo

Messaggioda Super Squirrel » 07/02/2018, 20:46

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.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 160 di 1486
Iscritto il: 16/05/2013, 22:05

Re: [C] Sette e mezzo

Messaggioda apatriarca » 10/02/2018, 15:47

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.
apatriarca
Moderatore
Moderatore
 
Messaggio: 4955 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite