JeuWeb - Crée ton jeu par navigateur
Génération de carte aléatoires ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Génération de carte aléatoires ? (/showthread.php?tid=3506)



Génération de carte aléatoires ? - mdcarter - 06-01-2009

Bonjour à tous,

Bon le sujet du topic est assez parlant je pense, j'essaye de trouver un algo assez simple à gérer et qui puisse générer aléatoirement des maps (iso ou simple) de donjon, contenant différents type de terrains.

Le plus difficile étant évidemment de générer des cartes qui sont "cohérentes" et qui ne contiennent aucun passages bloquant. Un peu comme dans la plupart des "dungeon rpg".

Si vous avez des suggestions j'en serais heureux Smile


RE: Génération de carte aléatoires ? - Seren - 06-01-2009

Si tu sais lire le C, tu peux récupérer le code de Nethack, qui est l'ancêtre de Diablo.

Chaque partie génère un donjon de 50 niveaux avec pièces, couloirs, portes, pièges, passages secrets, monstres, trésors, et surtout un escalier qui monte et un escalier qui descend forcément connecté. Smile

http://nethack.wikia.com/wiki/Source_code

C'est probablement long de tout comprendre sans connaître le jeu, mais en faisant quelques parties et en étudiant le code source, ça peut être une piste. C'est pas forcément la meilleure solution mais c'est ce que je ferais, connaissant bien le jeu. Par contre la carte ressemble plus à quelque chose du style dungeon keeper.

Par contre si tu veux vraiment étudier le code, il vaut mieux le télécharger et le lire dans un bon éditeur plutôt que d'utiliser le lien que j'ai fourni.

J'ai trouvé grossièrement l'algo sur un site anglophone :
1. Créer un niveau vide.
2. Créer 4-10 pièces rectangulaires aléatoirement sur la carte (de taille et de forme différentes).
3. Choisir une pièce pour l'escalier montant et pour l'escalier descendant.
3. Relier toutes les pièces entre elle en "creusant" des couloirs.


RE: Génération de carte aléatoires ? - mdcarter - 06-01-2009

Euh alors je ne comprend pas le C mais bon je peut essayer de lire un peu tout ça, une idée de quel fichier en particulier s'occupe de la génération des cartes dans toute cette liste ?
Merci en tout cas du coup de pouce Smile

EDIT: oui j'avais imaginé quelque choses comme ça, la difficulté étant de creuser le tunnels en questions, et de rajouter des "fioritures" que rendent le tout moins monotone quoi


RE: Génération de carte aléatoires ? - wild-D - 06-01-2009

:love: nethack
faisait longtemps que j'y avais plus joué

grrr... seren t'as pas honte de m'entrainer sur la mauvaise pente !


RE: Génération de carte aléatoires ? - Seren - 06-01-2009

D'après le nom de fichier et des fonctions, ça doit être ça Mklev = Make level.
http://nethack.wikia.com/wiki/Source:Mklev.c

Les fichiers Mkroom.c et Mkmap.c sont probablement utilisés aussi.

Par contre, je me rends compte que c'est pas si simple, et probablement impossible à comprendre sans avoir lancé au moins une fois le jeu. Le jeu est gratuit et existe sous windows, MacOs et Linux, par contre les graphismes sont en ASCII et ça se joue dans une console.


RE: Génération de carte aléatoires ? - wild-D - 06-01-2009

au besoin y a falconeye, version graphique

http://users.tkk.fi/jtpelto2/nethack.html


RE: Génération de carte aléatoires ? - mdcarter - 06-01-2009

Je vais jeter un coup d'oeil à tout ça et je vous remercie Smile
Je note quand même que la plupart des donjons rpg que je vois on quand même des résultat de maps assez bizarre de temps en temps quoi, dur de faire quelque chose de cohérent avec un script Confused


RE: Génération de carte aléatoires ? - Seren - 06-01-2009

(06-01-2009, 05:11 PM)mdcarter a écrit : EDIT: oui j'avais imaginé quelque choses comme ça, la difficulté étant de creuser le tunnels en questions, et de rajouter des "fioritures" que rendent le tout moins monotone quoi

Pour rejoindre les pièces, enfin décider si deux pièces doivent être reliées ou non, c'est la fonction suivante :

http://nethack.wikia.com/wiki/Source:Mklev.c#makecorridors

Il y a nrooms, pour chaque pair de pièces, on décide aléatoirement si elles doivent être reliés ou non.

Je ne sais pas ce que fait la fonction join, mais a priori elle doit créer un tableau à deux dimension qui est exploité ensuite pour savoir si on creuse un corridor ou pas.

Ensuite a toi de voir si tu choisis de creuser tout droit, en escalier, en biais etc... Mais ça doit être autre part dans le code Smile.

Je sais sincérement pas si c'est la meilleur solution pour toi, en fonction de ce que tu comprends du code que tu lis, mais ça peut toujours te donner des idées sur comment procéder par étapes.


RE: Génération de carte aléatoires ? - My Hotel - 06-01-2009

Tu peux générer ça à la manière d'un labyrinthe. Cherche un algo de génération de labyrinthes parfaits, et tu le modifie un peu de manière à obtenir des salles, sinon t'auras que des couloirs.
Moi je l'avais déjà mis en place pour une carte de test, je vais essayer de retrouver mes codes sources, mais je te garantis rien.

Cherche un peu dans cette direction... Wink