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 :

Générateur aléatoire de patterns pour utilisation dans un jeu


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut Générateur aléatoire de patterns pour utilisation dans un jeu
    Bonjour,
    Dans un exercice, je dois utiliser un générateur de patterns (code fourni) et je ne comprends pas son fonctionnement. J'aimerai bien connaitre les valeurs ( patterns) qu'il génère et dans quelle variable...
    Auriez-vous l'amabilité de m'aider?
    Merci et bon week-end

    J-P

    Voici le code à ma disposition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Patterns au hasard
    std::uniform_int_distribution<int> distribution;
    std::default_random_engine generateur(time(NULL)); /* NOT using std::random_device since not all compilers seems to support it :-( */
     
    char tirer_pattern()
    {
      static const char* const patterns = ".RGBCYM";
      static const int nb = strlen(patterns) - 1;
     
      return patterns[distribution(generateur, std::uniform_int_distribution<int>::param_type {0, nb})];
    }

  2. #2
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    C'est assez trivial std::uniform_int_distribution, documentation en anglais.

    distribution(generateur, std::uniform_int_distribution<int>::param_type {0, nb}) permet de générer 1 nombre entre 0 et nb (nb étant la longueur du pattern - 1).
    Et patterns[/**/] prend 1 caractère : c'est 1 accès classique à la C, 1 chaîne de caractères étant 1 tableau terminé par le caractère '\0'.

    Tu utilises des static pour garder tes 2 variables "en mémoire"
    Pour le time(NULL) c'est ce qu'on utilise avec srand du C (<- lien cplusplus.com en anglais)

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Après, ce qu'il faut surtout savoir, c'est comment utiliser la fonction tirer_pattern(). Et ca, il n'y a rien de plus simple, il suffit d'un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main(){ // pour avoir une fonction dans laquelle faire l'appel ;)
     
    char c = tirer_pattern(); 
    }
    Bien sur, tu es tout à fait libre de choisir n'importe quel nom de variable au lieu de c car cette fonction te renverra quoi qu'il arrive une donné de type char (un caractère) dont la valeur sera soit '.', soit 'R', soit 'G', soit 'B', soit 'C', soit 'Y', soit 'M', avec une probabilité très similaire de renvoyer n'importe laquelle de ces valeurs.

    Tu te rends donc compte que la variable utilisée dépend... de ton propre choix, et que la valeur assignée à cette variable dépend des probabilités (ce qui est le but de cette fonction)

    Pour le reste, il t'appartiendra de savoir à quoi correspondent ces différentes valeurs, et ce que tu devra en faire par la suite
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Merci pour les précisions et la remarque *balises".
    Bonne après-midi

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Un petit souci...Le programme me renvoie systématiquement le caractère "Y"...Pour quelle raison?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <iostream>
    #include <ctime>
     
    // pour les nombres aléatoires
    #include <random>
    #include <cstring> // strlen
     
    using namespace std;
     
    // ======================================================================
    // Pattern au hasard
    std::uniform_int_distribution<int> distribution;
    std::default_random_engine generateur(time(NULL)); /* NOT using std::random_device since not
                                                        * all compilers seems to support it :-( */
     
    char tirer_pattern()
    {
      static const char* const patterns = ".RGBCYM";
      static const int nb = strlen(patterns) - 1;
      //cout<<couleurs<<endl;
     
      return patterns[distribution(generateur,
                                   std::uniform_int_distribution<int>::param_type {0, nb})];
    }
     
     
    int main()
    {
     
      char c = tirer_pattern();
      cout<<c<<endl;
      return 0;
    }

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    C'est curieux, ça semble se comporter comme si la fonction time(0) retournait toujours la même chose.
    Dans quel environnement ton code s'exécute-t-il?
    Essaie d'appeler la fonction dans un boucle pour voir si le générateur fonctionne.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Octobre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 31
    Par défaut
    Merci pour le tuyau! Effectivement avec une boucle je reçois bien différentes valeurs à chaque fois que je lance la boucle. Merci beaucoup!!!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/08/2007, 19h43
  2. NNTP existant pour utilisation dans OUTLOOK Express
    Par Richard_35 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 2
    Dernier message: 19/07/2007, 18h52
  3. Exporter figure 3D pour utilisation dans blender ou autre.
    Par johnnyjohnny dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/07/2007, 13h18
  4. Récupérer le nom d'un champ pour utilisation dans getElement
    Par effree dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/02/2006, 16h21
  5. VCL de Crystal Report pour utilisation dans C++Builder
    Par dibak dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/02/2004, 17h04

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