Réflexion sur la création du monde
Nous voici dans le premier article du blog, et pas le moindre puisque nous allons ici développer la conception d'un monde, les différentes étapes à avoir et comment stocker tout cela.
Réflexion sur le monde
Les données d'une map monde
Les données d'une map monde sont relativement simple, seulement 3 données sont utiles pour représenter une carte :
La latitude : La distance angulaire d'un point de la carte par rapport à la ligne horizontal au centre de celle-ci.
La longitude : La distance angulaire d'un point de la carte par rapport à la ligne vertical au centre de celle-ci.
L'altitude : La hauteur d'un point par rapport au niveau moyen de la mer.
Les cubes
Un monde peut être représenté comme un grand tableau à 3 dimensions. Ces dimensions représenteront la latitude, la longitude et l'altitude de la case.
Dans ce tableau, chaque boîte représenterait un cube plus ou moins large de la carte. La taille de ce cube sera définie en fonction du niveau de précision souhaité dans le monde. Elle peut varier entre quelques millimètres carrés à quelques mètres carrés suivant les ressources disponibles sur le serveur.
Pour chaque cube, il nous faudra, en plus des informations concernant sa position dans le monde, les renseignements concernant la constitution de ce dernier. Dans un premier temps, cela peut être simplement un type, tel que terre, air, or, fer, ... Puis complexifier par la suite en indiquant un ensemble d'éléments qui constitue ce cube ainsi que leur proportion.
Les zones
Nous arriverons donc au final avec des milliers voire des millions de cubes. Afin de s'y retrouver plus facilement, nous pouvons regrouper ces cubes par zones. Chaque zone comprendra plusieurs cubes. Les cubes présents aux mêmes coordonnées de longitude et de latitude seront forcément dans la même zone. Ce qui signifie qu'une zone n'aura que les valeurs de longitude et de latitude.
En fonction du nombre de cube, c'est à dire suivant la taille de la carte générée ainsi que la taille de chaque cube souhaité, une zone comprendra plus ou moins de cube et représentera une taille plus ou moins grande du monde.
Processus de génération
Maintenant que nous avons défini les éléments nécessaire à la création de notre monde, nous pouvons nous atteler à la génération de ce dernier.
Macro génération
Nous allons, dans un premier temps, générer le monde de manière macro, c'est à dire que nous allons générer les zones de notre monde.
Pour ce faire, il nous faudra définir l'ensemble des données suivantes :
- La largeur et la longueur de notre monde
- La taille souhaitée pour chaque zone.
Ces éléments nous permettrons de calculer le nombre de zones à constituer.
Une fois le nombre déterminer, il faudra positionner les zones dans un tableau à 2 dimensions. Cela permettra de disposer les zones dans le monde et de définir les zones autour de chacune d'elles.
Il nous faudra également définir si la map monde représente une carte planétaire ou seulement une partie du monde. Dans ce dernier cas, il faudra également choisir le type de carte à générer, s'il s'agit d'un continent, d'une partie d'un continent, d'une archipèle, ...
Nous pourrons alors typer chaque zone (montagne, plaine, eau, ...), en prenant en compte ce qui l'entoure. Nous n'allons pas mettre une zone aride à côté d'une zone glacial par exemple. Ce typage est très important et permettra de maintenir une cohésion entre les différentes zones.
Micro génération
Cette première étape passée, il nous faudra ensuite passer à la partie la plus complexe, la génération de tous nos cube. Alors, effectivement, la majorité de ces cubes ne seront pas nécessaire et ne seront pas accessibles, mais nous devons imaginer n'importe qu'elle circonstance. Un nain un peu trop aventureux qui creuse au plus profond de la terre, un poisson nageant jusqu'aux entraille du monde et qui potentiellement sais creuser, ...
Nous aurons donc besoin des éléments suivants pour la génération des cubes :
- Le nombre de cube maximal en hauteur,
- La taille de chaque cube,
- La hauteur du niveau de la mer, considéré comme le niveau 0,
Nous allons boucler alors sur chaque zone, et y générer les blocs étages par étages en prenant en compte l'étage du dessous. Effectivement, s'il y a de l'air ou de l'eau en dessous et sur les côtés, un bloc de terre ne pourra pas tenir à cette position. De même, nous ne pouvons pas retrouver des cases de neiges en dessous de cases de terre.
En montant au fur et à mesure, nous nous assurons de la cohérance physique des blocs.
Stockage des informations
L'ensemble du monde devant être stocké, l'utilisation d'une base de données est nécessaire. Une base de donnée relationnel est approprié pour ce type de données puisque la structure évoluera peu voir pas dans le temps.