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

Algorithmes et structures de données Discussion :

Generateur de maps aléatoires.


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Bonjour,

    Je suis actuellement en train de penser à un petit projet personnel d'un jeu 2D avec la SDL et C++. De 2 à 4 joueurs en réseau, le but sera d'éliminer ses adversaires en leur tirant dessus.

    Les niveaux seront composés de salles disposant de 1 à 4 portes chacune débouchant sur une autre salle. Et c'est là qe ca devient interressant mais assez complexe (en tout cas pour moi). En effet j'aimerais que ces maps soit générées aléatoirement avec une methode du type:
    void GenererMap(int nbMax_salles)

    J'ai déjà répartit les salles en 4 catégories:
    -Salle avec 1 porte - Débouche sur 1 salle
    -Salle avec 2 portes - Débouche sur 2 salles
    -Salle avec 3 portes - Débouche sur 3 salles
    -Salle avec 4 portes - Débouche sur 4 salles

    Maintenant comment pourrais-je générer une map en précisant le nombre maximum de salles en paramètres ?

    Merci d'avance.

    Voila qui illustre une génération de 15 salles:

    Images attachées Images attachées  

  2. #2
    Membre expérimenté Avatar de Kujara
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 262
    Par défaut
    Crée une salle de depart.

    Pour chaque room supplémentaire, prends une salle au pif. prends une direction au pif. crée une salle dans cette direction si elle n'existe pas déja. Sinon, recommence.

    Simple mais probablement pas très interessant point de vue resultat final. A tester.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    J'ai une idée avec des random mais à voir si c'est pas trop coûteux et si il y a pas de meilleurs solutions
    NbMaxLigne = racine carré (NbMaxSalles) mais ça peut être un autre chiffre c'est juste pour essayer de fixer une limite au nombre de lignes de ta map
    NbLignes = random (NbMaxLigne)
    NbColonnes = Valeur Entière (NbMaxSalles/NbLignes) + 1
    --> là tu as ta map.
    Tu peux aussi ajouter un coefficient fixe qui te permet d'avoir beaucoup plus de cases que de salles.

    Ensuite pour le placement tu peux aussi faire un random sur chaque ligne pour savoir combien de pièce vont être placés (en même temps tu décrémentes le nombre de salles à placer afin de ne pas avoir plus de salles que prévu) mais bon c'est un peu risqué tu peux arriver sur ta dernière ligne avec pleins de pièces à placer.
    Autre solution tu lance un random sur tes lignes et colonnes pour tomber sur une case qui devient une salle jusqu'à avoir placer toutes tes salles.

    Voilà, j'espère avoir aider pour démarrer ou au moins pour lancer d'autres idées.
    Je réfléchis quand même à un meilleur algo mais d'un autre côté le random te permet de générer ta map aléatoirement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 36
    Par défaut
    Merci a vous. Il y a effectivement de bonnes idées mais j'avoue ne pas avoir tout saisi Blasief, l'idée des lignes et colonnes pourquoi pas (c'est peut etre un peu lourd je ne sais pas). Pour ma part, j'ai une solution sur le bout du cerveau. Je vous tiens au courant .

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Je dois reconnaître que dans mon esprit c'était clair mais à expliquer, pas forcément.
    L'important était de donner des pistes.
    J'espère que ça t'a aider.

  6. #6
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    On peut essayer de travailler par étape en créant les salles les unes après les autres et en identifiant les positions possible pour une nouvelle salle:
    • au départ, la première salle doit être au bord du rectangle,
    • sinon, elle doit être au voisinage d'une salle existante (donc un choix aléatoire dans l'ensemble des cases contigues aux salle déjà créées),
    • en fonction de la position de la nouvelle salle par rapport aux autres, on créera les portes (au moins 1 porte).

Discussions similaires

  1. Generateur de bruit/nombre aléatoire
    Par romrom45 dans le forum C++
    Réponses: 4
    Dernier message: 10/01/2012, 14h32
  2. generateur de nombre aléatoire
    Par debutant100 dans le forum Débuter
    Réponses: 3
    Dernier message: 04/04/2010, 20h58
  3. generateur pseudo aléatoire uniforme
    Par thasseda dans le forum C++
    Réponses: 22
    Dernier message: 11/03/2009, 14h31
  4. Generateur aléatoire en fonction d'une somme
    Par tdenis13860 dans le forum C++
    Réponses: 13
    Dernier message: 08/05/2008, 18h47
  5. Generateur de map aleatoire
    Par bobtux dans le forum C++
    Réponses: 2
    Dernier message: 18/03/2005, 20h13

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