Mazer:generateur de labyrinthe

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

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.