Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Random Ricorsiva

  1. #1

    Random Ricorsiva

    Salve devo fare una random ricorsiva ma mi da sempre gli stessi valori...la funzione permette di pescare carte dal mazzo di gioco di una partita di poker....la funziona che viene chiamata 5 volte è questa:
    codice:
     
    void Poker::newcard()
    {
    
        if(testa!=0)
        {
            testa=new carta;
            testa->next=ptr;
        }
        if(testa==0)
        {
            testa=new carta;
            testa->next=0;
        }
    
    
    
        ptr=testa;
    
        int valore;
        int seme;
    
        srand ( time(0) );
        valore=rand()%13 + 1;
        seme=rand()% 4+1;
        if(seme==1)
        {
            testa->seme='C';
        }
        if(seme==2)
        {
            testa->seme='Q';
        }
        if(seme==3)
        {
            testa->seme='P';
        }
        if(seme==4)
        {
            testa->seme='F';
        }
    
    }
    solamente che i valori che ottengo sono della stessa carta...ho pensato che fosse un problema di seed ovvero la costante che prende il pc dal tempo di sistema è la stessa poichè i calcoli vengono effettuati subito, per questo motivo ho fatto un ciclo for abbastanza lungo e l'ultima carta cambiava...le altre rimanevano uguali...qualcuno conosce un modo per ottenere sempre valori diversi? senza rallentare il programma con sleep e for...grazie

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Allora invece di time(0) come seme usa clock(), che non è espresso in secondi e cambia ogni miliardesimo di secondo (se hai un processore da 1ghz).
    Poi se vuoi rendere ancora più efficace la funzione, puoi inserire tante variabili come seme per rendere la combinazione imprevedibile:

    codice:
    // questo dentro la funzione per calcolare il valore random
    static int seed=0;
    srand(clock()+seed);
    seed++;

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472

    Moderazione

    Continua a mancare sempre il linguaggio nel titolo, che è obbligatorio come da Regolamento.

    Siccome sono stanco di inserirlo io, questa volta chiudo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.