bonjour, j'essaye de faire un programme qui génere des labyrinthe parfait en C, pour en faire un jeu
vous pouvez m'aider a faire mon plan svp pour mon labyrinthe je vois pas trop comment faire,
j'ai un double tableau de char c'est ma grille de "base", chaque case est entourée de murs que je vais enlever les murs ce sont des pipes avec des '_'
je gere pas encore les nombres impaires pour la taille de mon tableau
et j'essaye de faire la méthode exaustive , par contre avec un char ** je ne vois pas trop comment faire je suis un peu perdu , il faut que je stock les postions, et il faut que je mette
un état true or false pour savoir si la case a deja été visitée ou non
quelqu'un peux m'expliquer en detail etape par etape svp
mon tableau de char il ressemble à sa quand je l'affiche
_ _ _ _ _
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
|_|_|_|_|_|
Si tu veux faire de la "bonne" façon, il faut que tu produises ton labyrinthe sous forme d'un graphe.
http://fr.wikipedia.org/wiki/Mod%C3%A9lisation_math%C3%A9matique_d'un_labyrinthe
Après, si ça te dérange pas de faire quelque chose de moins complexe (langage C oblige), tu peux reproduire ton labyrinthe sous forme de double tableau de structure, avec des variables de style up, left, right, down qui sont des booleans.
Je te conseille de créer une structure case qui contient des informations sur les murs autour d'elle.
Du genre struct case
{
int nord, sud, est, ouest;
}
Et tu t'en sers avec un code du genre 1 = mur et 0 = pas de mur
Donc t'auras un tableau de cases à 2 dimmensions.
Ensuite t'as plus qu'à casser certains murs en suivant une certaine règle (ça dépend de ta définition de la perfection )
merci de vos réponses mais avant de penser a la génération de
labyrinthe j'ai un petit probleme ,j'essaye de resoudre un segfault
j'affiche bien ma grille mais à la fin de l'affichage il y a un segfault,
voici mon code:
http://pastebin.com/e8e7wGhC
quelqu'un peux me dire d'ou sa vient svp
je segfault lorsque je mets des nombres pairs en paramètre
c'est bon en faite c'est dans le aff(char **tab) que j'ai segfault
pour savoir si j'ai deja visité la case est ce que c'est bon de
faire un int ** et de le remplir a 1 lorsque je suis dans la
case?
sa va me servir de condition pour ma boucle while je lui dirai que tant qu'il y a encore 0 dans mon tableau d'int je continue a etre dans la boucle
ou est ce qu'il y a une meilleur façon de le faire? je cherche a trouver une condition pour ma boucle while
est ce que quelqu'un peux m'expliquer cette phrase, qui vient de wikipedia dans la methode exhaustive
"Puis on regarde quelles sont les cellules voisines possibles et non visitées et on stocke la position en cours."
j'ai un int ** remplis de 0 (toutes les cellules sont marqués comme non visités)
ensuite ma méthode etait d'etre en une boucle lorsqu'il y a encore des 0 dans le tableau d'int mais c'est illogique car si le tableau est remplis de 1 sa voudrai dire que mon tableau est completement vide, a chaque visite je casse un mur
lorsque je commence a entrer dans le tableau toute les cases sont non visitées, donc non visitées = cellules possibles?
j'ai presque terminé j'aurai juste besoin d'aide pour stocker des coordonées,
je veux stocker les coordonées de chaque case sur lequel je suis
passer, par exemple tab[1][2] ensuite il va à la case tab[2][2];
je voudrai stocker le x et le y et je vois pas trop comment
faire peut-être dans un int**?
int **pos_x_y que je vais malloc,
ensuite lorsque je vais me deplacer dans le labyrinthe,
a chaque case je stocke x et y dans le pos_x_y[i][0] = x; pos_x_y = y;
donc je vais devoir malloc de taille (longueur * largeur) + 1? //+1 pour le NULL
?
je crois je me suis répondu a ma question en faite c'est bon