Labyrinthe en c
| haytra |
Posté le 16 Déc 2008 à 10:46
|
|
![]() Messages : 5 GCPoints : 1724 |
Salut a tous!Ma question concerne la creation, d'un labyrinthe en c. L'utilisateur a face a lui une grille n*n correspondant aux limites du labyrinthe. Au debut un curseur est positionné sur la case de départ . La definitiondu labyrinthe se fait en deplacant le curseur de case en case. Une fois le labyrinthe defini il est memorisé puis effacé de l'ecran. Alors je sait pas comment faire surtout pour la phase de memorisation et du dessin du labyrinthe a partir d'un tableau a 2 dimension |
|
| Gregouar |
Posté le 16 Déc 2008 à 13:27
|
|
![]() Messages : 989 GCPoints : 84732 |
En tout cas, pour la génération, il parait qu'il faille utiliser la méthode Fusion aléatoire de chemins. Et, c'est ou que tu bloques pour la mémorisation ? Tu fais un tableau de Case. Code :
struct Case
{
bool h,b,g,d; // Haut, bas,gauche, droite. Correspond s'il y a un mur ou non.
};
Case **monLabyrinthe;
*monLabyrinthe = new Case* [HAUTEUR] ; // Je ne sais plus comment faire un malloc en C
for(int i=0;i<HAUTEUR;++i)
monLabyrinthe[i] = new Case [LARGEUR] ;
/*Ensuite, quand tu le parcours, tu dis si sur la case à laquelle il se trouve, il y a un mur en haut, en bas, à gauche, à droite.*/
//Quant au dessin, tu reparcours tout ton tableau
for(int i=0;i<HAUTEUR;++i)
for(int j=0;j<LARGEUR;++j)
{
if(monLabyrinthe[i][j].h)
//Dessiner une ligne en haut, tout dépend de quelle bibliothèque graphique tu utilises.
if(monLabyrinthe[i][j].b)
//Dessiner une ligne en bas
if(monLabyrinthe[i][j].g)
//Dessiner une ligne en gauche
if(monLabyrinthe[i][j].d)
//Dessiner une ligne en droite
}
Ca, c'est une idée. Une autre solution serait de faire simplement un tableau de bool avec vrai si c'est un mur. Ensuite tu le parcours et tu tape un carré noir où il y a un mur. PS : C'est pour le concours du SDZ ?
Dernière édition le 16 Déc 2008 à 13:29
Holyspirit c'est :
85 Fichiers sources | 18 349 Lignes de codes 503 Fichiers ressources | 240 Mo 101 Dossiers | 2800 téléchargements |
|
| akd |
Posté le 16 Déc 2008 à 13:28
|
|
![]() Messages : 319 GCPoints : 75439 |
Pour rester dans une structure relativement simple, je pense qu'il te faut un tableau à 2 dimensions en arrière plan dans lequel tu vas stocker des valeurs différentes en fonction que la case soit accessible ou non. Après tu peux avoir un autre tableau qui permet de savoir quelles sont les positions qui ont été découvertes et une structure/classe contenant les positions x/y de ton curseur. (j'espère que j'ai bien compris la question) [EDIT]Owned par Gregouar... je voyais plus simple mais c'est une solution nakadesque ^^"[/EDIT]
Dernière édition le 16 Déc 2008 à 13:29
|
|
| Mod |
Posté le 16 Déc 2008 à 15:16
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Plutôt que new, en C, on utilisera quelque chose du genre : Code : C *monLabyrinthe = (Case**) malloc(HAUTEUR * LARGEUR * sizeof(Case*)); |
|
| Darktib |
Posté le 16 Déc 2008 à 16:20
|
|
![]() Messages : 4017 GCPoints : 347288 |
Si c'est en C en effet il n'y a pas de new. Le mieux c'est un tableau en deux dimensions, avec deux variables indiquant la position du perso dans le tableau (et donc dans le labyrinthe). Mémoriser : ou ca ? En mémoire ? => tableau. Sur le disque dur (fichier) ? tu parcours le tableau, pour chaque case tu indique sa valeur dans le fichier. Si l'algo pour sauver / charger est le meme, tu n'as pas besoin de sauvegarder la position des cases. |
|
| haytra |
Posté le 16 Déc 2008 à 18:06
|
|
![]() Messages : 5 GCPoints : 1724 |
merci pour vos reponses. C'etait pour un devoir a la fac. | |




