IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Realisation d'un algorithme de generation procedurale de donjon


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut Realisation d'un algorithme de generation procedurale de donjon
    Salut les gens,

    En me balandant il y a peu de temps, je suis tombe sur ca. Et desirant perfectionner mon C++, je me suis dis "aller, on realise ca".
    Malheureusement le 2 auteurs (l'original et celui la) sont un peu radin en code, et je galere un peu.

    Actuellement, j'en suis la http://imgur.com/byE4LaN.png (j'ai volontairement pas mis le link en affichage, c'est du 3200*1800). La gen dans le cercle a l'air plutot correcte, mais l'algo pour separer les rooms a l'air de patauger dans le yahourt.

    Est-ce que je ferais mieux de mettre de la physique avec box2d, et de tout delete ensuite? Ou quelqu'un pourrais me dire ce qu'y couille dans mon algo?

    Tous les fichiers sont >LA<.


    Merci d'avance!

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Regarde donjon.bin.sh.
    Le site utilise un script perl pour générer les donjons, dont il propose le code source, et même des explications.

    Dans mon souvenir, l'algo place des salles, puis des portes, et balade un "ver" qui creuse les couloirs.

  3. #3
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Une autre solution consiste à réaliser un quadtree(2D) ou octree (3D) pour placer aléatoirement des salles. Ensuite les lié avec un algorithme A*

  4. #4
    Membre expérimenté
    Avatar de ChipsAlaMenthe
    Homme Profil pro
    Ingénieur en eau chaude et ballon rond
    Inscrit en
    Mai 2015
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur en eau chaude et ballon rond
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2015
    Messages : 138
    Par défaut
    Wao je ne m'étais jamais penché sur ce genre de sujet, et ça fait rêver ce genre de choses ^^.
    Bon courage pour ta génération

  5. #5
    Membre Expert Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 048
    Par défaut
    Voici un article intéressant sur la génération dans Diablo 3. Ils se basent sur des tiles qu'il colle aléatoirement.
    http://www.diablowiki.net/Randomization

  6. #6
    Invité
    Invité(e)
    Par défaut
    @leternel : Je connais deja leurs donjons, en fouillant le net pour trouver le resultat qui me conviens le mieux je suis tombe dessus, mais c'est pas la forme de donjon que je cherche.

    @Astraya : Interessant comme article, mais c'est aussi pas du tout ce que je cherche.

    Update!

    Ma fonction qui renvoyais une position aleatoire dans un cercle etait pas bonne. Maintenant j'arrive a faire spawn toutes les rooms dans un cercle! http://imgur.com/uIn5Hex

    Y reste plus qu'a les separer. Si quelqu'un a l'algo sous le coude je veux bien. Mais en attendant, je vais continuer a fouiller
    Dernière modification par Invité ; 24/09/2015 à 18h31.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 641
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 641
    Par défaut
    Salut,
    Citation Envoyé par Bl4ckb0ne Voir le message
    Si quelqu'un a l'algo sous le coude je veux bien. Mais en attendant, je vais continuer a fouiller
    Ben, pourquoi ne pas utiliser "tout bêtement" un algo simple de gestion de collision (style AABB)

    après tout : toutes tes "pièces" peuvent -- en simplifiant très fort, peut être -- n'être considérées que comme des rectangles proposant une longueur et une largeur et positionnés à une place bien précise...

    Tu peux donc définir une formule de "déplacement" qui fait que chaque "pièce" s'écarte d'autant plus du centre à chaque itération qu'elle est... déjà loin du centre et, une fois que tu as corrigé la position de chaque pièce, tu peux vérifier s'il reste des pièces qui entre en collision les unes avec les autres.

    Il n'est même pas forcément nécessaire de trouver toutes les pièces qui entrent en collision : si tu n'en trouves ne serait-ce qu'une seule, tu recommence une itération d'écartement de tes pièces, avant de refaire un test de collision

    Une fois que tu n'as plus une seule collision entre les pièces, ton écartement est terminé, et tu peux commencer à supprimer les pièces qui sont "décidément trop petites", avant de les relier entre elles
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Invité
    Invité(e)
    Par défaut
    J'ai deja ma collision AABB, mais l'idee de les faire se deplacer du centre c'est pas bete du tout.

    Sinon je pensais mettre une gravite avec box2d pour qu'il se charge de les separer.

    Edit : FIXED IT!

    Je mettais a jour la position de la room dans la classe, mais pas celle de la sf::Shape (oui, j'ai honte).
    Dernière modification par Invité ; 25/09/2015 à 02h29.

Discussions similaires

  1. Algorithme de generation de grille Sudoku
    Par mazidyoussef dans le forum C
    Réponses: 1
    Dernier message: 21/01/2013, 18h53
  2. Algorithme de randomisation ... ( Hasard ...? )
    Par Anonymous dans le forum Assembleur
    Réponses: 8
    Dernier message: 06/09/2002, 14h25
  3. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18
  4. Recherche de documentation complète en algorithmes
    Par Anonymous dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 29/03/2002, 12h09
  5. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 17h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo