Une implémentation java du jeu
Little AI

Ressources :

fichiers sources

workspace eclipse

JAR exécutable

Description :

Little AI est une application mobile crée par Olivier Georgeon, dont le but est de mettre l'utilisateur à la place d'un agent cognitif comme Ernest, qui découvre son environnement uniquement au travers d'interactions.

Cette version a été développée en Java avec pour objectif de permettre, de façon simple, la création de niveaux basés sur des environnements complexes.

Utilisation :

L'interface du jeu est toujours organisé de la même façon : en bas à gauche se trouve le panneau des boutons permettant d'interagir avec l'environnement. À droite, se trouve l'environnement, dans sa boite noire : le joueur n'a pas d'autre moyen de l'explorer que par le biais des interactions à sa disposition. À chaque action effectuée, le joueur peut voir le résultat, sous la forme d'une interaction, avec le score qui lui est associé. En haut à gauche est affiché le score total, somme des dix dernières interactions. Le but du joueur est de comprendre le fonctionnement de l'environnement en analysant les séquences d'interactions, pour maximiser son score.
LittleAI
Afin de simplifier la tâche, il est possible de modifier les formes des actions et les couleurs des interactions pour mieux les distinguer sur la frise. Pour changer la forme d'une action (et des interactions qui peuvent en résulter), il suffit de cliquer longuement sur le bouton jusqu'à l'apparition du menu, puis de relâcher sur la forme voulue. Il en est de même pour la couleur des interactions.


Si vous parvenez à obtenir un score suffisant, vous serez autorisé à voir l'environnement. Est-il conforme à vos hypothèses?
LittleAI
LittleAI
Cette implémentation permet de créer des niveaux utilisant des environnements pouvant être complexes. Quatre exemples de niveaux sont fournis. Les deux premiers sont très simples, tandis que les deux suivants sont de difficulté élevée. Le quatrième niveau illustre l'utilisation d'interactions parallèles.
LittleAI


Comment créer un niveau?

La première étape consiste à définir l'environnement avec lequel l'avatar du joueur va interagir. L'environnement est constitué d'une matrice de nombres. Il faut ensuite définir les actions possibles, et leur résultats en fonctions des valeurs des cellules de la matrice. Chaque interaction est définie par un nombre de 0 à n, chaque action par un nombre de 0 à m.

Une fois que l'environnement et ses propriétés physiques sont définies, on peut passer à l'implémentation. Pour créer un niveau, il faut créer une nouvelle classe héritant de la classe Level (par exemple, Level3). Voici le cadre minimal pour créer un nouveau niveau :

import java.awt.Color;

public class Level3 extends Level{

     public Level3(){
          //initialise les variables

     }

     public void action(int a){
          int[] ret=new int[1];
          // description des interactions

          push(ret);
     }

     public boolean solved(){
          // condition de réussite du niveau

          return sum>=10; // exemple : si le score atteint 10
     }

     public void drawAgent(Graphics2D g, float x, float y, int width){
          // dessine l'avatar

     }
}

Initialisation des variables : un certain nombre de variables doivent être définies pour décrire et initialiser l'environnement :
-int nbActions : défini le nombre d'action disponibles pour le joueur
-int nbInteraction : défini le nombre total d'interactions
-int[] actionMap : vecteur de longueur nbInteraction donnant pour chaque interaction l'action qui lui est associé
-int[] valence : vecteur de longueur nbInteraction donnant le score associé à chaque interaction
-int panel_width et int panel_height : donne le nombre de colonnes et de lignes du panneau de contrôle
-int[] shapes : vecteur de longueur nbAction donnant la forme initiale de chaque action. Par défaut, 0->cercle, 1->carré, 2->triangle haut, 3->triangle bas, 4->triangle gauche, 5->triangle droite
-int[] colors : vecteur de longueur nbInteraction donnant la couleur de chaque interaction. Par défaut, 0->blanc, 1->noir...
-int[][] world : la matrice définissant l'environnement
-int px, int py, float theta : position (x,y) et orientation initiales de l'avatar dans l'environnement.
-Color color : couleur de l'avatar lorsqu'il est affiché. Par défaut, l'avatar est orange.

méthode public void action(int a) : c'est dans cette méthode que sont définies les propriétés "physiques" de l'environnement. Cette méthode décrit l'interaction avatar-environnement qui se produit lorsque le joueur sélectionne l'action a. Il est par exemple possible de déplacer l'avatar ou de changer la valeur d'une cellule de l'environnement. le vecteur int[] ret est un vecteur contenant l'identifiant de la ou des interactions considérées comme effectuées. Notons que ce vecteur doit toujours être de la même taille. La dernière instruction, push(ret), permet d'enregistrer la ou les interactions effectuées.

fonction public boolean solved() : défini la condition de réussite du niveau. Deux variables peuvent être utilisées : sum, correspondant au score, et tests, qui compte le nombre d'actions du joueur. Il est également possible de définir la réussite d'un niveau comme le fait d'obtenir une interaction donnée un certain nombre de fois, ou de réussir une certaine séquence : aucune limite n'est imposée, si ce n'est votre imagination.

méthode public void drawAgent(Graphics2D g, float x, float y, int width) (facultatif) : permet de dessiner l'avatar, au coordonnées (x,y) de la matrice, avec une largeur de width. Par défaut, l'avatar est représenté par un cercle.

Enfin, la dernière étape : intégrer le niveau au jeux, en ajoutant ou en insérant, dans la méthode void newLevel(), une ligne supplémentaire :
else if (id_level==4) level=new Level3();