Aller au contenu


Photo
- - - - -

Laby : Trouverez-vous la sortie du labyrinthe.


  • Veuillez vous connecter pour répondre
7 réponses à ce sujet

#1 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 02 mars 2010 - 10:45

Bonjour à tous !



Un ami à trouvé un petit programme : Laby.

C'est un petit jeux où une fourmi se promène dans un labyrinthe et doit retrouver la sortie.



Image IPB





Ce qui est drôle, c'est que la fourmi en question, c'est nous qui la programmons.

De A à Z. Et c'est ce qui fait l'intérêt de ce petit jeux. Plusieurs langages de programmation possible : C, Ocaml et java.





Est-ce que vous trouverez LE code qui marche à tous les coups ? ;)

Avec un ami de ma classe,on a trouvé un code qui marche à tous les coups. Il reste encore à l'optimiser et à l'améliorer.





Question : Existe-t-il d'autres jeux du genre ?





ps : Pour l'installation : "# apt-get install laby" pour les linuxiens. Pour ceux sur windows... Euh... Installez une machine virtuelle avec un pingouin dedans.

#2 robocop

robocop

    Membre passionné

  • Membres
  • PipPipPip
  • 357 messages
  • Gender:Male

Posté 02 mars 2010 - 11:00

Heu, tu n'aurais pas un lien vers un site web pour le compiler, je ne le trouve pas dans mes paquets.

#3 Edel

Edel

    Nouveau membre

  • Membres
  • 5 messages

Posté 02 mars 2010 - 11:34

@esprit: petit prétentieux, c'est moi qui ai codé tout seul... ;-)

@robocop: le wiki du créateur avec les sources
http://www.pps.jussieu.fr/~gimenez/laby/

sinon dans les dépots ubuntu

#4 robocop

robocop

    Membre passionné

  • Membres
  • PipPipPip
  • 357 messages
  • Gender:Male

Posté 02 mars 2010 - 04:32

Ok, je viens de l'installer.
Mais il y a une doc avec toutes les fonctions disponibles ?

#5 Esprit

Esprit

    Pilier du forum

  • Membres
  • PipPipPipPipPip
  • 1 503 messages
  • Gender:Male
  • Location:Belgique
  • Interests:La robotique !

Posté 02 mars 2010 - 06:36

[quote"Edel"]@esprit: petit prétentieux, c'est moi qui ai codé tout seul... ;-)[/quote]

On a codé en parallèle, chacun de son côté.
C'est vrai que c'est ton code qui marche à tous les coups, j'ai pas dis le contraire. ^^'


[quote"robocop"]y a-t-il une doc ?[/quote]

J'ai cherché après un fichier qui détaillerait les différentes possibilités mais je n'ai pas trouvé.
Est-ce que la librairie "robot.h" qu'il utilise ne serait pas une librairie existante dans laquelle il serait possible d'aller rechercher toutes les possibilités ?


[quote"CactO_o's"]Dans le principe de laby, plus cour chemin etc... Je me suis un peut amuser en cour (rien d'extra) j'ai fait un programme en PHP / JS :
Ceux qui sont intéressé : http://www.arthurgerbelot.com/test/laby[/quote]

J'ai jeté un coup d'oeil, sympa ! :-)


#6 Edel

Edel

    Nouveau membre

  • Membres
  • 5 messages

Posté 03 mars 2010 - 01:16

[quote"robocop"]Ok, je viens de l'installer.
Mais il y a une doc avec toutes les fonctions disponibles ?[/quote]

pas trouvé de doc...
mais pour aider:

forward() pour avancer
left(), right() pour tourner
door_open pour ouvrir la porte
look() pour voir ce qu'il y a devant
----Exit, Wall, Web, Rock, Void
take() et drop() pour ramasser et déposer les "Rock"

voilà pour les fonctions internes, la plus part des fonctions en C fonctionnent.

Je cherche un moyen pour afficher un message dans la fenètre ad-hoc, si quelqu'un trouve...


#7 robocop

robocop

    Membre passionné

  • Membres
  • PipPipPip
  • 357 messages
  • Gender:Male

Posté 03 mars 2010 - 02:24

Ok, bon, j'ai fais ça rapidement :
exception S
open Robot


type dir = Avant | Gauche | Droite | Arriere

let inv = function
| Gauche -> Droite
| Droite -> Gauche
| e -> e

let tourelle() =
let pred() = regarde () = Vide || regarde() = Sortie || regarde() = Caillou in
let l = if pred() then [(Avant, regarde())] else [] in
gauche();
let l = if pred() then (Gauche, regarde())::l else l in
droite(); droite();
let l = if pred() then (Droite, regarde())::l else l in
gauche();
l
let rec tourne (dir, e) =
let caillou() = prend(); tourne (Arriere, Vide); pose(); tourne(Arriere, Vide) in
begin
match dir with
| Gauche -> gauche()
| Droite -> droite()
| Avant -> ()
| Arriere -> gauche(); gauche();
end;
if e = Caillou then caillou()
let go (dir, e) = tourne(dir, e); avance()
let rec loop path =
begin
match path with
| None -> ()
| Some(d, e) ->
go(d, e)
end;
let l = tourelle() in
(* Si on a trouvé la sortie *)
if List.exists (fun (_, b) -> b = Sortie) l then
begin
tourne (List.find (fun (_, b) -> b = Sortie) l);
ouvre();
raise S
end
else
(* Si on est dans une impasse, on revient sur ses pas *)
if l = [] then go(Arriere, Vide)
else List.iter (fun (d, e) -> loop (Some(d, e))) l ;
(* Lorsque qu'on a finit d'explorer une zone on retourne sur ses pas pour explorer les autres*)
match path with
| None -> ()
| Some (d, e) -> go (d, e)

let fourmi =
try loop None with S -> ()
[/code]

Il regarde les chemins libres, et les empreinte jusqu'a la porte.
Evidemment, ça ne marche pas tout le temps, car il revient sur ces pas parfois :).

Je ferais une version un peu plus évoluée ce soir ou demain :).

A+
PS : elle est moche la coloration ocaml.

#8 Edel

Edel

    Nouveau membre

  • Membres
  • 5 messages

Posté 04 mars 2010 - 03:59

voici mon code en C
il marche tout le temps dans les niveaux existants, mais pas dans les niveaux de mon cru...
#include "robot.h"

void start()
{
while (look() != Wall)
{
left();
}
right();
forward();
}

void rock()
{
take();
left();
while (look() == Wall)
{
left();
}
drop();
while (look() != Void)
{
right();
}
}

void test()
{
switch (look())
{
case Rock:
rock();
break;
case Wall:
right();
test();
break;
case Web:
right();
test();
break;
case Exit:
break;
case Void:
break;
}
}

void ant()
{
start();
while (look() !=Exit)
{
left();
test();
forward();
}
door_open();
}[/code]





0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users