Bonjour,
Je ne me suis pas penché suffisamment sur ce code pour déceler l'origine du problème (quel est-il précisément ?). Cependant, vu que sa taille commence à augmenter, il me paraît raisonnable de t'indiquer quelques pistes pour améliorer la lisibilité de ton code.
Pour les directions, tu peux utiliser ceci :
type direction = N | S | E | W
Ça te permet ensuite de remplacer les séries de if...then...else imbriqués par un filtrage simple (mais tu peux aussi filtrer des entiers) :
1 2 3 4 5 6
|
match direction with
| N -> ...
| S -> ...
| E -> ...
| W -> ... |
Pour le paramètre direction, justement, essaie de te passer d'une variable globale si tu peux. La règle de base c'est : références + variables globales = bug assuré. Il y a certes des tas de raisons pratiques d'adopter ce style de programmation mais ça ne devrait pas pour autant devenir le choix par défaut. Même remarque pour la variable compteur.
Dans ta fonction tour_pledge, on lit presque quatre fois la même chose ! Le copier-coller est à bannir de la programmation. Tu peux pourtant factoriser très simplement :
1 2 3 4 5 6 7
|
let tour_pledge (x,y) =
set_color red;
let a, b = match direction with
...
in
if (!compteur <> 0) & (not mur_devant (x+a) (y+b)) then pivote_a_gauche |
En Caml le « et logique » se note &&. La notation & est obsolète.
Enfin, pour nos yeux, merci d'utiliser les balises CODE.
Je pense qu'en éclaircissant le code de cette façon, les erreurs deviendront plus faciles à traquer !
Cordialement,
Cacophrène
Partager