[C] Programma che randomizza mano di carte

di il
8 risposte

[C] Programma che randomizza mano di carte

Salve a tutti, ho creato un programmino che crea una mano di carte ma ho un problema, non so come evitare che una carta possa capitarmi due volte... potreste aiutarmi?
Grazie mille.

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(void)
{
	char seme[5][8]={"bastoni","spade","denara","coppe"};
	int numeri[10],i=0,num,sem,uscito;   
	char *iniziale[4],*carteuscite[3],*uscita;      //inizializzo un array i puntatori//
	
	uscita=&seme[5][0];
	
	
	iniziale[0]=&seme[0][0]; 
	iniziale[1]=&seme[1][0];
	iniziale[2]=&seme[2][0];
	iniziale[3]=&seme[3][0];
	
	
	
	
	srand(time(NULL));
	
	while(i<10)                //carico l'array dei numeri delle carte//
	{
		numeri[i]=i+1;
		i++;
    }
		
	i=0;	
	
	while(i<3)                                  //Ciclo di stampa a video della carta//
	{
	   uscita=iniziale[sem];
	   num=rand()%9+1;
	   sem=rand()%4;
	   printf("%d %s\n",numeri[num],iniziale[sem]);
	   i++;
	 
	}
    
	
	
	
system("PAUSE");
return 0;
}

8 Risposte

  • Re: [C] Programma che randomizza mano di carte

    La prima soluzione che mi viene in mente è memorizzare in una matrice 3x2 la carta già uscita ed effettui un controllo dopo l'estrazione della carta. Se la carta è gia presente, riestrai la carta.
  • Re: [C] Programma che randomizza mano di carte

    Il problema è che le matrici non le conosco...
    Sono in seconda superiore e non è che sappia tutto...
    Magari se esistesse una soluzione più abbordabile
  • Re: [C] Programma che randomizza mano di carte

    bebbo203 ha scritto:


    Il problema è che le matrici non le conosco...
    Sono in seconda superiore e non è che sappia tutto...
    Magari se esistesse una soluzione più abbordabile
    Se le hai usate significa che le conosci .

    bebbo203 ha scritto:


    
                char seme[5][8]={"bastoni","spade","denara","coppe"};
    
    Questa è una matrice.
  • Re: [C] Programma che randomizza mano di carte

    Ah scusami, non pensavo si chiamassero così, li abbiamo sempre chiamati array bidimensionali.
    In questo caso avrei pensato anche io una cosa del genere ma non saprei come e dove implementarla...
  • Re: [C] Programma che randomizza mano di carte

    Nel ciclo che estrae le carte.
    Dopo aver estratto la prima carta potresti passarla per una funzione insieme ad un array (esempio controllacarta(num, sem, mano[2][3])).
    Nella matrice mano vengono memorizzate le carte in questo modo:

    num | 3 | 6 | 7
    -------------------
    sem | 1 | 3 | 4

    La prima riga memorizza i numeri delle carte, la seconda il seme.
    Nella funzione basta che scorri la matrice e controlli in parallela la stessa colonna num con num e sem con sem. Appena trova che la carta è già presente ritorna 1, altrimenti 0.

    Non è una cosa molto complicata.
    Ci puoi riuscire tranquillamente.
  • Re: [C] Programma che randomizza mano di carte

    Ecco, grazie, ora ci provo.
    Ma il far restituire alla funzione 1 cosa comporta? La ripetizione della funzione?
    Non le abbiamo ancora fatte a scuola e non trovo dei siti che lo spieghino in maniera "sempliciotta".


    Comunque grazie tante per l'impegno

    EDIT:
    Ci sto provando ma non riesco a impostare la matrice in modo da caricarla con le carte uscite, anche perché non so come utilizzare la funzione in questo caso, scusa il duplice disturbo
  • Re: [C] Programma che randomizza mano di carte

    Non ho capito molto bene cosa non ti è chiaro.
    Il return 1 nella funzione serve in modo che quando tu richiami la funzione nel main per controllare se la carta è già uscita, fai un ciclo ripetitivo con condizione chiamatafunzione == 1 in modo che se la funzione ti ritorna uno e quindi la carta è già presente, tu ripeti l'estrazione altrimenti subito dopo il ciclo memorizzi la seme e numero.
  • Re: [C] Programma che randomizza mano di carte

    Che non so come passare l'array bidimensionale alla funzione che non me lo accetta, e poi non riesco a controllare la carta con quelle già uscite, lo so, è una cavolata, ma non ci riesco proprio.
Devi accedere o registrarti per scrivere nel forum
8 risposte