IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Problème de génération aléatoire


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 3
    Points : 9
    Points
    9
    Par défaut Problème de génération aléatoire
    Bonsoir tout le monde

    Dans le cadre d'un projet d'école je dois programmer un petit jeu vidéo dans lequel je manipule des armes.
    J'aimerais faire en sorte que le nom de l'arme soit générées aléatoirement parmi une cinquantaine de nom.

    Pour cela j'ai d'abord mis en place mon tableau de nom d'armes où j'y ai stocké 50 noms :

    char* weaponNames[] = {
    "Épée de feu",
    "Arc de Glace",
    "Lance des Ombres",
    ...

    J'ai ensuite crée une fonction generateRandomIndex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int generateRandomIndex() {
        srand(time(NULL));
        int index = rand() % 50;
        return index;
    }
    Et j'appelle cette fonction dans une fonction createWeapon dans laquelle j'initialise les variables de la structure de mon arme "weapon" :
    (Voici la partie qui concerne le nom de mon arme)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    int randomIndex = generateRandomIndex();
    newWeapon->name = weaponNames[randomIndex];
    Quand je lance mon programme, j'instancie plusieurs armes à la suite par le biais de la fonction createWeapon, mais le nom censé être aléatoire est le même pour toutes mes armes.

    Autre information, la variable name de la structure Weapon est sous la forme "char *name;", soit un pointeur de caractères.

    Comment puis-je obtenir un nom différent pour chacune de mes armes ?
    Merci de prendre le temps de me lire et d'essayer de m'aider à la résolution de mon problème !
    Images attachées Images attachées     

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2023
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 21
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2023
    Messages : 3
    Points : 9
    Points
    9
    Par défaut J'ai trouvé ma propre erreur
    J'avais déjà utilisé "srand(time(NULL));" dans mon code pour générer des monstres, et je crois comprendre qu'il n'est nécessaire d'avoir qu'un seul appel de cette fonction pour que la génération aléatoire fonctionne.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 946
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 946
    Points : 5 659
    Points
    5 659
    Par défaut
    Bonjour,
    Citation Envoyé par Tamari444 Voir le message
    J'avais déjà utilisé "srand(time(NULL));" dans mon code pour générer des monstres, et je crois comprendre qu'il n'est nécessaire d'avoir qu'un seul appel de cette fonction pour que la génération aléatoire fonctionne.
    C'est bien ça : chaque appel à srand(time(NULL)); réinitialise la valeur ...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 125
    Points : 33 027
    Points
    33 027
    Billets dans le blog
    4

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 720
    Points : 31 037
    Points
    31 037
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Tamari444 Voir le message
    J'avais déjà utilisé "srand(time(NULL));" dans mon code pour générer des monstres, et je crois comprendre qu'il n'est nécessaire d'avoir qu'un seul appel de cette fonction pour que la génération aléatoire fonctionne.
    Cela initialise la "graine" de l'aléatoire. Ensuite la graine est utilisée à chaque tirage. Fatalement une initialisation n'est à faire qu'une seule fois.
    L'avantage c'est que si tu initialises la graine avec une valeur fixe, tu auras toujours les mêmes tirages aléatoires. Cela peut être utile pour tester un code dans des conditions particulières.
    Ici l'initialisation est faite avec la date (+ heure) courante ce qui donne une initialisation toujours différente. Il reste un petit risque que le programme soit exécuté plusieurs fois en parallèle à la même heure ce qui donnera une initialisation identique pour toutes les instances en cours et si ce risque te gêne tu peux le résoudre via cette initialisation: srand(time(NULL) ^getpid()) (un pid étant associé à un processus, deux programmes en cours auront toujours deux pid différents)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probléme génération aléatoire.
    Par Dardas dans le forum LabVIEW
    Réponses: 10
    Dernier message: 09/12/2011, 12h44
  2. Réponses: 3
    Dernier message: 10/06/2009, 21h29
  3. Problème de génération aléatoire
    Par sebdu94 dans le forum C
    Réponses: 13
    Dernier message: 19/05/2007, 18h04
  4. Réponses: 2
    Dernier message: 25/09/2005, 21h30
  5. génération aléatoire de couleur claire
    Par jiraiya dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 25/02/2004, 19h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo