Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. Programmation
  3. Développement de logiciels
  4. C
  5. IA #3 - les mécanismes de groupes

IA #3 - les mécanismes de groupes

Scheduled Pinned Locked Moved C
2 Posts 2 Posters 3.7k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • daemondragonD
    daemondragonD
    daemondragon
    wrote on last edited by
    #1

    <p>Qu'est ce que les mécanismes de groupe ?<br/><br/>
    Ce sont les actions qui se passent lorsque vous êtes avec un nombre<br/>
    important de personnes.<br/>
    Ce tutoriel va mettre en place l'algorithme flack and swarm.<br/>
    Cet algorithme est issue de l'observation des "essaims" de poissons :<br/>
    Lorsqu'un poissons voit un prédateur, il fuit. Le poisson a coté voit celui<br/>
    qui fuit et fuit a son tour, etc... Ce mécanisme est tellement rapide<br/>
    qu'un observateur à l'impression que ceci se fait directement.<br/>
    C'est ça les mécanismes de groupe.<br/><br/>
    Ces mécanismes sont souvent utilisés dans des jeu de type total war,<br/>
    ou un groupe de personnes n'a en fait qu'une vrai personnes qui va<br/>
    "réfléchir", le reste va copier les mouvement de celui qui réfléchit.<br/><br/>
    Mais quels sont les avantages d'utiliser cette technique ?<br/><br/>
    Tout d'abord, cela consomme moins de processeur car une seule personne<br/>
    réfléchit, fait son action, et tout le monde copie son action. Du coup,<br/>
    personnes d'autre ne réfléchit. (vous faites aussi cela en cours, tout<br/>
    le monde copie sur une unique personne, cela prend moins de temps aux<br/>
    autre cerveaux pour réfléchir, donc c'est bien 🙂 )<br/>
    Cela permet aussi d'assurer une cohérence dans le groupe<br/>
    vous imaginer une armée où chacun peut faire ce qu'il veut ?<br/>
    limiter le nombre de personnes qui réfléchit permet donc de limiter les incohérences<br/>
    dans le jeu pour le joueur.<br/><br/>
    Donc pour le code, il faut faire cela :<br/>
    "l'entité" leader fait cela :</p>
    <pre class="ipsCode prettyprint">
    typedef struct t_leader
    {
    char etat;
    void(*p_fonction)(t_info *);
    }t_leader;
    </pre>
    <p>
    Si vous ne savez pas se que signifie etat, aller voir le tutoriel précédent.<br/>
    p_fonction est un pointeur de fonction.<br/>
    Allez voir le tutoriel d'AlexMog qui est très bien fait.</p>
    <p><iframe data-embed-src="<base_url>/topic/746-cours-7-les-pointeurs-sur-fonction/?do=embed" data-embedcontent="" frameborder="0" src="//melinyel.net/applications/core/interface/js/spacer.png"></iframe></p>
    <p>
    Utiliser les pointeur sur fonction permet d'exécuter très rapidement la fonction,<br/>
    au lieu de mettre un ID de fonction et faire un immense switch ou if, else if ...<br/><br/>
    Dès lors, afin que les sbires, où ceux qui suivent le leader fassent les même actions,<br/>
    il suffit de faire :<br/>
     </p>
    <pre class="ipsCode prettyprint">
    typedef struct t_sbire
    {
    void(*p_fonction)(t_info );
    }t_sbire;
    </pre>
    <p>la structure t_info contient toutes les infos utiles pour exécuter les actions<br/>
    Aller encore regarder mon tutoriel précédent pour comprendre se que c'est</p>
    <pre class="ipsCode prettyprint">
    t_leader leader;
    t_info info;
    /
    vous mettez le pointeur sur fonction en fonction de l'état du pnj
    par exemple : */
    leader.p_fonction = &attack_near_enemy;

    t_sbire sbire[16]; /* 16 est un exemple */
    int i;

    for(i = 0 ; i < 16 ; i++)
    {
    sbire[i].p_fonction = leader.p_fonction;
    }
    /* tout les sbires vont maintenant pouvoir faire la même action que le leader /
    </pre>
    <p>et on exécute le tout<br/>
     </p>
    <pre class="ipsCode prettyprint">
    leader.p_fonction(&info); /
    on envoie la structure d'info a la fonction (un pointeur)*/

    for(i = 0 ; i < 16 ; i++)
    {
    sbire[i].p_fonction(&info);
    }
    </pre>
    <p><br/>
    Et voila, vous pouvez maintenant créer facilement des mécaniques de groupe, afin de créer<br/>
    des immense batailles, ou encore une joli danse (chacun fait la même chose que son voisin) 🙂 .</p>

    1 Reply Last reply
    1
    • AzadA
      AzadA
      Azad
      wrote on last edited by
      #2

      <p>Merci du partage, très bon tutoriel comme tout les précédents. 🙂 </p>
      <p>La forme du texte est néanmoins un peu étrange (retour à la ligne en pleine phrase).<br/><br/>
      +1 réputation tout de même, continue comme ça !</p>

      Administrateur du forum.
      Contactez-moi par message privé ou par mail.

      1 Reply Last reply
      0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      Reply
      • Reply as topic
      Log in to reply
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes


      • Login

      • Login or register to search.
      Powered by NodeBB Contributors
      • First post
        Last post
      0
      • Categories
      • Recent
      • Tags
      • Popular
      • World
      • Users
      • Groups