L'idée

Cette IA repose sur un principe très simple. On part du principe que le seul moyen de perdre un paquet est de voir un tapis roulant orienté en direction du vide. Cette IA primitive promène donc le faisceau aléatoirement, et inverse la direction d'un tapis roulant lorsque celle-ci met en danger un paquet.

#include ``ia_user.h''

extern ``C'' void IaMain()
{
  // La position du joueur est récupérée pour être analysée ultérieurement.
  vector pos = PlayerPos();

  // Si le faisceau ne se trouve pas contre un bord...
  if(pos.x != 0 && pos.y != 0)
  {
    // ... on l'y déplace le plus vite possible.
    ActionMove(LEFT);
  }
  else
  {
    // Sinon on récupère la variable sauvegardée précédemment indiquant la
    // direction actuelle.
    int direction = RecoverInt(``direction''); 
 
    // Si le faisceau pointe vers un tapis dirigé vers le vide, on inverse
    // ce tapis.
    if(pos.x == 0 && RollingFloor(pos, true) == LEFT ||
       pos.y == 0 && RollingFloor(pos, true) == TOP)
    {
      ActionReverse();
    }
    // sinon on cherche à déplacer le faisceau.
    else
    {
     // si cette direction n'existe pas, on va vers le bas.
     if(direction == -1)
     {
      direction = BOTTOM;
     }
     // sinon, on vérifie la position
     // si le faisceau est tout en bas, on le déplace vers le haut
     else if(pos.y == LOCAL_SIZE-1)
     {
      direction = TOP;
     }
     // si le faisceau est dans le coin haut/gauche, la direction suivante
     // dépendra de la direction actuelle
     else if(pos.x == 0 && pos.y == 0)
     {
      if(direction == TOP)
      {
       direction = RIGHT;
      }
      else
      {
       direction = BOTTOM;
      }
     }
     // si on est complètement à droite, on repart vers la gauche
     else if(pos.x == LOCAL_SIZE-1)
     {
      direction = LEFT;
     }

     // On se déplace vers la direction déterminée.
     ActionMove(direction);

    // Puis on sauvegarde la direction courante pour la réutiliser
    // le tour suivant.
    SaveInt(``direction'', direction);
   }
  }
}

De nombreuses améliorations peuvent bien entendu être apportées à cette IA. Au lieu de faire des déplacements aléatoires, l'IA pourrait par exemple déterminer le tapis roulant de direction compromettante le plus proche du faisceau, pour ainsi dépenser moins d'actions à se déplacer.



Guillaume Libersat 2005-03-03