Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112

    [C++] per non ripetere carte

    ciao a tutti,sono quasi alla conclusione del mio giochino di carte ma manca una delle parti più importanti per renderlo reale.

    vi mostro un codice:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int n;
    char m;

    void carta();


    int main() {

    for (; {

    carta();

    system("pause");
    }
    return 0;
    }



    void carta() {

    srand (time (NULL));
    n=1+rand()%7;

    srand (time (NULL));
    m=3+rand()%4;

    cout<<"la tua carta :"<<n<<m;
    cout<<"\n\n";
    cout<<"un'altra carta!";
    }



    questo mostra delle carte,ora, per rendere il più reale possibile il gioco le carte che sono uscite non devono essere più riproposte fino all'esaurimento del mazzo da 40.

    non so proprio come fare e in più mi sembra che ci sia la complicanza che una carta sono 2 variabili affiancate (n e m)

    forse usando degli array....ma non ci arrivo.

    ringrazio chiunque mi darà un aiuto!!!!
    buona notte

  2. #2
    mmm una idea potrebbe essere quella di mettere tutte le 40 carte in un array di struct (una struttura composta da quelle che a te sono m e n)
    Poi metti un contatore inizializzato a 40
    Ogni volta fai un rand in un range che va da 0 al contatore-1. L'indice che esce è la carta sorteggiata.
    Prendi quella carta e la scambi con l'elemento nell'array in posizione contatore-1 e decrementi il contatore.

    Ripeti ciò fino a che non finisce il gioco.


    ciao ciao

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Oppure inserisci nell'array di 40 elementi le carte in modo random e utilizzale dal primo all'ultimo ...

  4. #4
    Oppure fai un array il cui indice rappresenta il valore della carta
    e il valore dell'elemento vale 1 se la carta è da estrarre , 0 se è già stata estratta.
    Saluti

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112
    grazie raga molto gentili

    se dovessi incontrare qualche ostacolo mi farò sentire

    ciao

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112

    scervellamento....

    eccomi di nuovo,buona serata!!! è due sere che mi scervello ma niente non ci arrivo...
    per iniziare ho cercato di mettere in modo casuale 40 interi che vanno da 1 a 40 in un array, ho scritto il seguente codice ma l'array viene inizializzato tutto con lo stesso numero:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int random();
    int r;

    int main() {
    int sample[40];
    int t;


    for(t=0; t<40; t++) {
    sample[t]=random();
    cout<<"questo e' sample["<<t<<"]: "<<sample[t]<<"\n";
    }
    system("pause");
    return 0;
    }


    int random() {
    srand(time (NULL));
    r=1+rand()%40;
    return r;
    }


    chiedo aiuto per capire

  7. #7
    Prova a togliere srand(time(NULL)). dovrebbe andare

  8. #8
    Non la devi togliere la
    srand(time (NULL));
    Ma la devi spostare all'inizio del main. Questa funzione deve essere richiamata una sola volta.
    Ciao.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    112
    infatti hai ragione ho tolto quella riga e funziona. l'avevo trovata qui nel forum e mi sembra che in altri casi serva. ma poi cosa significa?

    cioa e grazie ancora

  10. #10
    Originariamente inviato da drinu
    infatti hai ragione ho tolto quella riga e funziona. l'avevo trovata qui nel forum e mi sembra che in altri casi serva. ma poi cosa significa?

    cioa e grazie ancora
    Non la devi togliere, ma spostarla all'inizio del main come ti ho già scritto.
    La srand() reinizializza il generatore di numeri casuali, se lo togli la rand() restituirà una serie
    di numeri pseudo-casuali, in poche parole ogni volta che avvii il programma ti ritroveresti
    sempre la medesima sequenza di numeri.
    Quindi è meglio lasciarla.
    Io, di solito, la uso così :
    codice:
    time_t ti;
    srand((unsigned) time(&ti));
    Ciao.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.