Pour les couleurs : c'est possible d'utiliser des strings effectivement. Mais ça dépend combien il y a de couleurs différentes.
utiliser un type spécial qui n'aura le droit d'avoir que ces valeurs, et cela peut être plus pratique après, donc en général on fait ça. Comme ceci :type couleur = Noir | Blanc | Rouge | Bleu | Jaune | Vert;;
S'il n'y a que trois ou quatre couleurs différentes tu peuxSi tu définis ce type, ensuite quand tu taperas
Bleu ou
Blanc le compilateur reconnaîtra automatiquement qu'il s'agit d'une couleur. (Et il faudra le mettre sans guillemets, car il ne s'agit plus d'une chaîne de caractères mais d'une constante définie dans le programme.)
chaque case a quatre portes ? si oui, tu peux peut-être utiliser de nouveau un enregistrement :type mur = {haut : bool; bas : bool; gauche : bool; droite : bool};;
Mais bon ton problème principal c'est les murs. Si je comprends bienLe type booléen peut prendre deux valeurs, vrai ou faux (enfin
true et
false), tu peux utiliser
true pour représenter une porte ouverte et
false pour une porte fermée.
Note : ceci n'est qu'un exemple, si une case n'a que deux portes tu peux bien sûr remplacer cette définition par autre chose qui correspond mieux. L'inconvénient de ce que j'ai écrit là est que la porte de droite de la case 3,2 est probablement la même que la porte de gauche de la case 3,3 , et je les représente séparément ce qui n'est pas forcément malin (je pourrais me retrouver avec une qui est fermée et pas l'autre, alors que c'est la même, ce qui provoquerait sans doute un bug). À toi de voir ce qui est le mieux.
ase = {couleur : couleur; mur : mur};;
Avec ces définitions tu aurais alors :type c(cela fait référence aux types
couleur et
mur'où la répétition ^^) ettype m = {
largeur : int;
hauteur : int;
matrice : case array array;
};;
que j'ai définis plus haut, et j'appelle aussi les champs couleur et mur, dEnsuite, si
labyrinthe est une variable de type
mcase située en ligne 3 colonne 2 tu utilises :labyrinthe.matrice.(3).(2).couleur
, pour accéder à la couleur de la cette même case est ouverte tu utilises :labyrinthe.matrice.(3).(2).mur.droite
pour savoir si la porte de droite de atrice.(3).(2).mur.bas
pour la porte du bas :labyrinthe.metc.
voilà
