#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.