| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
| I am a furry |
|____________|
(\__/) ||
(•ㅅ•) ||
/ づ
@bram @wxcafe I just want to save you Bram :|
https://witches.town/media/_LHjieNsmgpP601Z9rs
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