Site de Vincent Gripon

Blog sur mes recherches et mon enseignement

Jeux sur labyrinthes

Labyrinthe

Les binaires, compilés avec ocaml 3.11.2 sous un ubuntu 32 bits, sont disponible dans l’archive ici. Version 64 bits : ici.

Fichiers

Le jeu est composé de trois fichiers.
Le premier, nommé laby, est appelé de la façon suivante :
./laby columns rows density game
Les trois premiers paramètres définissent le nombre de colonnes, de lignes et la densité de mur souhaitée dans le labyrinthe. Le troisième paramètre n’est qu’une requête et sera affiné par un algorithme de façon à ce que le graphe soit connexe. Demander par exemple une densité de 1 ne donnera jamais (sauf cas dégénéré) une véritable densité de 1.
Le dernier paramètre, appelé game définit le jeu à utiliser, voir ci-dessous.
Le programme lit des instructions sur le stdin, ces instructions doivent impérativement être de la forme XdX vaut soit 1 pour le premier joueur, soit 2 pour le second. La seconde lettre, d, code le déplacement voulu pour le joueur. Les seuls déplacements autorisés sont h,b,g et d respectivement pour haut, bas, gauche et droite. Si le déplacement n’est pas valide, par exemple si un mur est présent, le joueur restera immobile.

Le second fichier, nommé interface est appelé de la façon suivante :
./interface columns rows density game prog1 [prog2]
Ce programme, comme son nom l’indique, fait l’interface entre le labyrinthe et le programme de contrôle des joueurs. Selon le jeu choisi (voir ci-dessous), il prend en plus de laby un ou deux programmes en argument.
Il n’est pas nécessaire d’utiliser le programme laby si interface est appelé.

Le troisième fichier est un exemple de programme de contrôle pour le premier type de jeu. Il ne s’appelle pas directement mais doit être donné comme dernier argument à interface sur le modèle :
./interface columns rows density 1 ./gauche
La stratégie de ce contrôle est de toujours longer le mur de gauche.

Pour faire soit même un programme de jeu, il suffit de considérer les choses suivantes :
Lorsque le programme est appelé (par interface), il reçoit comme arguments le nombre de colonnes, le nombre de lignes et le type de jeu.
Il reçoit ensuite des informations sur son stdin et communique ses décisions (h,b,g ou d) sur le stdout. Ces décisions doivent impérativement être suivies d’un retour à la ligne ainsi que d’un flush.
Selon le type de jeu, les informations reçues différent.

Types de jeu

Il y a trois types de jeu.
Le jeu n°1 fonctionne de la façon suivante: le labyrinthe n’est pas donné au programme de contrôle. Il ne lui est communiqué que sa position ainsi que celle de la cible. Ces information sont données sous la forme suivante : [|pos;poscible|]pos désigne la position du joueur et poscible celle de la cible. Ces positions sont codées comme étant le produit de la ligne fois le nombre de colonnes plus la colonne.
Le but du jeu est de réussir à atteindre le point d’arrivée.

Le jeu n°2 communique au programme de contrôle le labyrinthe. Il est envoyé au départ sur le stdin sous la forme suivante : [|[a1;a2];[b1];[];…….. |] où les points indiquent qu’il peut y avoir plus d’éléments. Chaque élément est encadré par des crochets. La liste des valeurs entre les premiers crochets indique les cases reliées à la case 0, celle des seconds crochets pour la case 1 etc
Par la suite le fonctionnement est comme pour le jeu 1.

Le jeu n°3 communique le labyrinthe suivi de la liste des objets à récupérer. Ce jeu se joue à deux joueurs et le gagnant est celui qui en ramassera le plus (il suffit de passer dessus pour en ramasser un). Il y a une petite subtilité pour ce jeu. La liste des objets est symétrique, de même que le labyrinthe et il y aura toujours un nombre impair d’objets pour qu’il y ait un gagnant. Le dernier objet sera donc toujours au centre du labyrinthe, qui aura donc toujours un nombre impair de lignes et de colonnes.
La liste des objets à récupérer sera communiquée sur le stdin sur une nouvelle ligne sous le format [a;b;c;d.....], chaque lettre représentant la position d’un objet.
A chaque itération la position des deux joueurs est envoyée comme précédemment directement suivie de la liste des objets restants.





Vous êtes le 505903ème visiteur

Site de Vincent Gripon