begin process at 2012 05 27 18:37:22
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > MAZER:GENERATEUR DE LABYRINTHE

MAZER:GENERATEUR DE LABYRINTHE


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Niveau :Initié Date de création :13/12/2003 Vu / téléchargé :5 584 / 338

Auteur : zanidip

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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

  • #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
  • }
#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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture HORLOGE A AIGUILLES (DEV)
Source avec Zip Source avec une capture ECRAN MATRIX BIS
Source avec Zip Source avec une capture ECRAN MATRIX
Source avec Zip AFFICHAGE DU TABLEAU ASCII ET DES COULEURS DE TEXTCOLOR(X);
Source avec Zip ESSAI D'ALGORYTHME GENETIQUE (DEV C++ 4)

 Sources de la même categorie

Source avec Zip Source avec une capture JEU DES CARTES par eapaceinfo
PROGRAMME DE JEU DE MPT par KerizGarmm
Source avec Zip Source avec une capture JEUX SERPENT par antho974
Source avec Zip Source avec une capture PENDU EN SDL par Damsou91
Source avec Zip STATE MACHINE MODIFICATION MATH BUCKHAM par billybones79

Commentaires et avis

Commentaire de djl le 13/12/2003 16:51:34

yessss, c'est exelent :-) 10/10 parce que moi l'algo me parait pas si évident que ca
et ca va trop me servir, c'est justement ce que je cherchais a faire!
juste une question, ya un seul chemin possible pour aller de A vers D ou il y en a plusieurs?

Commentaire de dmothes le 13/12/2003 21:14:26

euh...quelqu'un peyt-il m'expliquer comment ça marche?

Commentaire de zanidip le 13/12/2003 22:00:53

djl-&gt; oui un seul chemin possible
dmothe-&gt; 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!

Commentaire de Kirua le 14/12/2003 00:43:55

ah c'est vachement chouette! et c'est de la belle débrouillardise avec du mode texte, très bien ;-)

Commentaire de zanidip le 14/12/2003 10:31:09

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

Commentaire de bebert218 le 23/01/2004 16:29:28

J'aurais juste une question : comment trouver le critère d'arrêt de la boucle ???
ça vient d'une formule ??? si oui laquelle ???

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,530 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales