Mazer:generateur de labyrinthe

Soyez le premier à donner votre avis sur cette source.

Vue 9 949 fois - Téléchargée 670 fois

Description

cette source genere un labyrinthe aleatoire. il commence par chercher un point aleaoire qui sert de depart. ensuitte il créé des "pont" pour l'agrandir horizontallement ou verticalement.

Source / Exemple :


#include <iostream.h>
#include <stdlib.h>
#include <conio.c>
#include <time.h>

int main()
{

//  INITIALISATION
srand(time(NULL));
textcolor(136);    // couleur gris clair
for(int x=1;x<=25;x++)               //remplit l'ecran en gris
        {
        for(int y=1;y<=79;y++)
            {
            gotoxy(y,x);
            cout<<" ";
            }
        }

// grid est une matrice qui represente la labyrinthe
//1=relié au labyrinthe   0= pas relié au labyrinthe
int grid[40][13]={0};

textcolor(8);
grid[rand()%39+1][rand()%12+1]=1;
// met un dans une place aleatoire de la matrice (point de depart du labyrinthe

int cycle=1,a,b,nb=0;
/*cycle varie entre 1 et -1 et determine si le "pont" se fera verticalement ou
horizontalement.  nb est le nombre de cycle passé*/
       BOUCLE:
if(cycle==1)        // pont horizontal
    {
    a=rand()%12+1;      // cherche des coordonées aleatoires
    b=rand()%38+1;
    if((grid[b][a]+grid[b+1][a])==1)//si le point ce situ a la frontiere du laby
        {
        grid[b][a]=1;           //alors metre 1 dans les 2 points de grid
        grid[b+1][a]=1;
        gotoxy(2*b,2*a);        //afficher le pond a l'ecran
        cout<<"   ";
        }
        else //si le pond n'est pas a la frontiere,rechercher d'autres coordonée
        {
        goto BOUCLE;
        }
    }

if(cycle==-1)                         //même chose   pour le pont vertical
    {
    a=rand()%11+1;
    b=rand()%39+1;
    if((grid[b][a]+grid[b][a+1])==1)
        {
        grid[b][a]=1;
        grid[b][a+1]=1;
        gotoxy(2*b,2*a);
        cout<<" ";
        gotoxy(2*b,2*a+1);
        cout<<" ";
        gotoxy(2*b,2*a+2);
        cout<<" ";
        }
        else
        {
        goto BOUCLE;
        }
    }

cycle=-cycle;  // inverssement de 'cycle'
Sleep(10);     //pause de 10 ms
nb++;
if(nb!=467)    //arret si il y a eu 467 ponds (ecran remplit)
   goto BOUCLE;
   // affichage de depard et arrivé a des hauteurs aleatoires.
textcolor(226);
gotoxy(2,(rand()%12+1)*2);
cout<<"D";
textcolor(46);
gotoxy(78,(rand()%12+1)*2);
cout<<"A";

getch();  // pause

}

Conclusion :


pas de bug connu pour l'instant.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
mercredi 21 janvier 2004
Statut
Membre
Dernière intervention
23 janvier 2004

J'aurais juste une question : comment trouver le critère d'arrêt de la boucle ???
ça vient d'une formule ??? si oui laquelle ???
Messages postés
76
Date d'inscription
lundi 30 septembre 2002
Statut
Membre
Dernière intervention
25 mars 2007

merci beaucoup tlm...
si ca vous plait vous pouvez aller faire un tour sur
http://www.flint.umich.edu/Departments/ITS/crac/mazeorig.form.html
Messages postés
3006
Date d'inscription
dimanche 14 avril 2002
Statut
Membre
Dernière intervention
31 décembre 2008

ah c'est vachement chouette! et c'est de la belle débrouillardise avec du mode texte, très bien ;-)
Messages postés
76
Date d'inscription
lundi 30 septembre 2002
Statut
Membre
Dernière intervention
25 mars 2007

djl-> oui un seul chemin possible
dmothe-> ben en fait tu prend un point,le point de depart. enssuite tu cherche une possibilitée pour agrandire le laby: soit tu l'agrandit avec un couloir vertical,soit avec un couloir horizontal. tu recommence jusqu'a ce que l'espace soit plein et tu a un labyrinthe!
Messages postés
56
Date d'inscription
mardi 17 décembre 2002
Statut
Membre
Dernière intervention
11 novembre 2005

euh...quelqu'un peyt-il m'expliquer comment ça marche?
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.