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.
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.
Laby : Trouverez-vous la sortie du labyrinthe.
Débuté par
Esprit
, mars 02 2010 10:45
7 réponses à ce sujet
#1
Posté 02 mars 2010 - 10:45
#2
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
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
@robocop: le wiki du créateur avec les sources
http://www.pps.jussieu.fr/~gimenez/laby/
sinon dans les dépots ubuntu
#4
Posté 02 mars 2010 - 04:32
Ok, je viens de l'installer.
Mais il y a une doc avec toutes les fonctions disponibles ?
Mais il y a une doc avec toutes les fonctions disponibles ?
#5
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 ! :-)
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
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...
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
Posté 03 mars 2010 - 02:24
Ok, bon, j'ai fais ça rapidement :
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.
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
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...
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]
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