begin process at 2012 02 13 08:20:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > LABYRINTH GENERATOR V1.0

LABYRINTH GENERATOR V1.0


 Information sur la source

Note :
9,71 / 10 - par 7 personnes
9,71 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Jeux Niveau :Initié Date de création :17/07/2002 Date de mise à jour :18/07/2002 19:23:40 Vu / téléchargé :6 878 / 475

Auteur : Cyrus

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

 Description

Cliquez pour voir la capture en taille normale
LABYRINTH GENERATOR v1.0
Prog/dev : Cyrus the great

Description :
-------------
Labyrinth Generator est un programme permettant de générer, selon une clef aléatoire, des labyrinthes d'apparence classique.

Note de l'auteur :
------------------
Jeux & Stratégies était un magasine sur les jeux de rôles, jeux de société et jeux vidéos. Dans ce mag, il y avait également un concours de prog permanent, qui consistait en la création du meilleur algorithme de génération de labyrinthes. Alors que j'étais encore gamin, ce concours me passionnait. C'est pour cela que j'ai créé ce programme. Je trouve d'ailleurs que le résultat est plus que potable, donnant au labyrinthe un bon aspect, et sachant qu'il est possible de le parcourir en tout point, je pense que c'est une réussite. Mais bon, passons aux exlications techniques, car il n'y a que ça de vrai.

Principe de génération du labyrinthe :
--------------------------------------

Voici l'idée de base :

1 - On crée 2 tableaux de la dimension du labyrinthe :

1er tableau : Murs
2eme tableau : Cases initialisées

2 - On initialise ces tableaux en disant qu'il y a partout des murs et qu'aucune case n'est initialisée.

3 - On recherche une case non initialisée dans la table des "Cases initialisées".

4 - Sur cette case, on lâche une taupe virtuelle qui va creuser (détruire les murs) au hasard, en prenant à chaque case une direction aléatoire vers une case non initialisée. Partout où elle passe, on dit que les case sont initialisées. Lorsque la taupe se bloque (lorsqu'elle n'a plus aucune direction vers une case non initialisée où aller), on reboucle en 3.

5 -  Si on ne trouve plus de case non initialisée, cela veut dire que C'EST FINI !

Voilà pour l'idée de base, qui est relativement simple. Voici les problèmes rencontrés par cet algorithme et leur solution :

- Pb : Il y a des blocs isolés, qui ne sont pas très esthétiques dans le labyrinthe.
> Sol : On fait une recherche de ces blocs, et pour chacun de ceux-ci, on les relie par un mur au reste du labyrinthe.

- Pb : On ne peut pas aller partout dans le labyrinthe.
> Sol : Sur la case où la taupe est lancée, (juste avant de la lancer) on détruit un mur vers une case déjà initialisée.

- Pb : Il n'y a toujours qu'un seul chemin possible d'un point à un autre du labyrinthe. Ce serait bien de pouvoir tourner en rond.
> Sol : Sur la case où la taupe se bloque, on détruit un mur vers une case déjà initialisée.

Interface :
-----------

/// Menu principal ///

- "Name" : Nom du labyrinthe. Il est affiché sur la barre de titre de la fenêtre du labyrinthe.

- "X Dimension" : Dimension horizontale du labyrinthe en cases. Seules les valeurs impaires sont acceptées. Remarque : j'ai volontairement non bridé le maximum, mais gare aux plantages mémoire.

- "Y Dimension" : IDEM pour la dimension verticale.

- "Random key" : C'est la clef aléatoire qui permet d'initialiser les tables de hasard utilisées.

- "Labyrinth always possible" : Cochez ça pour pouvoir aller partout dans le laby.

- "Different itineraries" : Cochez ça pour casser la linéarité du laby.

- "Forbid isolated squares" : Cochez ça pour qu'il n'y ai pas de petits blos isolés dans le laby.

- "Make it !!!" : Lancement de la génération du labyrinthe. A la fin de la génération, la fenêtre de labyrinthe apparait.

/// Fenêtre du labyrinthe ///

- Menu contextuel : Cliquer sur le bouton droit de la souris pour le faire apparaître.

- "Copy to clipboard" : Permet de copier le labyrinthe dans le presse-papier, pour le retravailler avec d'autres outils graphiques après.

- "Close this window" : Fermeture de la fenêtre du labyrinthe.

A propos du logiciel :
----------------------

Ce petit programme peut être utilisé pour créer des labyrinthes pour des jeux. Donc si vous vous en sentez le courage, tout est prêt pour l'export. J'ai commenté le programme entièrement en anglais, ce qui est toujours mieux pour le portage dans des programmes externes. Tous les modules et procédures sont expliquées clairement, donc cela ne devrait pas poser de problème majeur. Pour ma part, je ne compte pas améliorer l'algorithme, que je trouve suffisament performant, mais je pense l'utiliser pour créer un petit jeu de desktop labyrinth sympathique, en rajoutant peut-être clefs, portes et temps limit. A méditer.

Sur ce, bon courage et bonne prog !

Cyrus the great

Source

  • Code + EXE + Lisezmoi.txt ---> ZZZip
Code + EXE + Lisezmoi.txt ---> ZZZip 


 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 CALCULATRICE HORAIRE ET CONVERTISSEUR MINUTES <=> CENTIÈMES ...
Source avec Zip Source avec une capture Source .NET (Dotnet) AMÉLIORATION DE LA FONCTION 'EXÉCUTER' DE WINDOWS XP : ADVAN...
Source avec Zip Source avec une capture INDENTATION CONFIGURABLE DE CODE VISUAL BASIC
Source avec Zip Source avec une capture DÉTECTION DES VARIABLES INUTILISÉES DANS UN PROJET VISUAL BA...
Source avec Zip MAJ PROJETS VB POUR GESTION MULTILINGUE

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) DES CHIFFRES ET DES LETTRES par ShayW
Source avec Zip Source avec une capture FAIRE REBONDIR PLUSIEURS BALLES par pierreh51
Source avec Zip Source .NET (Dotnet) JE DES BRIQUES MOUVANTES par alpha5
Source avec Zip Source avec une capture TOWER BATTLE 2 par Softmama
JEU D'ADRESSE ,JEU DE TIR À LA SOURIS par yvesdudu

Commentaires et avis

Commentaire de Nox le 18/07/2002 06:17:50

WoW! 9/10 !!

... jveux ton fond decran!! :P

Commentaire de thekingoftheweb le 18/07/2002 11:26:16

10/10 -&gt; Franchement l'auteur c'est un boss.
Pourquoi je suis pas bon en maths :'( Pourquoi ?!

@+
King
www.jeuxenligne.fr.st

Commentaire de mic le 18/07/2002 17:55:40

exellent, pendant longtemps étant petit j'ai essyais de créer des labyrinte sur des bouts de papier, je n'ai jamais réussi. Et je me demandais tjs comment ils faisaient ds les magazines. Depuis j'ai compris et mon petit frère essaye de faire la même chose. Je suis sur que ce programme va lui découvrir la cléf de l'egnime. L'algo est super.

Allez 10/10
@++

Commentaire de mic le 18/07/2002 17:57:00

au fait comme nox, ton fond d'écran est super. Si tu veux bien le faire passer c'est pas de refus.

Commentaire de Cyrus le 18/07/2002 19:41:37

Donne-moi ton adresse e-mail et je te l'envoie. En tout cas, bonne chance pour ton frangin. Je faisais aussi des labyrinthe sur papier, et c'est comme ça que m'est venue l'idée de l'algorithme.

Commentaire de jon256 le 18/12/2003 09:47:42

WOUAW !

Merci pour le prog !

Dits, le fond d'écran tu pourrais pas me l'envoyer aussi ? STP

(maximum_487@hotmail.com)

Encore merci pour tes prog plus génieaux les uns que les autres  :-)

Commentaire de jon256 le 18/12/2003 09:51:54

Enfin après avoir vu la date de la dernière mise à jour je ne sais pas si tu a encore le fond d'écran ?

Commentaire de Zeroc00l le 15/04/2004 18:27:33

Euh une question dans les textbox_lostfocus pour les dimension du labyrinthe, a quoi sert :

    If Val(txtXDimension.Text) / 2 = Int(Val(txtXDimension.Text) / 2) Then
    txtXDimension.Text = Format(Str(Val(txtXDimension.Text) + 1), "#")
    End If

pk faut il obligatoirement un nombre impair ?

Commentaire de Cyrus le 28/02/2005 10:44:07

Je sais qu'il y a prescription vu la date du post, mais je tiens à répondre à ta question, Zeroc00| :

il faut que le labyrinthe aie une dimension X et une dimension Y impaires pour respecter l'alternance couloirs-murs. La taille mini d'un laby tel que je les conçoit est donc de 3 cases (une case vide entourée de murs).

Commentaire de Zeroc00l le 01/03/2005 17:31:03

ok,
pk ne pas utiliser if truc mod 2 = 1 ?

merci Achenar... euh Cyrus ;)

Commentaire de BruNews le 01/03/2005 17:35:28 administrateur CS

Tester parité ou non d'un nombre:

If nbr And 1 Then IMPAIR

se fait ainsi en 1 cycle processeur, +- 17 fois plus rapide qu'une division (modulo).

Commentaire de Zeroc00l le 02/03/2005 03:39:38

ouais sauf que le probleme c'est que sous vb  il fait pas le ET binaire ...
Il considère le 1 comme VRAI
Donc ta condition revient a savoir si nbr est =/= de 1 ou non !

A moins que je n'ai oublié une partie de la syntaxe du vb !

Commentaire de DuFFBeeR le 09/11/2006 06:06:18

10/10 j'ai cherché longtemps un algorithme similaire à celui-ci et je dois avouer qu'il est à la hauteur de mes attentes. Je l'ai porté en C avec une structure de "graphes" pour être facilement solutionable. Ceci dit, cet algorithme vaut tous les points que j'ai eu dans mon travail pratique pour ma fonction genererLabyrinthe :) Juste "légèrement" dommage qu'il n'est pas PARFAIT avec des tailles paires ...

Commentaire de Renfield le 16/04/2007 15:55:04 administrateur CS

même genre, autre algo de génération. Il génère des laby dits parfaits (pas d'îlots) :

http://www.vbfrance.com/code.aspx?ID=42175

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
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,733 sec (4)

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