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 :
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
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)
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 :
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)
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)
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):
@bram mais non les maths c'est pas chiant, juste mal expliqué !
@akkes ouais, le rant souvent là dessus, j'ai vraiment beaucoup beaucoup de mal avec la pédagogie des maths (et la syntaxe même qui réuni, pour moi, toutes les caractéristiques d'un ultra mal designé langage de programmation)
@bram t'es pas la seule. En cachette même les profs le font parfois
J'aimerai bien connaître tes reproches à la syntaxe des maths
@akkes je t'avoue que j'ai pas de liste exhaustive des reproches que j'ai à faire à la syntaxe, c'est beaucoup plus l'approche qui génère ces problèmes:
- c'est pensé pour être écrit rapidement, pas compris facilement
- donc le plus condensé possible et pas le plus compréhensible possible
- on a recours à énorméments de zymboles abscons qui ne parlent à personnes et ne sont pas intuitifs
- ça a évolué organiquement et y a peut de refactoring pour essayer de rendre l'ensemble plus cohérent :/
@bram y a une section de la thèse d'Alexis Lemaire qui critique les notations mathématiques, j'essaierai de la retrouver :]
@ziltoid ☕efacxw @bram nan il parle pas de blockchain, à mon grand regret (en même temps c'était pas hype à cette époque, la blockchain)