Accueil > Forum > > > > Algorithme Labyrinthe en c
Algorithme Labyrinthe en c
mercredi 11 juin 2008 à 16:50:41 |
Algorithme Labyrinthe en c

tiquent
|
Bonjour à tous, Je suis étudiant débutant en langage c, mon projet et de générer et réaliser l'interface graphique d'un labyrinthe. J'ai choisi la méthode exhaustive partant d'un labyrinthe où chaque porte est fermée ( voir [ Lien ] ) J'ai choisi comme interface graphique, SDL, pour gérer l'affichage du labyrinthe. Le labyrinthe aura la possibilité d'être sauvegardé, trois niveaux de difficultés devront être possible. Je cherche donc un algorithme qui concorderait avec ce programme assez rapidement car comme tout les étudiant je m'y prend au dernier moment. ps: le code a quasiment été finit par un camarade mais son implication et le temps qu'il nous reste l'empéche de faire cet algorithme et j'avoue que j'aimerais comprendre le fonctionnement de son code via un algorithme. Merci d'avance.
|
|
mercredi 11 juin 2008 à 21:15:50 |
Re : Algorithme Labyrinthe en c

coucou747
|
euh... son turc est tres bien explique hein... je l'ai lu dans un linux mag, il y a plusieurs annees.
dit au moins ce que tu ne comprends pas...
|
|
jeudi 12 juin 2008 à 11:12:18 |
Re : Algorithme Labyrinthe en c

tiquent
|
en fait j'aimerais avoir un arbre algorithmique afin de comprendre le déroulement du programme car j'ai lu et je pense bien cerné le sujet mais je ne sais pas par quel bout le prendre !! merci de t'interresser a mon sujet.
|
|
jeudi 12 juin 2008 à 11:32:27 |
Re : Algorithme Labyrinthe en c

coucou747
|
un arbre algorithmique ? c'est quoi ?
des programmes qui font ca, j'en ai fait un en C#, un en javascript, et en C aussi... c'est vraiment pas dur a faire...
|
|
vendredi 13 juin 2008 à 11:45:19 |
Re : Algorithme Labyrinthe en c

coucou747
|
http://www.javascriptfr.com/codes/LABYRINTHE_24661.aspx http://www.javafr.com/codes/APPLET-GENERATEUR-LABYRINTHES-ALEATOIRES_40576.aspx http://www.csharpfr.com/codes/GENERATEUR-LABYRINTHES-ALEATOIRE_44802.aspx sinon, j'avais un petit texte au sujet des labys... copie le dans un .txt, t'auras un meilleur rendu...
Quelle est la deffinition mathématique du labyrinthe ? Il n'y en a pas exactement... C'est pour cette raison qu'on ne peut pas faire de générateur universel de labyrinthe, on ne peut que faire une version des multitudes de générateurs possibles, et ce générateur ne fournira qu'un seul type de labyrinthe sur la multitude de labyrinthe possible...
Pour la suite, on considerera que notre personnage n'a pas droit de revennir sur ses pas : si il passe de la case C1 a la case C2, alors de la case C2, il n'a pas le droit d'aller vers la case C1. On appellera ca faire un demi tour (sur une seule case donc).
Si on désires faire une animation 3d d'un gars qui parcourt un labyrinthe en revennant toujours au même endroit, alors on doit faire un labyrinthe qui possède plusieurs chemin possible pour aller d'un point à un autre (ou alors, le gars devra faire des demis tours, ce qui est interdit)... Pour la suite, on nomera cette propriété : la propriété deuxchemins.
Pour certains jeux vidéos, on devra générer des labyrinthes deuxchemins, et d'autres, on devra faire des labyrinthes simplechemin, exemple: vous faites un rpg, vous devez poser des objets spéciaux dont le personage principal a obligatoirement besoin, vous devez alors faire un labyrinthe simplechemin car vous serez alors sur que le personnage passera au moins par les cases de votre chemin.
Pour d'autres jeux, genre un doom-like ou un pacman, la solution plusieurs chemins peut être plus appropriée car le personnage pourra surprendre son adversaire plus facilement.
Si on choisit deux cases au hazard, dans un labyrinthe simplechemin, il existe un chemin unique qui va d'une case à l'autre. Dans un labyrinthe deuxchemins, il existe au moins un chemin qui va d'une case à l'autre. Tout labyrinthe simplechemin est aussi un labyrinthe deuxchemins. Un labyrinthe deuxchemins est strictement deuxchemins si il n'est pas simplechemin.
Ceci est un simplechemin : __________________ |____ |______ _| | |______ |_| | | |______ |__ | | | | | _______| | | | | |______ | _| | | | | __ |___| _| | |___| _| ___| | | | | |_________| | |_|_______________|
et ceci est un deuxchemins strict. __________________ |____ |______ _| | |__ ___ |_| | | |______ |__ | | | ____ __ | | | | |_ ____ | _| | | | __ |___| _| | |___ _| ___| | | | | |___ _____| | |_|_______________|
Pour l'obtennir j'ai enlevé des murs aux premier... On observe que l'on peut faire une boucle (partir dans une direction, et revennir à son point de départ sans jamais revennir sur ses pas).
Certains labyrinthes ne sont pas simplechemin, et ne sont pas non plus deuxchemins. Lorsque l'on choisit deux cases au hazard, il n'y a pas forcément de chemins qui mène d'une case à l'autre :
__________________ |____ |______ _| | |__|___ |_| | | |______ |__ | | | | | _______| | | | | |______ | _| | | | | __ |___| _| | |___| _| ___| | | | | |_________| | |_|_______________|
On observe qu'au coin en haut à gauche, on est enfermé sur un nombre réduit de cases... Il n'existe pas de chemin pour aller du coin en haut à gauche au coin en bas à droite. Ce labyrinthe sera nommé paschemin.
Un pacman utilise un deuxchemins, un rpg utilisera plus souvent un simplechemins, et peu de jeux utilisent des paschemin, car une case à laquelle on ne peut accèder et qui est quand même en mémoire, c'est domage... Les paschemins peuvent etre generes en ajoutant des murs aleatoirement, les autres, c'est plus complique...
Pour générer un deuxchemins, ou un paschemin, il n'existe pas vraiment de formule magique... Pour un deuxchemins, on part d'un simplechemin, et on ouvre quelques cases, et pour un paschemin, il serait domage de voir son pacman emprisoné dès le départ, alors on ne s'interessera pas à ce cas...
GENERATION D'UN SIMPLECHEMIN
On démare avec un bloc de portes... Le but de l'algorithme : ouvrir juste assez de portes pour permettre une chemin aléatoire de toute cases vers toute autre cases... __________________ |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_|
On démare à un endroit choisi (il constituera d'un des deux points les plus éloignés...) Dans l'exemple on choisira le coin superieur gauche. le principe : on libère une case qui touche et sur laquelle on n'est pas encore allé, aléatoirement, et on note : "je suis passé sur cette case", et on recommence jusqu'a ce que l'on ne puisse plus (jusqu'a ce que toutes les cases que l'on touche aient déjà étés visités...) alors on retourne sur nos pas, et recommençons... Une idée d'algo récursif se fait sentir ;) __________________ |__ |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| __________________ |__ |_|_|_|_|_|_|_| |_|_____|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_| |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| __________________ |__ |____ |_|_|_|_| |_|____ | |_|_|_|_| |_|_|_|___|_|_|_|_| |_| |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| Ici, on se trouve bloque : aucune case ne permet de continuer, alors on doit retourner sur nos pas, jusqu'a ce que l'on trouve une case qui touche une case sur laquelle on n'est pas allée... __________________ |__ |____ __|_|_|_| |_|____ | |_|_|_|_| |_|_|_|___|_|_|_|_| |_| |_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| |_|_|_|_|_|_|_|_|_| voilà, et on continue comme ça... Le chemin le plus long partira forcément du coin superieur gauche...
Sur ce principe, on peut faire des labyrinthes simplechemin de dimentions n*n en un temps proportionnel au nombre de cases (enfin je crois). ______________________________________________________________________________ |____ |______ __ | ____ |__ ____ ___________________| ____ | __ | _| | |______ |_|__ |___| _|__ |__ | _| __ | __ | ____ | | | _| _| | | | |______ |__ | _|__ | __ |__ |_| | | |___| |___| _|___| | |__ | |__ |_| | | | _______| | | ___| | __ |__ |_|____ |__ __ | | _____|__ |_|__ |____ | | |______ | _| | __ | | |_____|______ |_____|__ |_| |____ |__ _| ___| _| | | | __ |___| _|__ | | |__ | ____ _| | ____ |__ | __ |__ |__ | | | ___| |___| _| _| ___|___| |___| |__ |___| ___| |___| ___| | _| _| |__ | | | _| |__ |__ |____ | ____ | | | _| ___|____ |____ | | ___|__ |___| | _| | |__ |__ | | | | |___| | |___|__ |____ | |__ | _| | |__ _|__ | _|__ | | | ___| | | |___| | | _|___| __ |__ _| | |_____|__ | |__ | | ___| | | | | _____| | ___| | |_________| |__ | | | |__ __ |___| _|_|___| | |_| | | | | _____|__ | _|__ __ | ____ | |_| | |__ |__ |__ | _| | ___| | ___| | | | |____ _| | | |_____| ___|____ |_____| _| _| | _| | | | _| |__ _| | | | | | | _| | |______ |__ ____ |______ | | | | _____|_____| | |__ | | | |___|___|_| |__ |______ _|___| |____ | _| | _|_| | _______| ___| | | |_____________| _| | _| __ | | | _| | |__ |_______|___|__ | ___|____ | | | _| __ | | ___| |__ | | |___| | ___|_____| ________ | _|__ | __ |_| | |__ | | | | | | | _|__ |_| | __ | |___| __ | ____ | | |____ |___| | | | | _|__ |___| | |____ |_____| | _|__ ___| _|__ | _| | |____ | ____ |___| | | | _| _|____ |__ |__ | | |__ | |__ | _|_____|__ | | _|__ | | | _| | |_____| | | _____| _|_____| | |__ |____ | | | | _| _|___| |_____|__ | |__ | ___|_|______ |__ | _____| |____ |___| | | | | | _| _____|__ | | _| | _|____________ |__ | |__ | _|____ | | ___| |___| |__ | |__ __ |___| | | | | | | __ | | _|___| _|__ _| | |____ |______ | | |_____| |____ |___| | | |___| | | | |_|__ ___| |__ _| | |______ | ___|__ |________ ___| | __ | |_______| |__ | |____ | | _| _| |_| |__ | | | _| | |_______| | | | |________ | _| |____ _|___| |__ |____ |__ | | | | | |__ | | |____ | ___| | | | __ | _| | | | |_| _________| | | _|__ | | |_____| | | | |__ | _| | | | |_______|___|___________| | | |_| |_____| |_________| | | |_____|__ | | |_| | | __ | | ____ _______|__ |_____| _____| __ | | | |____ ___| | | _| |__ |___| | |_____| |______ | __ |__ | ___| _| |_| | | | | | | | | |_______| _| | | _____|______ |_|__ |_____| __ | |______ |___| | |_| | | | | __ |__ | ___| |__ | | ___|_______| __ | | _| | __ |__ _| |__ | |___| |__ |__ |__ |__ | | |___|__ __ |____ | _| |__ | |__ | |___| _| _|____ | | | | |__ |_____|__ |______ | |__ |__ | _|__ |__ | |__ | |_______| | | _| | _| | _| | _| | _____|___| | _| | |__ |_| | | | |____ | | | |_| | | |__ | |__ | | |__ _|____ |__ ___|_____| |_| _| _| | | | ___|___| |__ |__ | | |____ |___|__ |_____| _| _| | __ | _____|__ | ___| | | __ |__ |__ | | |_____________|_____________|_______|_____________|_______|_|_____|_______|___|
|
|
mardi 27 janvier 2009 à 09:20:56 |
Re : Algorithme Labyrinthe en c

kartajtn
|
//*parcour.c *fichier contenant l ensemble des fonctions permettant de parcourir le *labyrinthe */ #include<stdio.h> /* Médinoc: La macro assert() permet de tester des invariants, terminant le programme si une condition supposée toujours vraie est fausse. */ #include <assert.h> /*#include"../../include/parcour.h"*/ //#include"../../include/affichage.h" #define H 4 #define B 3 #define D 2 #define G 1 /* Médinoc : À quoi vont te servir ces diagonales, finalement ? */ #define HD 0 #define HG 5 #define BD 6 #define BG 8 /** la fonction avance permet d'avancer dans le labyrinthe */ void avance(); int case_droite(); int case_devant(); /* Médinoc: Suppression de variables locales: Utiliser des pointeurs à la place. */ void avance(int *pi, int *pj, int dir) { int i; int j; assert(pi != NULL); assert(pj != NULL); i = *pi; j = *pj; /* Médinoc: Utiliser un switch() à la place de ce lot de if... */ switch(dir) { case H: i--; break; case D: j++; break; case HD: i--; j++; break; case HG: i--; j--; break; case B: i++; break; case G: j--; break; case BG: i++; j--; break; case BD: i++; j++; break; default: /* Normalement, on ne passe jamais ici, car dir a toujours l'une des huit valeurs testées. */ assert(0); break; }/* switch */ *pi = i; *pj = j; } /*la fonction permet de se deplacer si c'est possible */ /* Médinoc: Suppression de variables globales. */ int case_devant(intconst laby [][100], int i, int j, int dir) { switch(dir) { case H: return laby[i-1][j]; case D: return laby[i][j+1]; case HD: return laby[i][j+1]; case B: return laby[i+1][j]; case HG: return laby[i-1][j-1]; case G: return laby[i][j-1]; case BG: return laby[i+1][j-1]; case BD: return laby[i+1][j+1]; default: /* Normalement, on ne passe jamais ici, car dir a toujours l'une des huit valeurs testées. */ assert(0); return1; }/* switch */ } /* Médinoc: Suppression de variables globales. */ int case_droite(intconst laby [][100], int i, int j, int dir) { /* Médinoc: On peut faire plus simple en choisissant correctement les valeurs de dir, mais j'expliquerai à part. */ switch(dir) { case H: return laby[j-1][i]; case D: return laby[j][i+1]; case HD: return laby[j][i+1]; case B: return laby[j+1][i]; case HG: return laby[j-1][i-1]; case G: return laby[j][i-1]; case BG: return laby[j+1][i-1]; case BD: return laby[j+1][i+1]; default: /* Normalement, on ne passe jamais ici, car dir a toujours l'une des huit valeurs testées. */ assert(0); return1; }/* switch */ }
/*la fonction suivante permet de connaitre la possibilité de passage *suivant une direction*/ /* Médinoc: Nom de fonction oublié.
Ouah, ici, c'est vraiment, mais alors vraiment le bordel. Tu fais tes boucles for sur tes variables globales, mais en même temps, tu les modifies avec avance()...
J'ai viré toutes les globales, mais il se passe dans cette fonction des choses vraiment pourries, et je ne suis pas assez fort pour déboguer ça... */ void UneFonction(void) { int laby[100][100]; /*m.donnees=laby;*/ int i,j; int dir = 0; /* Médinco: dir n'était pas initialisé. */ for(i=0 ; i<100 ; i++) { for(j=0 ; j<100 ; j++)//( i<100 && j<100 ) { { /* Médinoc: Alors ça, c'est vraiment, mais alors vraiment VRAIMENT moche. Avec tous ces if sans accolades, c'est pratiquement impossible de s'y retrouver. Surtout qu'il manquait deux accolades à la fin du fichier... */ if( case_droite(laby, i, j, dir) == 0) // on se tourne vers la droite // un moyen plus simple est : dir = ( dir+1 ) % 4; if( dir == G ) dir = H; else { dir = dir + 1; // puis on avance d'une case avance(&i, &j, dir); } else if( case_devant(laby, i, j, dir) == 0) { avance(&i, &j, dir); } else // on a plus le choix, // on se tourne vers la gauche if( dir == H ) dir = G; else dir = dir - 1; // le moyen plus simple était d'écrire : dir = ( dir-1 ) % 4; } } } }
|
|
mardi 27 janvier 2009 à 13:26:33 |
Re : Algorithme Labyrinthe en c

coucou747
|
sur un petit programme, tes remarques sont inutiles
|
|
samedi 19 décembre 2009 à 12:01:33 |
Re : Algorithme Labyrinthe en c

fleura2905
|
fleura
je veux réaliser un jeux de labyrinthe mais je trouve des problèmes,si c'est possible j'ai besoin d'aide
|
|
mardi 26 janvier 2010 à 15:06:07 |
Re : Algorithme génétique Labyrinthe en c++

yakouta86
|
BONJOUR TT LE MONDE JE CHERCHE UN PSEUDO CODE DE PROBLEME DE LABYRINDE AVEC ALGORITME GENETIQUE PAR C++ MERCI D'AVANCE
salut tout le monde
|
|
Cette discussion est classée dans : graphique, algorithme, interface, labyrinthe, étudiant
Répondre à ce message
Sujets en rapport avec ce message
Interface Graphique [ par mbgh ]
cherche cours/sources/tutoriel sur interface graphique ( boites de dialogue surtout ....)pour MS Visual Studio 6.0( c++ )OS : Windows Me/2000Merci d'a
interface graphique [ par loopy ]
Salut, je suis a la recherche de petits cours pour apprendre a faire une interface graphique (Borland).Merci !loopy
Uno [ par tony84 ]
je cherche un jeu de uno en c avec interface graphique ou non si possibleaussi un programme en c ou c++ interface graphique ki me permet de tracer des
api c++ sous linux( interface graphique) [ par mbab ]
Bonjour, je debute en c++ et je dois realiser une interface graphique ( IHM ) en c++ sous linux. Y a t-il des api tel win32 (pour windows )mais sous l
Interface graphique [ par Oumbre ]
Salut à tous !Voilà mon problème : j'ai un programme qui est écrit en C pour windows et je dois créer une interface graphique qui va avec. De plus, ce
Interface graphique C++ [ par BenjZ ]
Salut à tous,Je dois créer une appli graphique pour windows en C++, or je n'ai jamais programmé qu'en mode console, quelqu'un pourrait-il me donner l'
vc++ et interface graphique [ par 7574 ]
ou je peut trouver de(s) cours complet sur le vc++ et les interfaces graphiques(MFC32.exe, WIN32consol app,...)merci a+
Interface graphique [ par pipic ]
Slt,j'ai réalisé une appli en c++ enfin plutot le code source. Maintenant je voudrais réaliser l'interface graphique sous visual c++J'ai réussi à crée
Progrmmation avec interface graphique [ par rhodan51 ]
bonjour,j'ai acheté l'excellent bouquin Comment programmer en C++ de Deitel et Deitel mais celui ci ne programme que sous dos et non sous l'interface
Interface Graphique [ par yodalf ]
Comment on fait pour creer une interface graphique qui soit autre que celle de windows pour un prog?
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
RE : SAC A DOS RE : SAC A DOS par hadjkaddour
Cliquez pour lire la suite par hadjkaddour
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|