POKER TEXAS HOLDEM GIOCO IN 'C'

di il
4 risposte

POKER TEXAS HOLDEM GIOCO IN 'C'

[quote][code][quote][code][quote][b][b][b][b]CIao...
E' da poco che studio il linguaggio 'C' da autodidatta
Sto cercando ricreare il poker texano, con tanto di chips, rilanci e tutto cio' che il gioco comprende.
Voglio metterci un massimo di 10 giocatori di cui 9 utilizzati dal computer.
All inizio non mi sembrava cosi complicato...mah  invece f11 !. f30  f33  f27 .
Non ho realizzato una funzione che mischia il mazzo, ma con una matrice [4][13], ho defenito
le righe come seme, e le colonne come valore delle carte da 1....13 ossia da A-K
Ma mano che pesca le carte a caso le celle dalla matrice vengono segnate con -1, per ricordarmi che la carta è stata già pescata.
A questo punto, non so come memorizzare le due carte di ogni giocatore...
Un idea che mi è venuta è questa, però poi avrei un infinità di variabili, e non sono manco sicuro che poi funzioni.
Ad esempio se il giocatore1  ha  A.cuori e K.quadri, ho pensato di creare 4 variabili per il giocatore1.
1 variabile per il seme   della prima carta (CUORI, PICCHE,FIORI,QUADRI)
1 variabile per il valore della prima carta (A,2,3,4,5,6,7,8,9,T,J,Q,K)
1 variabile per il seme   della seconda carta (CUORI, PICCHE,FIORI,QUADRI)
1 variabile per il valore della seconda carta (A,2,3,4,5,6,7,8,9,T,J,Q,K)

non so se sia giusto...anche a spiegarlo qui mi risulta compicato.

Ringrazio per qualsiasi risposta utile.
Ciao Alessandro

4 Risposte

  • Re: POKER TEXAS HOLDEM GIOCO IN 'C'

    Ciao,
    la prima idea che mi viene è questa: crei una struct per rappresentare le carte, ad esempio
    
    typedef struct
    {
        int seme;        /* io metto int ma puo' essere qualche altra cosa */
        int valore;
    } Carta;
    
    Poi crei un'altra struct per rappresentare un giocatore, ad esempio
    
    typedef struct
    {
        int posizione_al_tavolo;
        Carta carta_1;
        Carta carta_2;
    } Giocatore;
    
    A questo punto, il mazzo non è altro che un array di "oggetti" Carta, mentre il tavolo non è altro che un array di "oggetti" Giocatore. Altrimenti puoi modellare ancora meglio il tavolo, ad esempio facendo
    
    typedef struct
    {
        Giocatore giocatori[MAX_GIOCATORI]
        /* o anche Giocatore *giocatori e poi lo allochi tu */
        int puntata_minima;
        int rilancio_massimo;
        ...
    } Tavolo;
    
  • Re: POKER TEXAS HOLDEM GIOCO IN 'C'

    Forse sto chiedendo troppo a me stesso ...per ora!
    visto che non ho finito di studiarmi tutto il linguaggio 'C'
    Cmq non ho ben capito cos'è una struct, ho dato una lettura veloce, ma dovrei approfondire...

    L'idea che mi sono fatto è che una struct è un altro contenitore che contiene più variabili insieme...forse sto dicendo una caxxata... non lo so non voglio osare oltre.

    Però mi hai fatto venire altre idee.

    cmq sia per il seme che per il valore della carta uso una variabile CHAR, mentre la matrice è un vettore d 'interi... dato che con il codice ASCI posso rappresentare proprio i semi cuori quadri picche e fiori.
    #include <stdio.h>
    #include <stdlib.h>
    #define R 4 /*riga*/
    #define C 13/*colonna*/
    
    /**PROTOTYPE**/
    char valore_carta_figurativo(int cf); /*A-2-3...J-Q-K*/
    char seme_carta(int s); /*CUORI, FIORI,PICCHE QUADRI*/
    
    /**//**//**//**/
    
    
    int main()
    {
        int mazzo[R][C]={1,2,3,4,5,6,7,8,9,10,11,12,13,
                         1,2,3,4,5,6,7,8,9,10,11,12,13,
                         1,2,3,4,5,6,7,8,9,10,11,12,13,
                         1,2,3,4,5,6,7,8,9,10,11,12,13,};
        char seme, carta;
    
        int x,y,i;
        int hole_card=2;    /* CARTE UTENTE MAX 2*/
        srand(time(NULL));
    
    /**CARTE UTENTE*/
        while(hole_card!=0) /* CONTA A RITROSO DELLE HOLE CARD*/
        {
            x=rand()%4;
            y=rand()%13;
            if(mazzo[x][y]!=-1)/* SE LA CARTA NON E' STATA PESCATA SEGNA LA CARTA*/
            {
                mazzo[x][y]=-1;
                carta=valore_carta_figurativo(y);
                seme=seme_carta(x);
                printf("%c%c",carta,seme);
                hole_card--;
            }
    
        }
    return 0;
    }
    
    /*****FUNZIONI*/
    
    char valore_carta_figurativo(int cf)/** FUNZIONE CHE RESTITUIESCE IL VALORE FIGURATIVO DELLA CARTA (A..K)*/
    {
        char valore;
        int v;
        v=cf;
        switch (cf)     /* TRAFORMA L'INTERO RICEVEUTO NEL VALORE DELLA CARTA*/
                        /* LE CARTE VANNO DA CASE 0=A...CASE 12=K*/
                        /**0=A,1=2..9=T...12=K**/
        {
            case 0:
                valore = '\A';
                break;
            case 1:
                valore = '2';
                break;
            case 2:
                valore = '3';
                break;
            case 3:
                valore = '4';
                break;
            case 4:
                valore = '5';
                break;
            case 5:
                valore = '6';
                break;
            case 6:
                valore = '7';
                break;
            case 7:
                valore = '8';
                break;
            case 8:
                valore = '9';
                break;
            case 9:
                valore = '\T';
                break;
            case 10:
                valore = '\J';
                break;
            case 11:
                valore = '\Q';
                break;
            case 12:
                valore = '\K';
                break;
        }
    
    return valore;
    }
    char seme_carta(int s)/** FUNZIONE CHE RESTITUISCE IL SEME DELLA CARTA*/
    {
        char seed;
        switch(s)    /* TRASFORMA L'INTERO RICEVUTO NEL SIMBOLO DEL SEME
                           IN CODICE ASCI ESEMPIO (ASCI=CUORI, ASCI=PICCHE....) */
                            /** 3=CUORI, 6=PICCHE, 4=QUADRI, 5=FIORI **/
        {
            case 0 :
                seed= 6 ;   /*PICCHE*/
                break;
            case 1 :
                seed= 4 ;   /*QUADRI*/
                break;
            case 2 :
                seed= 5 ;   /*FIORI*/
                break;
            case 3 :
                seed= 3 ;   /*CUORI*/
                break;
        }
        return seed;
    }
    Io ho scritto questo, però credo di essere sulla strada sbagliata...se non sbagliatissima!!!
    ci può essere qualche variabile di troppo, poichè ho riscritto il codice 100 volte per trovare una soluzione funzionale ed elegante.
    Grazie x la risposta!
    Come faccio ad usare quel riquadro che hai usato tu dove hai scritto il codice?

    Ora comincia ad essere tutto più chiaro ahahah grazie!
  • Re: POKER TEXAS HOLDEM GIOCO IN 'C'

    Alexxandro ha scritto:


    Come faccio ad usare quel riquadro che hai usato tu dove hai scritto il codice?
    Devi usare i tag CODE (quando scrivi un messaggio, sopra al testo c'è l'apposito pulsante "Code").
  • Re: POKER TEXAS HOLDEM GIOCO IN 'C'

    Quando mi sono buttato nel codice era cosi
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <string.h>
    #define MAX_GIOCATORI 10 /* COMPRESO L'UTENTE */
    #define MAX_CHAR_NAME 15 /* MAX NOME (CARATTERI) */
    #define CHIP 3000        /* 3000 CHIPS A GIOCATORE */
    #define VCARD 13         /* 13 CARTE A-K */
    #define SEME   4         /* QUATTRO SEMI */
    #define MAX_MISCHIA 1    /* CICLI PER MISCHIARE LE CARTE */
    
    /**PROTOTYPE**/
    char valore_carta_figurativo(int cf);
    char seme_carta(int s);
    /**/
    
    /** INIZIO PROGRAMMA**/
    int main()
    {
        srand(time(NULL));                       /*INSEMINA LA FUNZIONE RANDOM*/
    
    /** DICHIARAZIONE DELLE VARIABILI*/
        int i,r,c;                               /* VARIABILI TEMPORANEE */
        char v_carta1,s_carta1,v_carta2,s_carta2;/* CARTE UTENTE */
        char nome_utente[MAX_CHAR_NAME+1];       /* VETTORE PER ACQUISIRE IL NOME */
        int giocatori;                           /* TOTALE GIOCATORI AL TAVOLO */
        int chips[MAX_GIOCATORI];                /* VETTORE CHE TIENE TRACCIA DELLE CHIPS. OGNI CELLA CORRISPONDE AD UN GIOCATORE */
        int mazzo[SEME][VCARD]={                 /* I VALORI DEL SEME SONO IN CODICE ASCI*/
                                1,2,3,4,5,6,7,8,9,10,11,12,13,      /*6 = PICCHE*/
        /*LA RIGA E' IL SEME */ 1,2,3,4,5,6,7,8,9,10,11,12,13,      /*4 = QUADRI*/
                                1,2,3,4,5,6,7,8,9,10,11,12,13,      /*5 = FIORI*/
                                1,2,3,4,5,6,7,8,9,10,11,12,13,      /*3 = CUORI*/
                               };
    /**/
    
    /** ACQUISIZIONE DEL NOME NEL VETTORE nome_utente[] #define MAX_CHAR_NAME CARTATTERI**/
        do
        {
            printf("Come ti chiami? ");
            gets(nome_utente);
            i=strlen(nome_utente);
            if(i>MAX_CHAR_NAME) /* se il nome supera MAX_CHAR_NAME ripeti l'inserimento del nome*/
            {
                printf("Nome troppo lungo\n"
                       "puoi inserire al massimo 15 caratteri..\n");
            }
        }while(i>MAX_CHAR_NAME);
    /**/
    
    /** MESSAGGIO DI BENVENUTO PER L'UTENTE */
        printf(" Ciao ");
        puts(nome_utente);
        printf("  stai per cominciare\n"
               "  una partita di poker\n");
        printf(" TEXAS HOLDEM\n\             Buona Fortuna...\n\n");
    /**/
    
    /** CREA IL TAVOLO, NUMERO DI GIOCATORI +1 (UTENTE) */
        printf("Contro quanti avversari vuoi giocare (1-9): ");
        scanf("%d",&giocatori);
        printf("\n");
        if(giocatori>9) /*se giocatori>9, giocatori sarà inizializzato a 10. (Tavolo da 10 compreso l'utente)*/
        {
            printf("Puoi giocare al massimo contro 9 avversari!\n\n");
            giocatori=MAX_GIOCATORI;
            printf("IL TAVOLO E' COMPOSTO DA %d GIOCATORI, COMPRESO TU\n", giocatori);
        }
        else            /*altrimenti il tavolo sarà di giocatori+1 (+1=UTENTE)*/
        {
            giocatori=giocatori+1;
            printf("TAVOLO DA %d COMPRESO TU\n",giocatori);
        }
        printf("\n\tAncora una volta..\n\t\t\t  Buona Fortuna!!!\n\n");
    /**/
    
    /** DISTRIBUZIONE DELLE CHIPS A TUTTI I GIOCATORI */
        for(i=0; i<giocatori; i++)               /* ad ogni giocatore verrano date #define CHIP*/
        {
            chips[i]= CHIP;
        }
        for(i=0; i<giocatori; i++)               /* visualizza le chips distribuite */
        {
            printf("Giocatore %3d = %3d\n",i+1,chips[i]);
        }
    /**/
    
    
    /** SELEZIONE RANDOM DELLE CARTE DELL'UTENTE ( 2 CARTE )**/
                    /** r0 = PICCHE
                        r1 = QUADRI
                        r2 = FIORI
                        r3 = CUORI **/
        /** SCELTA PRIMA CARTA */
        do
        {
            i=0; /* FLAG CHE MI INDICA SE LA CARTE E' PRESENTE*/
            r=rand()%4;
            s_carta1=seme_carta(r);
    
            /**0=A,  1=2..9=T... 12=K**/
            c=rand()%13;
            v_carta1=valore_carta_figurativo(c);
    
            if (mazzo[r][c]!=-1)
            {
                mazzo[r][c]=-1; /* SEGNO LA CARTA COME USCITA */
                i++;            /* INCREMENTA i SE LA CARTA NON E' USCITA */
            }
        }while (i==0);
        /** SCELTA SECONDA CARTA */
         do
        {
            i=0; /* FLAG CHE MI INDICA SE LA CARTE E' PRESENTE*/
            r=rand()%4;
            s_carta2=seme_carta(r);
    
            /**0=A,  1=2..9=T... 12=K**/
            c=rand()%13;
            v_carta2=valore_carta_figurativo(c);
    
            if (mazzo[r][c]!=-1)
            {
                mazzo[r][c]=-1; /* SEGNO LA CARTA COME USCITA */
                i++;            /* INCREMENTA i SE LA CARTA NON E' USCITA */
            }
        }while (i==0);
    
        /** STAMPA A VIDEO DELLE CARTE USCITE **/
        /* PRIMA CARTA */
        printf(" ----  ---- \n");
        printf("|    ||    |\n");
        printf("| %c%c |",v_carta1,s_carta1);
        /* SECONDA CARTA */
        printf("| %c%c |\n",v_carta2,s_carta2);
        printf("|    ||    |\n");
        printf(" ----  ---- \n");
    
        printf("Le tue carte!");
    
    
    /**/
    return 0;
    }
    
    /***** F    U   N   Z   I   O   N   I******/
    
    
    char valore_carta_figurativo(int cf)/** FUNZIONE CHE RESTITUIESCE IL VALORE FIGURATIVO DELLA CARTA (A..K)*/
    {
        char valore;
        int v;
        v=cf;
        switch (cf)     /* TRAFORMA L'INTERO RICEVEUTO NEL VALORE DELLA CARTA*/
                        /* LE CARTE VANNO DA CASE 0=A...CASE 12=K*/
                        /**0=A,1=2..9=T...12=K**/
        {
            case 0:
                valore = '\A';
                break;
            case 1:
                valore = '2';
                break;
            case 2:
                valore = '3';
                break;
            case 3:
                valore = '4';
                break;
            case 4:
                valore = '5';
                break;
            case 5:
                valore = '6';
                break;
            case 6:
                valore = '7';
                break;
            case 7:
                valore = '8';
                break;
            case 8:
                valore = '9';
                break;
            case 9:
                valore = '\T';
                break;
            case 10:
                valore = '\J';
                break;
            case 11:
                valore = '\Q';
                break;
            case 12:
                valore = '\K';
                break;
        }
    
    return valore;
    }
    /***********************************************************************/
    
    char seme_carta(int s)/** FUNZIONE CHE RESTITUISCE IL SEME DELLA CARTA*/
    {
        char seed;
        switch(s)    /* TRASFORMA L'INTERO RICEVUTO NEL SIMBOLO DEL SEME
                           IN CODICE ASCI ESEMPIO (ASCI=CUORI, ASCI=PICCHE....) */
                            /** 3=CUORI, 6=PICCHE, 4=QUADRI, 5=FIORI **/
        {
            case 0 :
                seed= 6 ;   /*PICCHE*/
                break;
            case 1 :
                seed= 4 ;   /*QUADRI*/
                break;
            case 2 :
                seed= 5 ;   /*FIORI*/
                break;
            case 3 :
                seed= 3 ;   /*CUORI*/
                break;
        }
        return seed;
    }
    
    
    
    anche qui puoi esserci una variabile di troppo.... il mio cervello cominciava a fumare!!! in tutti i sensi
Devi accedere o registrarti per scrivere nel forum
4 risposte