Il suffit maintenant de dĂ©finir des couleurs pour chaque niveaux qu'on veut dans notre carte đ
LĂ c'est la partie oĂč vous vous amusez et vous dĂ©finissez ce que vous voulez :)
J'ai rajouté:
- de l'eau moins profonde
- une plage
- des plaines (vertes)
- de la forĂȘt
- des montagnes
- des sommets eneigés
Ă vous de faire comme vous voulez \o/
Vous avez deviné la suite
?
Maintenant : comment on transforme ça en carte aléatoire de jeux vidéo ?
Et ben en fait c'est super simple (la partie difficile est finite) : chaque point de l'image est une valeur entre 0 et 255, il suffit de se dire qu'en fait, ça représente l'altitude de notre carte.
Par exemple : si on décide qu'entre 0 et 100 c'est le fond de la mer, on peut remplacer tous ces points par du bleu foncé et ça donne ça:
(j'ai du un peut changé le code pour avoir un variable color)
Et pour l'example, avec 4 variations différentes d'octaves pour vous donner une idée:
"Mais c'est tout aussi aléatoire que avant !" Vous allez me répondre.
Et bien : presque oui, en fait il faut encore un peu tweaker tout ça car l'aléatoire c'est 3 tonnes de tweakage.
Heureusement la réponse est déjà dans l'exemple (moche) de la librairie (qui se trouve ici https://github.com/caseman/noise/blob/master/examples/2dtexture.py) : il faut diviser i et j par une "fréquence" pour réduire l'aléatoire.
Et boum: on vient de refaire le filtre photoshop "nuages" \o/
Donc maintenant qu'on a notre formule magique trouvé dans l'exemple de la librairie ("bibliothÚque"
) que tout le monde utilise (les gens codent comme ça hein, vous faites pas d'illusions đ) on remple notre "randint" par ça pour avoir un joli rĂ©sultat
â
Quelques explications en plus: la librairie va toujours renvoyer la mĂȘme valeur pour les mĂȘmes "i et j" en entrĂ©e.
Ici j'ai mis "43" et "13" au pif pour donner un exemple.
"octaves" c'est un paramÚtre qu'on va faire varier sans trop se préoccuper de ce que ça signifie vraiment mais ça change le résultat et on va juste changer ça pour en avoir un qu'on aime.
ProblĂšme ici: le nombre est compris entre -1 et 1 et on en veut un entre 0 et 255, donc on doit quand mĂȘme faire un peu de maths
â
Donc, comme on est en python et qu'on est des fleimasses et que coder le bruit de perlin Ă la main c'est chiant car c'est plein de math et les maths c'est chiant, on utilise une librairie qui fait dĂ©jĂ tout pour nous đ
La librairie s'appelle "noise" (le "import noise").
Malheureusement elle a une API trĂšs moche et une doc pas facile Ă comprendre.
Ici j'ai suivit un exemple trouvé dans la librairie, on utilise "snoise2" qui prend 2 coordonnées en entrée (les i et j de notre image):
Maintenant le problĂšme de l'alĂ©atoire qu'on a, c'est qu'il ... trop alĂ©toire đ
On peut pas l'utiliser comme ça car il varie trop, c'est ce qu'on appelle du bruit. Il nous faut un truc qui varie aléatoirement mais dans une certaine continuité.
Y a un truc qui existe pour ça (et que tout le monde utilise) qui s'appelle "le bruit de perlin" qui varie par rapport aux précédentes entrées.
Y a ce graph (trouvé au pif) qui montre la différence de variation (perlin à gauche vs pure alétoire à droite)
Si jamais vous ĂȘtes curieux·ses ça ressemble à ça si on met un nombre alĂ©atoire diffĂ©rent pour chacune des couleurs:
(mais on va pas s'en servir ici)
Maitenant on a envie de faire un générateur aléatoire, donc il faut faire de l'aléatoire pour ça.
La solution la plus simple c'est d'utiliser "randint" de la librairie random qui nous donne un nombre sans chiffres aprĂšs la virgule de 0 Ă ce-qu'on-veut non inclue.
Ici: randint(0, 256) donnera un nombre netre 0 et 256 non inclu.
Ici, on a uniquement générer un seul nombre par point et le mettre dans toutes les valeurs du point, ça nous laisse en noir et blanc.
Résultat :
Donc, faire une image toute noir (donc avec que des points contenant la valeur "0, 0, 0") ça se fait comme ça dans pillow:
On fait une nouvelle image de 200x200 et pour chaque point on met la valeur Ă (0, 0, 0)
Pour commencer par la base, on va générer une image depuis rien avec PIL, une image en RGB (parce que j'ai la flemme de faire du HSV).
Une image en RGB c'est bĂȘtement un tableau (une matrice) de points oĂč chaque point reprĂ©sente une couleur.
RGB c'est "red, green, blue", une couleur encodé sur 3 valeurs (la premiÚre c'est le rouge, puis verts, puis bleu) allant de 0 à 255.
Genre:
(255, 0, 0) c'est rouge
(0, 0, 0) noir
(255, 255, 255) blanc
(0, 255, 0) vert
etc...
Cette image en montre plein
Tien, vu que ça avait l'air d'impression certaines personnes mon fabuleux générateur aléatoire de cartes de jeu vidéo je vais tenter de faire un "mini" tuto pas à pas sur comment j'ai fait ça parce qu'en fait c'est vraiment simple (c'est la base de la génération aléatoire de carte).
C'est en python avec pillow (anciennement PIL) dans jupyter notebook (anciennement ipython notebook).
Pour rappel ça ressemble à ça à la fin :
Never trust the cute
bouffe, ner Afficher plus
Si vous avez les moyens de faire un don y'a le refuge oĂč j'ai adoptĂ© Patoune qui en a vraiment besoin en ce moment :
https://www.facebook.com/refuge.jeanduflos/posts/1587076171342236
ils ont un site oĂč on peut faire un don en ligne : http://refuge.duflos.pagesperso-orange.fr/dons.htm
je peux pas donner des sous mais je leur ai déjà apporté du matériel il y a pas si longtemps et je le referai si possible https://witches.town/media/fJCRh53NNrjCDeMNmzU
#Mastodon v2.3.1 is out! đ
https://github.com/tootsuite/mastodon/releases/tag/v2.3.1
- Bug fixes
- Button to open all CWs in a thread
- New cute default avatar