Qu’est ce que la programmation procédurale

La programmation procédurale, aussi appelée génération procédurale, est la branche du développement logiciel dont l’objet est la création aléatoire d’un univers ou d’un objet virtuel. L’exemple typique, le plus connu, est celui du monde généré au début de chaque nouvelle partie Minecraft. Ce monde constitué d’îles, de plaines, de déserts, de collines, etc., bien que créé aléatoirement, possède une cohérence interne qui le rend réaliste, accessible: il n’y a pas de poissons dans les arbres, ni d’animaux de ferme dans les déserts chauds. Et ces derniers ne sont pas contigus à des zones froides.

Carte générée par l’algorithme diamant carré. Cliquer pour voir la carte en plus détaillée

Figure 1 : Carte générée par l’algorithme diamant carré

La génération procédurale peut aussi créer des villes, des cartes, des donjons, des planètes, des plantes, des êtres vivants ou encore des objets construits par l’homme, comme des maisons, des voitures, ou des vaisseaux spatiaux. Pour juger un algorithme de programmation procédurale on se posera la question suivante: «est-ce que cet objet aurait être conçu par un humain?»

Présentation du project Diamond Map

Depuis quelques années je suis fasciné par ce domaine de l’informatique. J’ai donc réaliser un générateur de carte de hauteur, basé l’algorithme diamant carré. Cet algorithme impose un certain nombre de contrainte sur la taille de la carte. Elle doit être carré, et la taille d’un côté doit être une puissance de deux plus un.

Mon implémentation suit à la lettre l’algorithme. La seule partie originale de mon travail a été le choix des couleurs pour représenter les différentes altitudes (et profondeurs): le blanc pour la neige des sommets et le noir pour les abysses des océans. Entre les deux, des roches, de la forêt, des plaines, du sable de plage, l’écume des vagues, et l’azur de la mer.

Le résultat est assez joli. Même si parfois, hasard oblige, la carte ne contient que la mer, ou au contraire, que le vague sommet marronnasse d’une montagne.