Memory C

di il
12 risposte

Memory C

Salve a tutti,
Devo creare il gioco del memory in una matrice bidimensionale in c, ma ho serie difficoltà nell'impedire alla funzione random di generare più di due numeri uguali. Mi sapreste aiutare?
(La dimensione della matrice è 4 x 4).

int casuale()
{
	int x,i;
	srand(time(NULL));
	for(i=0;i<CAR;i++)
	x=rand()%8+1;
	return x;
}

void matrice_nascosta(int mcasuale[RIG][COL])
{
	int i,x,j;
	for(i=0;i<RIG;i++)
	{
		for(j=0;j<COL;j++)
		{
			x=casuale();
			sleep(1);
			mcasuale[i][j]=x;
			printf("%d\t",mcasuale[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}

12 Risposte

  • Re: Memory C

    Usa i tag CODE per il codice nel forum o non si capisce nulla
  • Re: Memory C

    oregon ha scritto:


    Usa i tag CODE per il codice nel forum o non si capisce nulla
    Risolto, inserito il tag CODE
  • Re: Memory C

    Come hai risolto?
  • Re: Memory C

    migliorabile ha scritto:


    Come hai risolto?
    No, ho risolto sul fatto di usare il tag CODE per far visualizzare il codice ordinatamente.
    Purtroppo non ho ancora svolto il compito, avresti un idea su come eseguirlo?
  • Re: Memory C

    migliorabile ha scritto:


    Come hai risolto?
    è la prima volta che utilizzo questo forum, quindi ho qualche difficoltà
  • Re: Memory C

    Vedo un problema
    Se casuale restituisce un numero tra 1 e 5 sarà difficile che tu riesca ad avere 16 differenti valori per riempire 16 caselle senza doppioni
  • Re: Memory C

    StandardOil ha scritto:


    Vedo un problema
    Se casuale restituisce un numero tra 1 e 5 sarà difficile che tu riesca ad avere 16 differenti valori per riempire 16 caselle senza doppioni
    Scusami, ho copiato la "random" sbagliata, correggo subito.
  • Re: Memory C

    StandardOil ha scritto:


    Vedo un problema
    Se casuale restituisce un numero tra 1 e 5 sarà difficile che tu riesca ad avere 16 differenti valori per riempire 16 caselle senza doppioni
    In realtà se cerchi su internet ti renderai conto che i doppioni sono fondamentali per il gioco!

    @Sbuccio
    Sinceramente il codice che hai postato non mi sembra abbia molto senso... secondo me fai prima a ricominciare daccapo!
    Quello che farei è dichiarare un array di questo tipo
    int v[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8};
    per poi "mischiarlo" ed utilizzarlo per popolare la matrice.
  • Re: Memory C

    Nippolo ha scritto:


    StandardOil ha scritto:


    Vedo un problema
    Se casuale restituisce un numero tra 1 e 5 sarà difficile che tu riesca ad avere 16 differenti valori per riempire 16 caselle senza doppioni
    In realtà se cerchi su internet ti renderai conto che i doppioni sono fondamentali per il gioco!

    @Sbuccio
    Sinceramente il codice che hai postato non mi sembra abbia molto senso... secondo me fai prima a ricominciare daccapo!
    Quello che farei è dichiarare un array di questo tipo
    int v[] = {1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8};
    per poi "mischiarlo" ed utilizzarlo per popolare la matrice.
    Grazie mille per l'aiuto, sapresti dirmi il modo più veloce e semplice per "mischiare" il vettore nella matrice?
  • Re: Memory C

    Prima mischi l'array e poi lo utilizzi per riempire la matrice.
    In ogni caso per mischiare il vettore puoi utilizzare il seguente approccio:
    - consideri l'ultimo elemento, ossia quello di indice 15, e lo scambi di posto con quello di indice pari ad un numero casuale appartenente all'intervallo [0;15];
    - consideri l'elemento di indice 14 e lo scambi di posto con quello di indice pari ad un numero casuale appartenente all'intervallo [0;14];
    - consideri l'elemento di indice 13 e lo scambi di posto con quello di indice pari ad un numero casuale appartenente all'intervallo [0;13];
    ...
    - consideri l'elemento di indice 2 e lo scambi di posto con quello di indice pari ad un numero casuale appartenente all'intervallo [0;2];
    - infine consideri l'elemento di indice 1 e lo scambi di posto con quello di indice pari ad un numero casuale appartenente all'intervallo [0;1].
  • Re: Memory C

    Nippolo ha scritto:


    In realtà se cerchi su internet ti renderai conto che i doppioni sono fondamentali per il gioco!

    Non sono io che debbo informarmi

    È lo OP che deve spiegarsi
  • Re: Memory C

    StandardOil ha scritto:


    Non sono io che debbo informarmi

    È lo OP che deve spiegarsi

    Sbuccio ha scritto:


    ma ho serie difficoltà nell'impedire alla funzione random di generare più di due numeri uguali. Mi sapreste aiutare?
Devi accedere o registrarti per scrivere nel forum
12 risposte