Comment je pourrai créer un monde 2d entièrement rempli de carré qui sont collés ? (dans le même principe que terraria).
Comment, après avoir fait cela, pouvoir y générer des espaces à l’intérieur qui se généreront aléatoirement ?
(Concrètement, je voudrais un monde rempli de carrés, qui auront l’aspect de roche, et des grottes générées aléatoirement dedans ^^). Le reste je verrai ;p
Basiquement, en utilisant l’expression Random(x) pour avoir un nombre entre 0 et x, ce qui permet ensuite de choisir par exemple un élement de décor au hasard. Ensuite, on répète ceci pour tous les élements à créer.
Si on veut un peu d’homégénéité, il faut utiliser des techniques additionnelles, à vous de voir selon votre problème. ( On peut imaginer par exemple d’éviter de créer des arbres dans des espaces grottes ).
Merci Par contre, j’ai compris ce que tu voulais dire mais concrètement je vois pas trop comment faire … Si tu pouvais me montrer précisément ce qu’il faut faire, ce serait top ^^
(sans vouloir paraître pour un assisté )
_Tu fait un grand tableau X par Y
_Dans chaque case tu fais un random(n) → ou n est le nombre d’éléments de décor différent
Mais ça c’est très basique parce que ça peut donner des incohérences, genre un bloc de terre flottant en l’air.
Il faut donc rajouter plein de techniques de contrôle :
_par exemple un horizon (quand y < n1, il n’y a que du sol, quand n1< Y n2, il y a du sol et de l’air, n2 < Y, il n’y a que de l’air)
_un contrôle des bloc orphelins (un bloc doit être relié à au moins un ou deux blocs du même type)
_placer des salles pré crées, sans quelles se chevauchent ou se retrouvent à des endroits impossibles
_faire pousser des arbres sur le sol
_etc…
L’extension n’est pas faite pour gérer des objets en tableaux, mais bien des données en mémoire sous forme de tableaux.
Enfin, si tu l’utilises et que tu as besoin d’aide, n’hésite pas.
J’ai fait un petit bout de code qui permet de généré une grille, on peut choisir le nombre d’objet sur une ligne et le nombre de ligne.
Et j’ai utilisé les effets pour différencié l’objet, donc les deux première ligne en partant du haut ont un effet on va dire qu’il représente l’air.
ensuite a la ligne 3 il y a un random() celui ci va nous dire l’effet qu’il y aura, donc air ou normal
Le hic est que je ne vois pas comment regroupé les objet ayant un même effet.
Si deux objets sont séparé par de l’air il faudrait changer celui ci en normal. Histoire d’avoir un terrain pas trop hard.
@Victor :
Personnellement je n’utilise pas tableau (je n’en ai pas besoin)
Cependant, j’avais dans l’idée de :
_D’abord générer on truc genre : int mapMonde[nx][ny] → ou nx et ny représentent les limites de la carte, chaque case du tableau contenant un ID correspondant au type de terrain
_On enregistre tout ça dans un xml, sinon faut se taper la génération à chaque fois
_ensuite on a une série d’évents qui affichent le monde
Tableau peut servir pour la première étape je suppose ?
Donc afficher la map est un jeu d’enfant avec des blocs carrés :
il faut :
_un tableau : map[x][y] qui contient les ID du type de terrain
_une variable taille : la taille en px de l’image d’un bloc
_Deux tant que pour parcourir le tableau en x et y
_Récupérer l’ID dans le tableau et prendre le bon type de bloc
_Afficher le bloc en pos(x * taille, y * taille)
pour créer le terrain il faut faire plusieurs passages (exemple sur un terrain de 50 par 50
_parcourir chaque case du tableau (deux boucles)
_au dessus d’une certaine hauteur (y entre 0 et 10) → que du ciel
_en dessous que de la terre
→ on a l’horizon on peut stocker le 10 dans une variable pour laisser l’utilisateur mettre ce qu’il veut
pour les collines, on peut peut-être utiliser le raisonnement suivant :
Pour des collines d’une hauteur de y blocs
_à y (c’est à dire juste au dessus de l’horizon) il y a y-1 chances (random) qu’il y ait un bloc de terre
_au dessus (à y-1 donc) il y a y-2 chances qu’il y ait un bloc si et seulement si il y a un bloc juste au dessous
_etc…
->ainsi on construit des collines avec de moins en moins de bloc à chaque etape et aucun bloc ne flotte en l’air
Je mets à jour GD et je vois ce que je peux faire…
Edit :
_GD accepte des bout de code c++, question : est-il utile en termes de performances de passer la génération du monde à un
petit bout de code ? (mes arguments pour viennent du fait que, 1 : ce n’est pas un processus graphique, 2 : c’est très largement dans mes capacités)
_Question 2 : y-a-t-il quelque part une docu sur l’extension tableaux ?
_Question 3 : Comment faire communiquer un éventuel bout de code avec l’extension tableaux ?
Pour le moment, les fonctionnalités relatives au C++ ne sont pas au point ( et ne doivent plus fonctionner depuis GD2 ), une remise à plat de celles ci viendra peut être dans les prochaines versions.