Labyrinthe en c

haytra Message lu Posté le 16 Déc 2008 à 10:46 Bulle
Nouveau Membre

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 :strange:
Gregouar Message lu Posté le 16 Déc 2008 à 13:27 Bulle
Avatar de Gregouar
Membre Evolué

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 Message lu Posté le 16 Déc 2008 à 13:28 Bulle
Avatar de akd
Membre Confirmé

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 Message lu Posté le 16 Déc 2008 à 15:16 Bulle
Avatar de Mod
Webmaster

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 Message lu Posté le 16 Déc 2008 à 16:20 Bulle
Avatar de Darktib
Membre Ultime

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 Message lu Posté le 16 Déc 2008 à 18:06 Bulle
Nouveau Membre

Messages : 5
GCPoints : 1724
merci pour vos reponses. C'etait pour un devoir a la fac.
Répondre
GameCorp - Site d'apprentissage et d'entraide à la création de jeux vidéo.
XHTML Valid 1.1 - Page générée en 0.0585 secondes