Étiquette : python

  • Suite à un enchaînement d’événements aléatoires, mais notoirement inintéressants, quelques collègue·e·s et moi-même avons effectué une présentation sur le concept du vibe-coding.

    (Note: j’ai décidé que le féminin de « collègue » serait maintenant « collèguee » et non plus « colléguette »).

    Notre propos tenait à peu près la route, en revanche, nous étions à l’arrache pour le support de présentation. Pour y remédier, j’ai décrit des slides à une IA quelconque, puis je lui ai demandé de me générer les fichiers HTML correspondants.

    Le résultat était légèrement daubé. Je voulais des images rigolotes, l’IA m’a généré des tags <img> aux sources bidons. Les urls étaient bien formées, mais ne menaient à rien. On n’était pas à une connerie près, j’ai laissé comme ça.

    On n’était pas à deux conneries près, le dernier slide avouait que la présentation avait été générée par IA. Ce qui nous amène à la phrase amusante :

    J’ai vibe-codé le slide dans lequel je révèle que j’ai vibe-codé mes slides sur le vibe-coding.

    La présentation a bien fait rire l’auditoire. J’étais content.

    Les mots « trollface » sont les alt-text des images aux urls bidons. Je me suis fait méta-troller par une IA à qui j’ai demandé de troller.

    Au fait, que pense-je de l’IA générative?

    Tout le monde est tellement à s’écharper sur le sujet et ça a un rapport tellement étroit avec l’informatique, que je me sens obligé de donner mon avis.

    D’abord, j’ai conscience que le terme « Intelligence Artificielle » désigne un vaste ensemble de concepts et de techniques dont l’IA générative et les LLMs ne constituent qu’une partie.

    Ça impressionne toujours ce genre de phrase d’introduction. Celle-ci fonctionne avec plein d’autres sujets. Regardez :

    D’abord, j’ai conscience que le terme « doigtage de camembert tout en poussant des petits cris de truie » désigne un vaste ensemble de concepts et de techniques, dont la décroûtisation topographique et la bruitozoologie ne constituent qu’une partie.

    Pour en revenir à l’IA, j’en pense qu’il faut l’utiliser avec parcimonie et uniquement pour générer des éléments simples et vérifiables. Même un cerveau humain qui n’aurait aucune morale réalisera pragmatiquement que ces services d’IA ont un coût d’infrastructure très élevé. Il vaut donc mieux être le moins dépendant possible de ces services, en prévision du jour où ils deviendront, soit gavés de publicité inblocable et indétectable, soit payants.

    L’IA au Travail

    Comme vous vous en doutez, mon éthique au Travail opère en mode dégradé. Si on me dit d’utiliser l’IA, je m’en sers. Si on me dit de faire les choses le plus efficacement possible, j’évaluerai (vaguement) ce qui est le mieux, et si c’est l’IA, je m’en servirai aussi.

    Le jour où les IA deviendront payantes, la hiérarchie qui m’enjoint de les utiliser se fera une joie de payer. C’est d’ailleurs actuellement le cas.

    Honnêtement, si un jour un chef me donne comme consigne : « tu dois vérifier que tout le monde est bien entré dans la douche puis tu appuies sur ce bouton pour libérer le Zyklon-B », moi et mon éthique boîtale rapiécée ne réagirons peut-être pas de manière saine. D’autant plus que ce genre de consigne ne serait pas forcément donnée aussi explicitement. Peut-être même que ça s’est déjà produit et que j’ai indirectement détruit des vies sans m’en rendre compte.

    « Tkt, c’est des sels de bains. »

    L’IA pour les trucs persos

    Je me limite à des sujets relatifs à la programmation. Je ne l’utilise pas pour générer des textes (je sais faire ça tout seul), ni des images (j’ai essayé de créer des tilesets pour Squarity, ça n’a rien donné d’exploitable).

    Je demande parfois à une IA de m’expliquer un bug ou de générer un morceau de code, mais jamais du python. Lorsqu’il s’agit de mon langage préféré, je veux que mon cerveau personnel reste « vierge » de l’IA.

    Cependant, je demande régulièrement à une IA de me donner une astuce python au hasard, qui serait peu connue. Ça me permet d’apprendre des nouvelles choses sans faire de recherches fastidieuses.

    Je sollicite beaucoup l’IA pour le CSS. C’est un domaine qui m’intéresse peu, mais je suis bien obligé d’en faire pour mes projets. Avant l’IA, je copie-collais sans comprendre des bouts de CSS pompés sur StackOverflow, c’était paresseux, stupide et totalement assumé. Avec l’IA, je suis tout autant paresseux et stupide, mais plus rapidement. Un jour, je prendrais le temps de m’intéresser sérieusement à ce truc de zouzou bigarré qu’est le CSS.

    Dans un moment d’égarement, j’ai essayé une seule fois d’utiliser l’IA comme ami·e avec qui dialoguer. Je n’ai pas l’intention de le refaire, c’était nulos. Je vous raconterai ce qui a provoqué cette situation.

    Les lecteurtrices averti·e·s auront compris que si j’ai utilisé la forme inclusive du mot ami·e dans le paragraphe précédent, c’est tout simplement parce que je n’avais pas décidé si je parlais à une IA féminine, masculine ou autre.

    De petits détails vous aident à repérer qu’une image provient d’une IA. Ici : la porte buggée à droite.

    L’IA pour les trucs masturbo-persos

    Il y a 30 ans de ça, on allait sur le Minitel. C’était lent à charger, mais au bout d’environ 37 secondes, on récupérait ce genre d’image ASCII Art excitante :

    Je me souviens avoir essayé 36-15 ULLA. La facture téléphonique a explosé. J’ai dit à mes parents que j’étais allé sur 36-15 VERIF pour récupérer des infos sur l’entreprise dans laquelle j’étais en stage. Ha ha ha !

    Il y a 25 ans de ça, on utilisait les modems 56k. C’était lent à charger, mais au bout d’environ 37 secondes, on récupérait une image de ce genre :

    Voici Anna Nicole Smith. Sa page Wikipédia a été bannie des données d’entrainement d’IA, afin de limiter les risques d’hallucinations décadentes. Allez donc la lire !

    Maintenant, on décrit quelque chose qui nous plaît dans un générateur d’images. C’est lent à générer, mais au bout d’environ 37 secondes, on récupère une image de ce genre :

    Encore une fois, y’a des défauts. Sur la gauche, un trait noir démarre comme un espèce de fil de connexion et se termine en une arête d’immeuble pas du tout dans le même plan.

    Le délai d’obtention des images « de consommation en solo » est constant et indépendant des avancées technologiques. Ça a été calculé savamment et intentionnellement : 37 secondes, c’est le temps pour que votre sang se déplace de votre cerveau jusqu’à votre entre-jambe (quel·le que soit ce que vous avez à l’entre-jambe).

    Je n’utilise pas l’IA pour générer des images de consommation solo, d’autres le font déjà pour moi. Allez sur le site deviantart, écrivez ce que vous souhaitez dans la barre de recherche, tout est à votre disposition.

    Le point sur la situation

    Je suis toujours dans la merde annoncée dans l’article précédent. Je m’étais dit : « si je m’en sors, je vous raconterais ça en rigolant, si je ne m’en sors pas, je vous le raconterais en angoissant ». Ça ne prend pas un chemin de sortie de merde. Vous aurez les explications dans mon prochain article, probablement associé d’angoisses et non de rigolades.

    Ironie : écrire et compter sont les premières choses qu’on apprend à l’école. Mais les IA générant des textes ne savent pas compter et celles générant des images ne savent pas écrire. Regardez sur la pierre tombale.

    Bisous.

  • Ce sera principalement un copié-collé de ce que j’ai dit sur Discord, en retard car la date officielle de l’anniversaire est le 17 septembre. Pouet.

    Mise à jour de squarity.fr

    Au menu des nouveautés :

    • Une page de présentation épurée, pour éviter de perdre les nouvelles personnes qui arrivent.
    • Un accès à la documentation moins bazardesque, car intégré dans le site, au lieu d’être jeté à l’arrache dans github.
    • Des mini-jeux de tutoriels, pour débuter avec Squarity et apprendre à créer ses propres jeux.
    • Une liste partielle des jeux existants, plutôt que de les chercher au fond de mon compte Mastodon (je rajouterai bientôt les jeux qui manquent).
    • Un gros nettoyage de la page où se déroule un jeu, j’ai pu y enlever tous les liens de docs et d’exemples.
    • Une zone de jeu un peu plus grande, grâce au déplacement de l’horrible bouton « plein écran » qui prenait de la place pour rien.

    Pas de nouvelles fonctionnalités dans le moteur du jeu en lui-même, nul doute qu’il y en aura ultérieurement (c’est dans la road-map ! ha ha ha!).

    On est très proche d’un avancement du projet où je n’aurais pas trop honte d’aller « démarcher » des gens que je ne connais pas du tout, pour leur parler de Squarity. Je ne sais pas trop qui je pourrais aller voir : des associations qui œuvrent pour le dev de jeux ? Des gens qui organisent des sessions de python ? Si vous avez des idées, je prends.

    Les urls pour partager un jeu ont changé, et ne devraient plus jamais changer à l’avenir. Ces urls sont sous la forme : https://squarity.fr/game/<identifiant du jeu>

    Il y a toujours la redirection moche vers « recher.pythonanywhere.com », qui change l’url dans la barre d’adresse. J’essayerai de cacher ça, d’où l’intérêt d’utiliser le format sus-mentionné, avec la vraie url officielle professionnelle estampillée AOC.

    Avant, il n’y avait pas le répertoire game/ dans l’url, maintenant il y a. Ça permet de mieux structurer l’ensemble du site.

    Plus d’explication détaillée dans cette page de la doc.

    Gros bisous, profitez en pour rejouer à des anciens jeux, maintenant qu’ils ne sont plus qu’à deux clics de distance !

    Discours d’anniversaire

    Ce sera un discours court. Tout d’abord, un grand merci général aux gens qui suivent le projet de temps en temps. Je vous aime ! Je relirai les messages dans Discord pour savoir qui a dit des trucs cette année, et je ferai des mercis individuels.

    Quelles ont été mes excuses cette année pour n’avoir pas foutu autant que ce que j’aurais pu ?

    • une espèce de quête annexe stupide, déjà mentionnée dans ce blog, qui m’a occupé pendant quelques mois et qui ne servira probablement à rien. C’est ainsi.
    • le site TUR-ROX, qui risque de me prendre encore un peu de temps car je veux y ajouter d’autres énigmes.
    • Des travaux dans le baraquement, en Réelle-Mondie. C’est pas censé prendre trop de temps, mais vu mes capacités en bricolage, ça a.

    Pour cette année, je n’ai pas d’excuse en prévision. Avec un peu de chance, on arrivera à faire plein de choses et à déglinguer un ou deux carrés de la road-map.

    Cœur Cœur Smiley-qui-rigole Carré Horloge-comtoise Armoire-normande Gzrbltk-Mrfnprschtkk

    angel.angelic1

    Juste parce que

    Angel-Angelic aime l’art urbain, en témoigne les livres posés sur son étagère

  • Tiny Skweek plays Breakout

    La première contribution au Ludum Dare créée avec la version 2 du moteur de Squarity. Yeah !

    Comme vous le savez, le but de Squarity est de proposer un moteur de jeu avec des limitations volontaires, pour que la création reste simple. La logique du jeu et son rendu s’effectuent dans un quadrillage en 2D. Vous pouvez donc créer un démineur ou un match-3, mais pas de Bomberman, car il faudrait placer le personnage entre deux cases.

    Seulement voilà… C’est pas parce qu’un outil nous simplifie la vie pour créer des choses dans un cadre bien défini, qu’on ne va pas se compliquer la vie à utiliser ce même outil pour créer des choses hors de ce cadre, alors qu’il existe d’autres outils plus génériques qui auraient permis de créer plus simplement ces mêmes choses hors du même cadre. (Vous avez le droit de lire cette phrase plusieurs fois).

    Et donc, ma contribution est un jeu de casse-brique, comportant un objet qui ne suit pas le quadrillage.

    V’la le lien vers la page du Ludum Dare (vous y trouverez une petite vidéo de démo).

    Et v’la le lien direct pour jouer.

    Ça se joue à la souris. Cliquez sur un carré à bord bleu pour placer un mur.

    Post-creationem Ludum Darem

    Rien de spécial à dire sur le procédé de création. J’étais pas moins à l’arrache que d’habitude, mais je sais depuis longtemps gérer cette àlarachitude. J’ai fini 20 minutes avant la deadline officieuse (placée une heure après la deadline officielle, comme à chaque Ludum Dare, pour presser un peu les gens).

    Ça ne se voit pas sur le screenshot, mais il y a un autre type de brique: les octogones. Bien évidemment, les angles de rebond sont gérés correctement. Sauf peut-être les coins. Je considère qu’un rebond sur un coin équivaut à un rebond sur une surface plane, dont l’angle est égal à la moyenne des angles des deux bords adjacents. Ça marche peut-être pas comme ça en vrai.

    Les collisions prennent en compte les formes spécifiques des briques, mais le traitement n’est pas optimisé. C’est amusant, j’entends le ventilo de mon ordinateur démarrer à chaque partie. Oups.

    Comme expliqué dans la description, ce jeu est un hommage à deux œuvres anciennes, créées par des studios français s’il vous plaît tadzam #Souveraineté_vidéoludique même si ça veut rien dire.

    Super Skweek

    Exceptionnellement, je présente mes excuses pour la watermark à la con

    PopCorn

    Avec plein de briques et de monstres marrant

    (Je vous avais déjà mis un screenshot de PopCorn dans un autre article. On n’est plus à ça près)

    J’aurais quelques souvenirs à évoquer au sujet de ces jeux, mais je ne sais pas si ça a un grand intérêt.

    Super Skweek existe en plusieurs modes graphiques. Je l’avais en CGA (Color Graphic Adapter), c’est à dire avec seulement 4 couleurs. Celles-ci n’étaient pas figées, les personnes programmant le jeu avaient le choix parmi une palette presque pas trop restreinte. Les couleurs par défaut étaient cyan, magenta, noir, blanc.

    D’autre part, PopCorn n’existe que en CGA.

    Alors forcément, le jeu que j’ai créé est également en CGA avec les 4 couleurs par défaut. Tribute !

    Mon classement

    (Insérer ici le classement qui sera connu dans 2 jours, en attendant, bien prendre garde à ne pas publier l’article parce que ce serait complètement idiot de le publier alors que je n’ai pas encore le classement).

    • Overall: ?
    • Fun: ?
    • Innovation: ?
    • Theme: ?
    • Graphics: ?
    • Humor: ?
    • Mood: ?

    (Insérer ici des explications et mon avis concernant le classement. Dire « youpi » si il est bien, « bof je suis triste » si il est pas bien. Je sais déjà que la catégorie « respect du thème » ne sera pas mon fort. Mais qu’en sera-t-il de la suite ?)

    On discute on discute et je ne vous ais toujours pas mis d’image de femmes rondes. J’en ai cherché en CGA, je n’ai trouvé que des screenshots d’un jeu de strip poker de 1982. Merci à l’artiste Joanne Adams pour ces belles images !

    C’était bien essayé, mais d’autres images sont nécessaires pour respecter le quota. Go.

    Voici donc Eliza Allure et Cotton Candi, qui ont fait l’effort de mettre des sous-vêtements et des fleurs aux couleurs de la palette CGA.

    Et voici Juggsy-Ho-Doll. Moins d’effort de sa part au niveau des couleurs, mais beaucoup plus en terme de WTFitude. Elle a donc sa place ici.

    .

  • Pour les 4 ans, j’aurais pu user d’un symbolisme adéquat. Quelque chose du genre « squarity » -> « 4 côtés d’un carré » -> « 4 ans ». Mais j’y ai pensé après avoir écrit la célébration officielle dans le Discord, donc trop tard. Cet article est un à-peu-près copié-collé à l’arrache, car la vraie date d’anniversaire est le 17 septembre.

    C’est pas grave. Au fait, pour les gens qui débarquent : http://squarity.fr

    Je viens de réaliser que j’ai mis en place DEUX rituels réguliers dans ce blog : l’anniversaire de Squarity et le Raffarin Pète-Gonade Memorial Day. Ça fait trop. Les rituels donnent une ronronnante routine et une impression d’obligatoiritude qui mènent aux dictatures. En tant qu’anarchiste de classe moyenne ayant virtuellement investi dans des SICAV, je ne dois pas laisser ce virus grandir. J’annonce en mon âme et conscience que j’annule le rituel du Raffarin Pète-Gonade Memorial Day. Vous verrez au prochain mois de juin, l’article mensuel parlera d’autres choses. Tagazblork, ainsi soit-il.

    En attendant, on garde le rituel de l’anniversaire de Squarity. Ça arrive tous les ans, ça n’arrive qu’une fois par an et ça a presque eu lieu aujourdhui !

    🍰 🕯️ 🎁 🎈 🎉 🎂 🥳

    Cette année fut sans doute l’une des plus productives jusqu’à présent. Nous avons :

    • terminé les gifs de la road-map,
    • ajouté la gestion des clics de souris,
    • refondu le code du moteur, de la version 1.0.0 à la version 2.1.0, avec :
      • des transitions progressives d’une case à une autre,
      • des agrandissements/rétrécissements/décalage d’objets,
      • une librairie python « squarity » plus pratique qu’avant.

    Voyez à quel point ça a été productif ! J’ai dû recourir à une liste à puce dans une liste à puce pour raconter toutes ces folies.

    Tellement productif que j’estime n’avoir même pas besoin de vous donner une liste d’excuses justifiant pourquoi je n’aurais pas été assez productif. Vive le travail !

    La suite ?

    • Finir la petite doc de référence de la version 2.1.0. Ça ne devrait pas être long.
    • Continuer de participer du mieux que je peux aux Ludum Dares, le prochain est le 4 octobre.
    • Créer quelques jeux un peu plus conséquents que les jeux existants, j’ai des idées sympa à concrétiser.
    • Améliorer le point d’entrée du site. Ça fait deux ans que je dis ça, on va peut-être y arriver.
    • Ajouter l’affichage de textes dans l’aire de jeu (à spécifier plus précisément).

    Ci-dessous : allégorie représentant le point d’entrée actuel du site, notez les carrés sur la porte.

    Merci à qui ?

    Merci aux personnes qui mettent des emojis de réaction dans les messages d’annonce sur Discord. Vous ne vous rendez pas compte à quel point je m’accroche à ces petites choses pour nourrir mon ego et me donner la force de continuer le projet. Si vous voulez le détail des mercis et savoir qui a fait quelle gentille action (écrire un message, parler de son propre projet, proposer des idées, …), rendez vous sur ledit Discord.

    Merci générique aux gens qui passent sur Twitch et font des petits coucous pendant mes lives. J’ai pas tous les noms en tête et je ne suis pas censé les citer ici. Vous vous reconnaîtrez.

    Merci, bien évidemment, aux lecteurtrices de ce blog. Je ne sais pas combien vous êtes ni combien reviennent régulièrement. Quoi qu’il en soye, je vous fais des gros bisous.

    On continue. Même si nos cerveaux saturent, que nos oreilles vomissent des lignes de python et que nos yeux pleurent des pixels, on continuera quand même !

    Et hop, image érotique

    Blague !

    Il va sans dire que ce n’est pas suffisant comme image de nichons. Voilà bien un rituel que je ne supprimerai jamais : il faut toujours au moins une image de femme ronde dans chaque article. Voici donc voilà Kayla Paolini :

  • Tagadzim !

    Par ici, comme d’hab’ : http://squarity.fr/ .

    Pour une petite démo utilisant cette v2, cliquez sur le diamant vert, à côté des deux jeux d’exemples du magicien et de H2O. C’est pas vraiment une démo, c’est les bouts de code que j’écrivais à l’arrache pour tester les fonctionnalités au fur et à mesure que je les ajoutais.

    Résumé des nouveautés :

    • Le code python pour créer vos jeux est plus simple à écrire, il y a moins de « boiler plate ».
    • Les layers permettent plus facilement de définir quels objets sont au dessus de quels autres. Par contre, à l’intérieur d’un layer, l’ordre d’affichage n’est pour l’instant pas configurable.
    • Les objets peuvent se déplacer de manière « smooth ». On ne peut pas les mettre entre deux cases, (et on ne pourra jamais), mais ils se déplacent pixel par pixel de la case source vers la case destination.
    • Les callbacks permettent d’exécuter une fonction prédéfinie après X millisecondes, ou quand un objet a fini ses déplacements.

    Les jeux existants en v1 fonctionnent toujours. Il est fortement conseillé d’indiquer la version dans la config json : "version": "1.0.0" ou "version": "2.0.0". Sinon, vous aurez un warning dans la console. D’ailleurs faut que j’ajoute cette info dans tous les jeux que j’ai créés.

    Pour fêter ça : Soko-ban v2 !

    Lien (avec une url géante, comme tous les liens de jeux squarity)

    C’est les mêmes images et les mêmes niveaux que le Soko-ban que j’ai créé il y a quelques temps. Mais ce n’est pas du tout le même code. Et le personnage fait une danse de la victoire à la fin d’un niveau !

    Ça m’a permis de m’apercevoir qu’il manque plein de fonctions helpers (cloner une coordonnée, vérifier la présence d’un GameObject, itérer sur des coordonnées, …).

    J’aurais aimé annoncer quelque chose du genre: « le code du Soko-ban v2 est X fois plus court que son équivalent en v1, ce qui est la preuve que c’est maintenant bien plus simple de créer des jeux. Youpi ! ». Sauf que le code de la v2 est plus long que celui de la v1. On avance, on avance, on ne s’arrête jamais, même si c’est très lent.

    Prochaines étapes :

    • Créer ces fameuses fonctions dans la librairie python squarity, pour que ce soit réellement plus simple de coder en v2.
    • Rendre possible l’affichage de sprites dépassant d’une case, ou décalés par rapport aux cases, ou avec une taille différente.
    • Documenter tout ce bazar.

    Voici une autre danse de la victoire, proposée par Johana Amaya (dans une gif animée de 8 méga-octets, et que les low-techs aillent se faire twerker le coquillard chez les low-grechs).

  • En ce moment, c’est le Spring Challenge chez CodinGame. Le jeu de cette saison est un truc sympa avec des hexagones et des fourmis-robots qui doivent créer un chemin de la base jusqu’à des ressources. Les fourmis ne sont pas représentées visuellement, c’est juste les numéros rouge et bleu, mais ça va bien comme ça.

    Pour l’instant, je suis 830ème sur 5000 personnes. Je vais essayer de m’améliorer pour monter encore dans le classement.

    Le challenge est par ici : https://www.codingame.com/contests/spring-challenge-2023

    Il dure jusqu’à lundi 10h. C’est bientôt fini, mais pas fini !

    Je fais un live twitch à chaque fois que je bosse sur mon code. Vous pouvez regarder les replays pendant encore une semaine ou deux, c’est par ici : https://www.twitch.tv/recher_squarity

    J’ai toute ma suite d’article corporate sur le feu en ce moment. Ils vont arriver, mais vous n’aurez peut-être rien ce mois-ci (à part ce tout petit article à l’arrache). J’aimerais bien avancer mes gif animées de la road-map de Squarity. Ça fait un an et demi que j’ai rien fait de concret pour ce projet, et c’est mon « projet éternel ». Ça fait pas sérieux. Et faudrait aussi que je fasse des Ludum Dare.

    Voilà, gros bisous.

    Pour l’image de femme ronde, j’en ai cherché une qui aurait un tatouage de fourmi. C’est pas évident à trouver. En revanche, avec des tatouages de papillons, il y en a à la pelle. En voici donc une. Pif paf !!

    Elle s’appelle Sage Montana (à confirmer). La source est une petite vidéo sympa, il vous suffit de cliquer sur l’image pour en profiter.

    À bientôt.

  • Cet article sera bourré d’incohérences, encore plus que d’habitude, car il est inspiré de plusieurs événements. Ils se sont tous déroulés il y a plus de deux ans, ne soyez donc pas choqués s’il n’y est fait aucune référence à des masques ou des virus.

    L’un de ces événements inaugure le démarrage du projet POILS_PUBIENS. À cette époque, nous n’étions que 4 :

    • Chef NightWish. Pouvoirs spéciaux : balancer des liens vers des docs en croyant que ça va automatiquement résoudre un de nos blocages techniques. Dire « on n’a pas réussi à faire telle chose » pour dire « tu n’as pas réussi à faire telle chose ».
    • Semi-Chef Lucene-Lapin. Pouvoirs spéciaux : travailler la nuit et dormir le jour, déclencher des « réunions coup-de-poing », coder des projets persos clients lourds en PHP (wtf ?). Son titre de noblesse a fluctué d’un article à l’autre : « Collègue », « Chef », etc. On va dire qu’il est Semi-Chef.
    • Collègue DocteurMaboul. Pouvoirs spéciaux : écrire de la documentation en LATEX, faire des présentations avec des images rigolotes hahaha.
    • Et moi, bien sûr.

    Petit zoom sur Collègue DocteurMaboul, mon meilleur collègue de tous les temps et de toutes les boîtes où j’ai été :

    • Il gueule contre les chefs afin d’obtenir des avantages, pour lui-même et pour l’équipe, ce dont je suis incapable en tant que SuperFlamby.
    • Il lèche les bottes de ses collègues et encense le moindre petit morceau de travail produit, ce que j’aime en tant que SuperEgo.
    • Il glandouille et ne travaille que sur les sujets qui l’intéressent, au point de déformer l’espace glandique local, masquant ainsi les glanderies moins prononcées des collègues situés à proximité, ce qui m’intéresse en tant que SuperGlandeur.

    C’était mon collègue-fusible. Je me disais : « tant qu’il est là, je peux glander un peu puisque de toutes façons je glanderai jamais autant que lui ». Spoiler alert : le fusible a pas tenu.

    L’événement se déroule en Sicile, dans une villa isolée du monde extérieur. Nous y crécherons pendant 4 jours, l’objectif étant d’élaborer le « Business Model Canvas » du projet.

    Phase 1 : on collecte des slips…

    Petit rappel concernant POILS_PUBIENS : il s’agit d’une gamme d’application cosmologiques ayant pour sacerdoce de lutter contre les distortions spatio-temporelles de l’univers, sur tous les plans d’existence confiés par nos clients, afin d’empêcher un débordement de chaos. C’est un outil parmi d’autres dans ce passionant métier qu’est le maintien de la réalité, mais nous avons vocation à en faire un outil central qui recueillerait les détections de paradoxe génériques des autres outils.

    Comme cet article est un medley, en même temps qu’on est 4, on est aussi une quinzaine de personne, mais l’événement va durer une seule journée et une seule nuit. La nuit sera longue…

    Un nombre conséquent d’embauche a été récemment effectué, nous ne nous connaissons pas tous très bien. Nous avions donc pour consigne de préparer des petites présentations de nous-mêmes. Les collègues front-enders ont osé un Power Point ironico-dégueulasse rose fluo + WordArt arc-en-ciel + gif animés de dancing banana. Sa confection leur a pris une bonne demi-journée.

    De mon côté, j’ai recensé des hobbys et des passions de chaque collègue, afin d’obtenir un joli graphe connexe (les collègues A et B aiment l’aquafootball, les collègues B et C aiment collectionner des images de nichons, etc.). J’ai ensuite créé un petit jeu dans lequel il faut retrouver toutes les associations hobby-personne. Je ne peux pas vous le montrer car il révélerait des choses trop intimes. Mais je l’ai recyclé en un jeu-hommage à Eye of the Beholder, décrit dans cet ancien article, et jouable par ici.

    J’ai aussi demandé un petit créneau pour jouer un sketch de mon crû sur le langage python. Oui, on peut faire des blagues avec du code.

    Patchwork narratif du matin

    L’événement est situé à quelques lieues du Travail. Chef NightWish nous a laissé nous organiser pour le trajet, avec l’obligation d’arriver au plus tard à 12h30. Sous-entendu : « le matin vous bossez normalement, parce que les événements corporate faut pas en abuser. En partant vers 11h, vous serez large pour arriver à 12h30 ».

    On part dès 9h. Chef NightWish tire la tronche. On fait semblant de rien et on s’éclipse.

    On débarque tranquille dans la maison-villa AirBnB. La gérante nous fait visiter. Elle est un peu âgée, avec des seins énormes. Pour de vrai. C’est pas moi qui le fantasme.

    Des collègues installent du matos musical (sono, guitare, piano électropsychédélique et autres fatras). Vous verrez bientôt pourquoi.

    Concernant la boustifaille, nous avons chacun été affecté à un poste précis. Collègue Aquafootball, autoproclamé « roi du barbeuk », s’est proposé pour les saucisses du soir. Il se nomme ainsi car c’est un grand supporter de l’équipe locale d’aquafootball chilien, le sport populaire de la région.

    J’ai personnellement opté pour la salade-tomate-mozzarella, du soir aussi. Je peux donc glander.

    J’aurais aimé distiller dans cet article une ambiance glauque et effrayante : la villa sicilienne est hantée, on entend des bruits, des personnes disparaissent, on ne peut plus repartir car la voiture est en panne, etc. Mais la matière ne s’y prêtait pas. Les deux points les plus dérangeants de la maison sont :

    • la disposition des toilettes : juste à côté de la cuisine. Si ça ne tenait qu’à moi, on serait toujours à moins de 20 mètres d’une chiotte partout dans le monde. C’est important. Mais de là à avoir un accès direct aux chiottes depuis la cuisine, une limite a été franchie.
    • Une absence de moyen acceptable de faire du café. Nous disposons d’un récipient bizarre dans lequel il faut tout mettre en vrac (eau et café moulu), puis nous devons appuyer tout doucement sur un piston afin de séparer le café liquide du café moulu. Ça ne marche pas. Nous mâcherons du café pendant 4 jours.

    On pose notre fatras informatique dans la salle principale. Entre temps, Chef NightWish est arrivé. Comme il s’y croit à fond, il annonce avec un corporatisme empreint d’ironie que cette pièce sera la « War Room ».

    Collègue Aquafootball teste la tireuse à bière. Je discute du projet annexe Arcanciel avec Stagiaire SuperCSS.

    Le projet annexe Arcanciel est un truc de dingue, développé en partenariat avec la Zuzu Academy (l’université gratuite de Marc Zuckerberg). Comme vous le savez, l’œil humain ne distingue pas toutes les couleurs, or certains bugs de réalité ne se voient que sur certaines longueurs d’onde chromatique bien spécifiques. Arcanciel est un framework javascript permettant de convertir les couleurs d’un type d’œil vers un autre. Vous pouvez afficher une image telle que vue par un daltonien deutéranope, ou bien vue par un chien qui veut savoir comment voient les yeux d’une mante de mer, etc. C’est énormément de code, avec des calculs ultra-optimisés.

    Tout le monde est là, c’est le moment de montrer notre surprise à Chef NightWish, car c’est son anniversaire ! Nous lui offrons une interprétation de la chanson « Something Wrong » du groupe islandais Bang Gang, avec des paroles personnalisées pour lui. Il a une petite larmette pendant notre prestation.

    Bang Gang : meilleur groupe du monde, meilleur nom de groupe du monde, va te faire foutre la SEO.

    C’est Semi-Chef Lucene-Lapin qui s’est occupé des paroles. Il avait inévitablement déclenché une « réunion-coup-de-poing » pour en faire part au reste de l’équipe, avec réservation de salle et tout. J’étais un peu gêné. Des gens passaient dans le couloir et voyaient à travers la vitre un texte humoristique projeté sur grand écran.

    Ça lui avait pris deux demi-nuits. Ce mec peut travailler des nuits entières sur des documents sérieux, puis d’autres nuits entières sur des trucs complètement aléatoires tels que des énigmes amusantes proposées par des collègues (pour une fois c’était pas moi). La journée, il m’appelle pour me narrer ce qu’il a fait de ses nuits (le sérieux ET l’aléatoire). Toutes ces heures passées au téléphone… Je les rentabilise en cassant des amandes, le téléphone sur l’oreille. J’en ai des pleines boîtes à chaussures, que je cueille chaque année sur les amandiers poussant autour de chez moi.

    Et donc, cette performance chantatoire est la raison pour laquelle nous étions partis en avance. Nous devions installer le matos sans que Chef NightWish ne nous voit. Je ne suis pas sûr qu’il l’ait réalisé. Pour tous les domaines qu’il connait un minimum (entre autres, l’informatique et la musique), Chef NightWish croit systématiquement que chaque action « ne prendra pas plus de 5 minutes ». On retrouve ce caractère chez beaucoup de chefs.

    De plus, il faut bien l’avouer, l’installation n’a pas pris énormément de temps. En tout cas, c’est sûr que ça ne nécessitait pas la contribution de tout le monde, puisque j’ai glandé pendant que d’autres s’y attelaient.

    Pour finir cette matinée : repas classe et équilibré préparé avec amour par les collègues assignés à la bouffe du midi.

    Moi pendant que les autres travaillaient.

    Gloubiboulga récitatoire de l’après-midi

    Séance de réflexion sur le Business Model Canvas et ses schémas annexes : Customer Journey Map, Economic Canvas, Environmental Canvas, Disruptifier Bullshit Canvas, etc. Vous connaissez le principe : on écrit un truc sur un post-it et on le colle sur un des schémas.

    J’adore les pitreries corporate, mais j’ai beaucoup de mal à y garder mon sérieux. J’ai des idées de post-it que je trouve pertinentes, mais je ne peux m’empêcher de les présenter de manière débile. Par exemple, j’écris : « les lois étendues de conservation de la réalité physique, on n’y comprend rien ! ». Chef NightWish est obligé de dédébiliser le propos et de le remplacer par : « manque de connaissance théorique de l’équipe technique ». C’est pas très gentil de ma part et ça ralentit l’avancée de la réflexion, mais moi je me marre.

    Le groupe de travail voisin, dans lequel officient Semi-Chef Lucene-Lapin et Collègue Aquafootball, a adopté la technique du pastis-post-it. Un post-it collé, un pastis, un post-it collé, un pastis, etc.

    De manière prévisible, la War Room devient un océan de post-its aux couleurs criardes et entropiques.

    Chef NightWish : « Nous ne devons pas hésiter à remettre en question ou casser des choses établies depuis des années. En gros : soyez punks ! ».

    Des post-its punks.

    Il nous donne comme exemple Elon Musk avec sa société SpaceX. La NASA imposait une gargantuesque liste d’exigences pour je-ne-sais-quel outil de navigation. Une seule entreprise au monde était capable de les fabriquer et les vendait à un prix stratosphérique (amusant pour un machin censé aller dans l’espace). Mumusk a pris un iPad, a (fait) effectuer une gargantuesque liste de tests pour prouver qu’il répondait aux exigences exigées, et c’est passé. Comme quoi il existe des appareils qui se vendent à un prix encore plus stratosphérique que le prix déjà bien stratosphérique d’un iPad.

    Je reprécise que les événements corporates narrés ici datent de plusieurs années, Mumusk avait encore à peu près la cote auprès de la population humaine, Twitter gazouillait innocemment des propos d’une toxicité variable.

    Vient alors le moment de faire nos auto-présentations. L’horrible & glorieux Power Point fait sensation. Collègue Aquafootball, alcoolisé par les bières et le pastis-post-it, commence à raconter n’importe quoi de plus en plus fort. Semi-Chef Lucene-Lapin trouve notre show très goleri, ha ha ha, mais aurait surtout souhaité une liste de nos compétences techniques : qui sait faire du python, du front-end, du big data, de la colorimétrie karmagraphique, … Ah oui, c’eut été intéressant.

    Petite pause autorisée, avant de se remettre en groupe de travail pour préparer la restitution finale de nos post-its. Quelques personnes jouent au jeu des hobbys. Cool. Collègue DocteurMaboul entraine son groupe (dont moi) dans la méga-piscine de la maison. Le temps de pause file comme le vent. On revient à l’arrache, plus ou moins rhabillés et les cheveux dégoulinants. La restitution risque d’être un peu légère.

    Dans une autre réalité, Chef NightWish nous présente le « Manifeste de la Bienveillance de POILS_PUBIENS ». Sur ce document est gravé en lettre de feu que nous devons être gentil, ne pas nous pourrir mutuellement et ne pas répéter ce que dit un collègue en prenant une voix de débile pour se moquer. Collègue BarryWhite met en doute la réelle utilité d’un tel texte. Chef NightWish répond que dans d’autres boîtes, il a vécu des moments où des ardeurs testostéronesques inter-collègues furent désamorcées grâce à quelqu’un qui montra du doigt le manifeste local placardé au mur.

    Collègue BarryWhite continue d’émettre des doutes. Il est à la limite de se foutre de la gueule de Chef NightWish. Je lui réponds que dans le respect du Manifeste, on ne doit pas se foutre de la gueule des autres, y compris au sujet du Manifeste lui-même.

    Collègue BarryWhite se nomme ainsi car il a le physique inverse de BarryWhite, tout en ayant sa voix. C’est assez troublant.

    Le Manifeste.

    Dans une autre réalité, un tournoi de paintball est organisé. Le gagnant remportera un coussin-peluche à l’effigie du logo de notre projet. Je suis l’un des plus mauvais, dans l’équipe la plus mauvaise. Ça me rappelle une partie de Laser Quest que j’avais disputé contre des gamins de 8 ans. J’étais arrivé avant-dernier. Évidemment, si ça avait été un tournoi de Clash of Codes, je leur aurai tous dévissé la tronche.

    Malgré tout, je reste fair-play, en particulier lorsqu’une personne d’une autre équipe se vautre devant moi telle une otarie bourrée à la bière et se flingue le genou. Je m’enquiert de son état et ne lui tire pas dessus à bout portant. J’ai dû me faire violence, car cette personne est une autre fan d’aquafootball chilien, mais de type reloue. Elle arrête pas de fanfaronner chaque fois que son équipe gagne. Insupportable.

    Chef NightWish n’est pas dans l’équipe la plus mauvaise, mais il est le plus mauvais. Ça finit par le gonfler d’arriver à rien. Dans les dernières minutes, il court dans tous les sens en rafalant aléatoirement et en insultant les mères de tout le monde.

    Il est un peu essouflé et un peu rouge au moment de remettre le trophée à la personne gagnante (je ne sais plus qui c’est).

    Saurez-vous deviner ce que représente ce trophée-coussin-peluche ?

    Dans l’autre-autre réalité, notre restitution se déroule tant bien que mal et notre ardent travail est achevé. Les schémas dûment post-ités doivent maintenant nous permettre de déterminer notre Business Model. Chef NightWish énonce en quelques phrases le fonctionnement du projet et la manière dont il permettra de générer des clients et des soussous. On est tous bluffés : c’est clair, ça semble réaliste et c’est sorti naturellement. Une sorte de magie corporato-cognitive s’est opérée, notre travail de pastis-post-it-bullsh-it n’était rien d’autre qu’une préparation pour obtenir ces phrases qui nous sont maintenant évidentes.

    Je pense que c’est des conneries et que Chef NightWish a tout fomenté à l’avance. Ces fameuses phrases étaient déjà prêtes bien avant le début de l’événement. Si je les ais instantanément approuvées, c’est surtout par fainéantise et par facilité. Dois-je rappeler que je préfère sauter dans une piscine, boire de la bière et réaliser des mini-jeux plutôt que de réfléchir à la proposition de valeur d’une start-up que l’on souhaiterait à haut potentiel de licornitude ?

    Bachouillis racontariens du soir + lendemain

    Réaffectation des tâches pour la préparation de la bouffe du soir, car Collègue Aquafootball est étrangement introuvable. Je me vois octroyé, d’autorité, le titre de « prince régent du barbeuk ». Je ne suis pas doué pour ce genre d’activité adulte et virile, je crame 73% des saucisses, ça aurait pu être pire.

    Un québecois spawne de nul part, probablement un locataire comme nous. Comment a-t-il fait le trajet du Québec jusqu’à cette villa paumée en Sicile sans qu’on le voit arriver ? On ne le saura jamais. Il décline poliment notre invitation à partager notre repas, car il a déjà mangé. Mais il accepte l’invitation à boire et à discuter. Il a inévitablement un accent rigolo.

    Je gratte les pourcentages de saucisse non-cramés et tente de les ingérer, car je n’aime pas gâcher la nourriture. Une voix proférant des propos aléatoires me fait relever la tête de mon assiette. Collègue Aquafootball a réapparu. Il parle avec le québecois, très fort et en anglais. Plusieurs personnes lui disent à plusieurs reprises que ce natif de la Belle Province parle et comprend le français, ce dont Collègue Aquafootball n’a cure. Un tel comportement peut-il être qualifié de « punk » ?

    Il est 2 heures du matin, c’est le moment de sortir mon ordinateur et de proposer mon sketch sur le python. Dans un futur indéterminé, je vous ferais un article de blog pour vous le montrer. En attendant, voici un avant-goût : ouvrez une console python, écrivez None is not False et appuyez sur Entrée. Lolilol !

    Dans tous les événements corporate dont cet article est le medley, je présente ce sketch. Chef NightWish, qui y a déjà assisté, me fait remarquer que la blague « None is not False », je finirai par ne plus pouvoir l’utiliser. Sous-entendu : « ton sketch, c’est du réchauffé ». Ouais, et alors ? T’as mieux à proposer ? Viens nous faire un sketch sur les Business Model Canvas ! (C’est même pas ironique).

    Semi-Chef Lucene-Lapin tente de mettre en défaut mes connaissances, en me questionnant sur la manière dont les nombres décimaux sont gérés en python. Il me suggère de tester des opérations mathématiques donnant des résultats faux à cause des approximations. C’est censé me surprendre.

    Réponse : les nombres décimaux sont gérés pareil que dans la plupart des autres langages, c’est à dire avec la norme IEEE 754 (mais toujours en précision « double », 64 bits). Sauf que je maîtrise mal ces histoires de valeur approchées et ne parviens pas à lui répondre. Je considère que Semi-Chef Lucene-Lapin a mis en défaut mes connaissances sur la norme IEEE 754, mais pas sur le python.

    Je me permets de lui montrer que s’il veut des valeurs plus exactes, avec une précision configurable et théoriquement infinie, il suffit d’utiliser le module « decimal », de la librairie standard du python. Merci, au revoir.

    Le sketch terminé, chacun retourne à des occupations plus ou moins valorisantes : boisson, katastro-karaoké avec le matos de musique, discussion sur la vie, …

    On re-perd Collègue Aquafootball. On le re-retrouve endormi dans un fossé, serrant dans ses bras une bouteille de whisky aromatisé au sirop d’érable. Stagiaire SuperCSS le traine jusque dans la villa et le pose en vrac sur un canapé. La plupart des gens partent se coucher. Nous ne sommes plus que quatre : Semi-Chef Lucene-Lapin, Collègue DocteurMaboul, Stagiaire SuperCSS et moi.

    Collègue DocteurMaboul sort un petit carré de shit et commence à rouler. Ça fait plus de quinze ans que je n’avais pas fumé. Je le remercie pour ce petit moment de nostalgie qui me remémore ma vie étudiante et post-étudiante. À l’époque où ce récit se déroule, le CBD n’était pas encore à la mode. Cela dit j’ai jamais testé ce truc.

    Dans une autre réalité, ce n’est pas la dernière nuit de l’événement, et le Business Model Canvas n’est pas fini. Nous restons à rédiger des post-its supplémentaires. C’est clairement pas la même réalité que celle avec le shit.

    Dans la réalité précédente, nous discutons de l’avenir du projet jusqu’à 4 heures du matin.

    Les deux réalités se rejoignent lorsqu’on va tous se coucher. Sauf pour Semi-Chef Lucene-Lapin, qui utilise son pouvoir spécial et continue de rédiger des post-its tout seul.

    Le lendemain, les gens se réveillent à des heures non centrées et non normées. Nous rangeons le bordel : ordinateurs, bouteilles vides, tireuses à bière, morceaux de saucisse, matériel de musique, fins de pétards, post-its, …

    Après un vote à l’unanimité, nous annulons les résultats du tournoi de paintball. La personne ayant gagné accepte de bon cœur de rendre le trophée-coussin-peluche-poils-pubiens (de toutes façons je savais même plus qui c’était), afin de le remettre solennellement et officiellement à Collègue Aquafootball, pour l’ensemble de sa prestation de la veille.

    Covoiturage pour rentrer, dans la voiture de Collègue BarryWhite. Nous mettons plus de temps qu’à l’aller, car nous devons faire une pause tous les 20 kilomètres pour laisser vomir Collègue Aquafootball.

    Durant l’une de ces sessions « dégobillage », nous sommes arrêtés dans un chemin d’entrée de maison. Un vieux affublé d’une casquette Spiderman s’approche de nous. On lui explique pourquoi on est là, qu’on est désolé et qu’on va très vite repartir. Le vieux ne dit rien et reste à nous regarder jusqu’à ce qu’on parte. C’était pas par méchanceté ni par crainte qu’on soit des cambrioleurs gérontophiles. C’est juste qu’il était très vieux et n’avait plus la faculté de parler. Un moment étrange, hors du temps.

    Collègue Aquafootball perdu dans son vomi et le vieux Spiderman bizarre (allégorie).

    Épilogue

    Le dérapage alcoolisé de Collègue Aquafootball restera dans les esprits et sera diffusé, répété et mentionné durant plusieurs mois. Le pauvre ne méritait pas ça, d’autant plus que c’était exceptionnel (dans tous les sens du terme). Ce n’est pas un déglingopathe habitué du binge partying. Ça avait fait pareil avec Chef Peyotl : il a eu un seul écart malheureux et les gens en reparlaient encore des années après. C’est pourquoi, j’essaye pour ma part de ne pas trop faire circuler ce genre d’embarrassantes sorties de route. Sauf que je les écris et les immortalise dans ce blog. Zut…

    Collègue BarryWhite deviendra un early adopter de Squarity. C’est grâce à des gens comme lui si je continue d’avoir le courage d’avancer ce pojet personnel. Ça avance juste très lentement.

    Le coussin-peluche deviendra la mascotte de la boîte, trônant sur le burlingue de Collègue Aquafootball. Nous nous amuserons régulièrement à nous le lancer mutuellement à la tronche.

    Stagiaire SuperCSS, armé d’un magnum de vodka, consacrera deux week-ends au projet annexe Arcanciel. Son travail rendra caduc et inutile tout le code déjà produit par la Zuzu Academy. Ce que la plupart des gens ignorent (mais pas lui), c’est que les codes couleurs CSS peuvent contenir de nombreuses valeurs hexadécimales. Les 3 premières indiquent les quantités de rouge, de vert et de bleu, les suivantes décrivent les différentes couleurs visibles par d’autres types de cônes et de bâtonnets présents dans différents types d’organes visuels, aussi bien humains que animaux.

    color: #AABBCC1122334455667788990000111111

    Collègue DocteurMaboul se fera intégralement virer comme un malpropre. Licenciement pour truanderie au travail et glanderie aggravée, sans indemnité ni pot de départ. C’était mon gonfleur d’égo, mon aggro à chefs, mon meilleur collègue de tous les temps. Il ne pouvait pas durer éternellement. Je le remercie de m’avoir permis de croiser son chemin à lui, iridescent et éthéré.

    Semi-Chef Lucene-Lapin, armé d’un Jéroboam de Ricard, tentera de fusionner le PHP de Drupal avec le PHP de Symfony en une ultime application client lourd, mais échouera à cause de la mauvaise gestion des encodages de caractères dans le PHP, qui effacera tous les points-virgules de son code source. Son rythme de travail-sommeil incompatible avec le reste de l’humanité agacera la hiérarchie, qui le semi-placardisera en abaissant son contrat de travail aux trois cinquièmes.

    Chef Nightwish démissionnera pour aller brouter de l’herbe plus verte ailleurs. Il fera un pot de départ comme il se doit, que je rentabiliserai un max (fondue savoyarde).

    Des quatre fondateurs originaux du projet POILS_PUBIENS, il n’en reste maintenant plus que 1,6 (suite au passage aux trois-cinquième de Semi-Chef Lucene-Lapin). Ce dernier se rapproche doucement de l’âge de la retraite…

    Sauf que bientôt, il ne restera plus que 0,6 fondateurs. Si vous avez lu cet article jusqu’ici, vous méritez bien une petite info exclusive : je vais très prochainement changer de crémerie ! Je ne manquerai pas de vous écrire une palanquée d’articles récapitulant les divers moments intéressants et étranges de cette présente incarnation professionnelle. Cependant, je dois vous avertir qu’il y aura moins de matière que ma série d’articles revanchards et cathartiques que j’avais écris en fuyant Zarma.pro.

    À bientôt !

    Ça c’est pas moi, c’est Collègue DocteurMaboul
  • Qui veut un puzzle marrant inspiré de l’univers de Harry Potter, généré avec du fourchelang le langage python et les librairies numpy + opencv ?

    Voilà comment ça se présente :

    (click to enlarge, biâtch)

    Ceci est un quadrillage composé de 12 cases (3 lignes 4 colonnes), chaque case contient un groupe de 4 clés.

    Chaque clé est présente une ou deux fois dans tout le quadrillage.

    Si vous prenez deux cases adjacentes, elles ont toujours une clé en commun. Leurs emplacements à l’intérieur des cases sont aléatoires.

    Or donc, :

    • pour les cases du milieu, les 4 clés ont une jumelle sur chacune des 4 cases adjacentes,
    • pour les cases du bord, 3 clés sur 4 ont une jumelle, et la quatrième est unique (sont emplacement à l’intérieur de la case est aléatoire),
    • pour les cases des coins, 2 clés sur 4 ont une jumelle, les deux autres sont uniques.

    Imprimez cette feuille, découpez les cases, mélangez-les et essayez de retrouver la disposition originale. Quel distrayant puzzle !

    Il m’en faut plus

    Pas de problème, en voilà un fonctionnant sur le même principe, mais sur un quadrillage de 8×8 cases.

    Pour des images plus grandes et de meilleure qualité, c’est par ici dans ce repository git. Elles doivent être disposées comme ceci :

    plank_00.png | plank_03.png | plank_06.png | plank_09.png
    plank_01.png | plank_04.png | plank_07.png | plank_10.png
    plank_02.png | plank_05.png | plank_08.png | plank_11.png

    Comment c’est construit ?

    Les clés

    Pour commencer, il vous faut des images pour générer les clés.

    Nous avons donc : (3 types d’aile) x (4 types de bas de clé) x (4 types de haut de clé) x (3 types de tige). Soit 3 * 4 * 4 * 3 = 144 combinaisons différentes de clés.

    On peut maintenant construire une image d’une des clés à partir d’un numéro entre 0 et 143. Il vous faudra effectuer quelques divisions entières, quelques modulos et utiliser open-cv (la lib python de manipulation d’image). Je vous fais grâce de ces détails bassement techniques.

    Les associations horizontales

    Vous prenez ensuite tous les nombres entre 0 et 143, vous les mélangez, et vous les séparez en deux listes de 72 nombres chacune. La première servira pour les clés définissant les liens d’adjacence horizontaux, la deuxième sera pour les liens verticaux.

    Réarrangez la première liste en un rectangle de 8 lignes 9 colonnes. Mettons que ça donne ceci :

      7  17  38   4 68 125  96 135  16
    101 118  97  73 46 143  92  89   2
     86  14  62  56 10   9   6  19   3
    134  36  37  93 13  57  81  52  74
     66   8  71 109 60  40  65  69  27
     59 105   0  76 41  49  91 107  99
    115  95  75  48 83 142 141 130  64
      1  51 104 102 22  54  80  34 129

    Ensuite, vous recopiez la deuxième colonne juste à sa droite, puis la troisième, et ainsi de suite jusqu’à l’avant-dernière. Ça donne ce rectangle de 8 lignes 16 colonnes (que je vous mets sous forme de tableau, sinon ça fait des retours à la ligne pourris dans wordpress) :

    717173838446868125125969613513516
    101118118979773734646143143929289892
    861414626256561010996619193
    134363637379393131357578181525274
    66887171109109606040406565696927
    5910510500767641414949919110710799
    115959575754848838314214214114113013064
    151511041041021022222545480803434129

    Pour finir, sur chaque ligne, vous regroupez les numéros par couple. Ce qui vous donne un rectangle de 8 lignes et (8×2) colonnes :

    7,1717,3838,44,6868,125125,9696,135135,16
    101,118118,9797,7373,4646,143143,9292,8989,2
    86,1414,6262,5656,1010,99,66,1919,3
    134,3636,3737,9393,1313,5757,8181,5252,74
    66,88,7171,109109,6060,4040,6565,6969,27
    59,105105,00,7676,4141,4949,9191,107107,99
    115,9595,7575,4848,8383,142142,141141,130130,64
    1,5151,104104,102102,2222,5454,8080,3434,129

    Chaque couple de deux numéros correspond à deux clés, dans une case du quadrillage initial de 8×8. Il s’agit des clés réalisant les adjacences horizontales.

    Les deux autres clés de chaque case ne sont pas encore définies, ce qui nous amène au chapitre suivant.

    Mais avant, une petite pause. Puisque nous sommes dans l’univers de Harry Potter, voici Dawn French, l’actrice qui joue « La Grosse Dame » dans le Prisonnier d’Azkaban.

    Les associations verticales

    C’est pareil, mais en inversant les lignes/colonnes.

    Prenez les 72 valeurs qui restent, disposez-les randomement dans un rectangle de 9 lignes 8 colonnes.

     12 114  15  45 128 120  44  28
      5 110 136 132 126  72  39  88
     78  11  70 127  47 124 117  33
     25 103  20  82  29 139  26 113
    106 140 123 122  94  30 119  32
     79  23  21  98  24  55 137 111
     77 138 108 100  53  67  85 133
     58 112  84  90  35 131 121  31
     43  61  87 116  63  42  50  18
    

    Au lieu de doubler les colonnes, doublez les lignes : de la 2ème à l’avant-dernière. Ce qui donne un rectangle de 16 lignes 8 colonnes :

     12 114  15  45 128 120  44  28
      5 110 136 132 126  72  39  88
      5 110 136 132 126  72  39  88
     78  11  70 127  47 124 117  33
     78  11  70 127  47 124 117  33
     25 103  20  82  29 139  26 113
     25 103  20  82  29 139  26 113
    106 140 123 122  94  30 119  32
    106 140 123 122  94  30 119  32
     79  23  21  98  24  55 137 111
     79  23  21  98  24  55 137 111
     77 138 108 100  53  67  85 133
     77 138 108 100  53  67  85 133
     58 112  84  90  35 131 121  31
     58 112  84  90  35 131 121  31
     43  61  87 116  63  42  50  18

    Faites des couples, en prenant deux valeurs l’une au-dessus de l’autre. Ça donne un carré de 8×8. Cette fois-ci, je le mets sous forme de texte-code, car les lignes sont plus courtes et ne vont pas faire de stupides retours à la ligne. Tant que ça ne nuit pas à l’affichage et à la présentation, je préfère le texte brut, c’est plus facile à générer et à copier-coller dans l’article. Vive le texte brut !

     12|114| 15| 45|128|120| 44| 28
      5|110|136|132|126| 72| 39| 88
    -------------------------------
      5|110|136|132|126| 72| 39| 88
     78| 11| 70|127| 47|124|117| 33
    -------------------------------
     78| 11| 70|127| 47|124|117| 33
     25|103| 20| 82| 29|139| 26|113
    -------------------------------
     25|103| 20| 82| 29|139| 26|113
    106|140|123|122| 94| 30|119| 32
    -------------------------------
    106|140|123|122| 94| 30|119| 32
     79| 23| 21| 98| 24| 55|137|111
    -------------------------------
     79| 23| 21| 98| 24| 55|137|111
     77|138|108|100| 53| 67| 85|133
    -------------------------------
     77|138|108|100| 53| 67| 85|133
     58|112| 84| 90| 35|131|121| 31
    -------------------------------
     58|112| 84| 90| 35|131|121| 31
     43| 61| 87|116| 63| 42| 50| 18

    Chaque couple de deux numéros correspond aux deux autres clés, dans chaque case du quadrillage initial de 8×8. Elles définissent les adjacences verticales.

    Enfin, pour chaque case, vous mélangez randomement les 4 clés contenues dedans.

    Y’a plus qu’à coder tout ça. Vous avez une implémentation (un peu à l’arrache) dans ce repository, dans lequel je stockais déjà d’autres bazars pour des mini-jeux et mini-énigmes.

    Vérification de l’unicité de la solution

    J’ai vérifié avec mon feeling de maître de conférence en arithmancie combinatorio-serrurologique, j’en conclus que oui c’est bon. Aux rotations et aux symétries verticales/horizontales près : y’a qu’une solution.

    J’ai utilisé ce puzzle pour une sorte de mini escape-game en famille, et j’ai profité des rotations et symétries pour ajouter une mini-post-énigme. J’ai écrit une lettre derrière chaque carte. Une fois que le puzzle était reconstitué, il fallait toutes les retourner, et retrouver la phrase composée par ces lettres. L’astuce amusante, c’est qu’on ne peut pas déterminer à l’avance le sens de lecture, ni la position de la carte de départ, ni celle d’arrivée. Ça dépend de la manière dont le puzzle a été résolu. Il faut donc tester différents sens pour trouver la phrase finale. Hi hi hi !!

    Et hop, d’autres chouettes images de Dawn French.

    Tchuss.

  • Il y a un an et quelques jours, je mettais http://squarity.fr en ligne et je l’annonçais dans cet article. C’est l’occasion de résumer le chemin parcouru.

    • Je me suis lancé dans ce projet sans être sûr qu’il était techniquement faisable.
    • J’ai pesté contre la lenteur de Brython et son incapacité à faire remonter les messages d’erreur python.
    • Je suis passé à Pyodide.
    • Je me suis lamenté sur mon incapacité à écrire du CSS, pour finir par coder certaines parties du responsive design en javascript.
    • J’ai écrit des tutoriels.
    • J’ai écrit de la doc, que j’ai ensuite rendu obsolète.
    • J’ai répondu « oui » à une grande partie des suggestions d’améliorations, en précisant qu’elles étaient dans la road-map.
    • J’ai promis que je publierai cette road-map.
    • Je publie ici la première étape de la road-map, à savoir : « rédiger la road-map ».

    Ensuite, j’ai créé un serveur Discord, et quelques gentilles personnes s’y sont greffées.

    • Ensemble, nous avons créé des jeux, joué à ces jeux, et eu des idées de jeux sans les concrétiser.
    • Nous avons participé à des Ludum Dare en ayant l’espoir que ça ferait connaître Squarity.
    • Nous avons bidouillé du javascript dans du python lui-même dans du javascript.
    • Nous avons fait de la 3D isométrique avec de la 2D.
    • Nous avons pallié l’inexistence de l’IDE de Squarity avec un serveur web local.
    • Nous avons discuté, twitché, live-codé, peer-programmé, Clash-of-Codé et parlé tous les jeudis soirs avec un·e nain·e.
    • Nous nous sommes bien amusé et ce n’est pas fini !

    Quelques remerciements particuliers

    Merci aux personnes suivantes, dont la plupart sont sur Discord :

    • 10K, qui a créé un Pacman quelques jours à peine après la mise en ligne de Squarity
    • Loowood, très souvent présent pendant les lives, toujours prêt pour donner un petit message d’encouragement, qui a créé le Bomberman Chelou ainsi que le fameux « framework-hack-3D ».
    • ℕarkoa, qui apparaît également dans ce blog et qui m’a soutenu pendant le dernier Ludum Dare.
    • lilithabaddon, qui a commencé à créer le jeu du Labyrinthe, toujours là aussi pendant les lives, et qui s’est inscrit trois fois pour gonfler à bloc le nombre de gens sur Discord. Sans ça, nous serions beaucoup moins de monde que 16 personnes !
    • Tacheul, de PixelJoint, qui a dessiné le superbe tileset du jeu H2O.
    • Mes enfants, qui testent mes jeux et font des vidéos avec moi, et qui parviennent à prendre un air réellement interessé quand je leur parle de mes avancées et mes élucubrations.
    • Ma chérie, qui écoute aussi mes élucubrations et qui établit actuellement un « état de l’art des jeux de Match-3 », je suis sûr que ça me servira à quelque chose.

    Et bien sûr, merci à toutes les autres personnes qui s’intéressent à Squarity, qui passent dire un petit coucou, ou pas car elles n’ont pas envie (et vous avez bien le droit), qui, peut-être, créent des jeux dans leurs coins, qui ont des idées de malade et des projets complètement fous mais qui n’osent pas en parler. Être ici est déjà le début de quelque chose. On verra pour la suite !

    Oui d’ailleurs, pour la suite ?

    Ça fait quelques mois qu’il n’y a pas eu d’évolutions sur Squarity. J’ai passé les derniers mois à coder le jeu « Game of No-Life », ce qui n’était pas une stratégie très maligne. J’aurais pu utiliser ce temps pour améliorer le site, le rendre plus facile d’utilisation, ajouter des fonctionnalités dans le moteur et mettre la doc à jour. Mais à la réflexion, je n’aurais pas pu agir d’une autre manière.

    C’est un projet que j’avance durant mon temps libre. Il est difficile de rester motivé sur le long terme pour ça. Vous-même, vous savez. Je n’en suis pas à mon premier projet perso, nombre d’entre eux ont survécu à peine quelques semaines avant de se retrouver jetés aux ordures tel une portée de petits chatons non prévue.

    Mais j’aime inventer des jeux et j’aime coder en python. Le fait d’utiliser mon propre outil pour faire ce que j’aime m’offre un petit (ou un grand) moment de détente, qui me redonne de la motivation pour continuer.

    Alors voilà. On va avancer très lentement. Il y aura sûrement d’autres pauses comme celle-ci dans le développement de Squarity. Des fonctionnalités que j’ai promises dès le départ arriveront peut-être dans 10 ans. Vous continuerez de galérez encore longtemps avec une API très pauvre et un site web mal fichu. Mais cette erratique manière de progresser nous donne, à moi et à vous, une garantie que je n’abandonnerais pas ce projet, tant que je suis capable de coder.

    Le chemin vers Squarity est pavé de bonnes intentions carrées

    Le Game of No-Life

    Il est enfin terminé ! Il s’agit d’un jeu de stratégie minimaliste en temps réel, qui se joue à deux, avec seulement deux boutons par personne.

    C’est aussi un petit test de performance, car il y en a pour :

    • 2656 lignes de code (4965 en comptant les commentaires).
    • Des actions sur l’ensemble de l’aire de jeu, effectuées automatiquement toutes les 200 millisecondes.
    • Une pseudo-interface intégrée dans le jeu
    • Une zone de 60 par 38 tiles au total.

    Voici une petite vidéo de démonstration, dans laquelle je joue avec mon fils :

    C’est un peu long, on raconte plein de bêtises. Mais vous remarquerez que j’ai pris soin de la décomposer en chapitres.

    Si vous n’avez pas une demi-heure de temps de vie à gaspiller, vous pouvez juste regarder les chapitres « Comment jouer », « Présentation de Squarity » et « Dénouement final ». Ça ne vous coûtera que 17 minutes.

    Et sinon, pour jouer, c’est directement dans votre navigateur en cliquant ici. Vous n’avez plus qu’à trouver un humain consentant à portée de main et à jouer ensemble !

    Ludum Dare

    C’est le week-end prochain. Comme d’habitude, je ferais quelque chose, mais sans y passer trop de temps. Il faut que j’arrête de coder des jeux dans Squarity et que je m’occupe de Squarity lui-même. En l’occurrence, rédiger cette fameuse road-map.

    En plus ça risque d’être le bordel au niveau de mon travail salarié. Ce sera une fin de sprint et faut qu’on ait un truc-machin de finalisé pour notre super projet secret dont je ne peux vous dire que le nom : « POILS_PUBIENS ». Mais je ne vais pas vous embêter avec ces détails à la con de ma vie.

    Les poils pubiens de Jessie Minxxx sont-ils aussi teints en bleu ?

    L’article du mois prochain ne parlera pas de Squarity, faut bien varier un peu. En revanche, je ne peux pas vous garantir qu’il sera intéressant.

  • Le nom complet de cette compétition de création de jeux vidéo est « Ludum Dare 48 », car elle se déroule durant 48 heures. Il y a donc eu le « Ludum Dare 48 numéro 1 », le numéro 2, etc.

    Nous sommes arrivés au « Ludum Dare 48 numéro 48 ». Quelque chose de spécial avait été promis pour l’occasion, mais rien de précis n’avait été annoncé. Le jour J du week-end W, je n’ai rien vu de particulier. On s’en fout.

    Ça date de plusieurs mois, certaines impressions et sentiments que j’ai eu sur le moment se sont évaporés. Je vais faire au mieux pour vous raconter tout ça.

    Le thème était « Deeper and Deeper ». J’ai créé, en utilisant Squarity, un mélange de Snake et de Match-3, intelligemment intitulé « Snake Match ».

    Comment ça s’est passé pour moi ?

    Beaucoup mieux qu’au numéro 47. Dans les premières versions de Squarity, les messages d’erreurs python ne s’affichaient nul part. Une faute de syntaxe ? Une variable mal nommée ? Fallait se démerder tout seul. J’avais galéré comme un galérien et je flippais à chaque ajout d’une nouvelle ligne de code. Je suis beaucoup plus serein maintenant.

    Très heureux d’avoir réussi à ne pas passer l’intégralité de mon week-end à créer le jeu. J’ai pris le temps de dormir à peu près comme il faut, de m’occuper un peu de mes enfants, de faire des trucs dans la maison, etc. Et surtout, j’ai fait tester le jeu auxdits enfants au fur et à mesure de son développement. C’est le plus important pour moi. Il faut montrer, donner et expliquer les étapes intermédiaires de création d’une œuvre (jeu vidéo ou autre). Ça incite et encourage d’autres personnes à créer leurs œuvres à elles.

    Les sprites ont été dessinés à l’arrache et sont moches. J’avais prévu de les refaire en plus joli, s’il me restait du temps vers la fin. Ça n’a pas été le cas, comme la fois précédente. Pas de déception particulière sur ce point, donc.

    J’ai streamé l’intégralité du développement sur Twitch. La plupart du temps sans caméra ni micro, pour ne pas déranger les gens qui habitent avec moi (j’ai pas vraiment de bureau, on vit ensemble dans une seule grande pièce, en mode « pécores du 12ème siècle »). Le samedi et le dimanche soir, après avoir couché tout le monde dans leurs lits respectifs, j’ai pu caméra-microtiser.

    Un énorme merci aux ordispectateurtrices qui m’ont suivi pendant les streams et qui commentaient. J’ai vraiment besoin de ces petites attentions pour flatter mon ego et avoir le courage de continuer Squarity. Sinon j’aurais abandonné depuis longtemps. Encore merci. Et tant qu’on y est, merci à toutes les personnes qui ont joué à mon jeu et donné un avis sur le site du Ludum Dare. Merci en particulier à une copine qui l’a testé sur son smartphone et qui a lâché des comms sur mon Linkedin. Elle se reconnaitra si elle lit ceci.

    Un serpent fait un câlin à des pommes

    Quel résultat ça a donné ?

    Vous avez certainement remarqué que l’expression « on va pas se mentir » est à la mode.

    Eh bien on va pas se mentir, ce jeu n’est pas très fun.

    Le serpent peut manger des fruits, ce qui permet de changer leur disposition, pour créer des alignements de 3 fruits identiques et les faire disparaître comme dans un match-3 classique.

    Le serpent doit aller le plus profond possible, mais il a une longueur et une capacité stomacale limitée. Vous devez gagner des XP et monter de niveau pour augmenter ces deux limites.

    On gagne beaucoup plus d’XP en matchant des fruits qu’en les mangeant. De plus, les matchs ne remplissent pas l’estomac. Je pensais que ces règles déclencherait un comportement : la personne qui joue essayerait de faire des matchs, même si ce n’est pas nécessaire pour avancer dans le niveau, car elle chercherait à gagner des XP.

    De plus, comme dans tout bon match-3 qui se respecte, il y a des blocs de pierre, qui ne peuvent être détruit que par un match adjacent.

    Eh bien ça marche pas. J’ai pas assez réfléchi à mes mécaniques de jeu.

    Je m’en suis aperçu lors de mes tests finaux, alors qu’il ne restait plus que 2 heures. La manière la plus optimisée de jouer est d’aller tout droit, le plus profondément, comme un gros débile. De toutes façons, il y a des matchs qui se font automatiquement car les fruits sont placés totalement au hasard. Au bout d’un moment vous ne pouvez plus avancer à cause de la longueur limitée du serpent. Mais vous avez forcément gagné de l’XP. Vous redémarrez du début, en re-allant tout droit comme un gros débile. Et ainsi de suite.

    Constatant cette catastrophe, j’ai ajouté à la va-vite des lignes complètes de blocs de pierre, à des profondeurs prédéfinies. La personne qui joue est donc obligé de matcher des fruits pour détruire des blocs et se créer un passage. Ça ajoute un peu d’intérêt au jeu, mais ça ajoute aussi du potentiel de rageage.

    Ligne de blocs de pierre pour sauver l’intérêt du jeu

    Souvent, les fruits présents dans l’aire de jeu ne permettent pas les matchs nécessaires à la destruction des blocs. Il n’y a pas d’autres choix que de redémarrer du début. Ces échecs sont uniquement dû à un manque de chance. Vous n’avez aucun moyen d’augmenter la probabilité des matchs. C’est du « pas-de-bol and retry ». C’est chiant. Moi-même je trouvais ça chiant en le testant. À 2 heures de rendre sa copie, c’était trop tard pour retravailler les mécaniques du jeu. J’ai pris un peu de temps pour doser la quantité et la disposition des lignes de blocs de pierre, et j’ai tout envoyé à la zob’.

    Voici mon classement, sur un total de 1145 participations dans la catégorie « Compo » :

    • Overall: 723ème (3.042)
    • Fun: 743ème (2.792)
    • Innovation: 440ème (3.229)
    • Theme: 533ème (3.438)
    • Graphics: 824ème (2.5)
    • Humor: 516ème (2.25)
    • Mood: 819ème (2.15)

    Par rapport au Ludum Dare précédent, il y a du mieux et du moins bien. Mon Overall a descendu. Mais je suis dans la moitié haute pour le thème et l’humour, ce que je n’avais pas réussi avant.

    Un peu déçu par mon classement en Innovation, même si il sort du lot. La dernière fois, je m’étais facilement placé dans le premier quart, alors que là j’arrive péniblement après le premier tiers.

    Je m’attendais quand même à un peu mieux, car je me suis senti beaucoup moins à l’arrache et en galère durant tout l’événement. Pas grave, l’important c’est de s’être amusé à créer un jeu !

    Après le requin-marteau, le serpent-banane

    Qu’est-ce qu’on va faire après ?

    Concernant Squarity

    Le but de ces participations aux Ludum Dares est de tester « en conditions réelles » la création de jeux avec Squarity, pour déterminer les améliorations du moteur et du site web qui seraient les plus urgentes. Le but est aussi de faire connaître Squarity, mais vous le saviez.

    Ce qui m’a un peu manqué, ça a été la possibilité d’écrire du texte dans l’aire de jeu. J’aurais aimé pouvoir afficher un petit cadre d’infos, indiquant la longueur actuelle du serpent, combien de fruits il peut encore manger, ses XP et son niveau. J’étais parti pour une solution de secours : mettre des bar-graphs sur un côté de l’aire de jeu. Pas eu le temps. Les fonctions de texte, si elles avaient existées, m’auraient permis d’implémenter ça beaucoup plus rapidement. Et les infos affichées auraient rendue plus claires les mécaniques du jeu.

    Autre manque, qui s’est fait sentir bien plus cruellement : des petites classes et fonctions python à importer, pour aider au développement du jeu.

    • Une classe contenant un quadrillage de trucs (lesdits trucs pouvant être n’importe quoi : string, liste, classe custom).
    • Une autre classe stockant les trucs sous forme d’une matrice creuse, c’est à dire une liste de tuple (coord_x, coord_y, un_truc).
    • Des fonctions pour passer d’une classe à l’autre, pour fusionner deux quadrillages, pour extraire un sous-quadrillage, etc. On pourrait s’inspirer de numpy.
    • Indexation des quadrillages par adjacence, par ligne et par colonne.
    • Des fonctions pour gérer les mécaniques de jeu qui reviennent souvent : distance de manhattan, gravité, détection de lignes/colonnes de Match-3, pathfinding, propagation d’un truc sur des cases adjacentes, dijkstra, …
    • Sans oublier des tutoriels et des mini-exemples pour illustrer ces classes et ces fonctions.

    Tout ceci est dans la roadmap. Ha ha ha.

    Version actuelle du moteur de jeu Squarity

    Concernant Snake Match

    J’essayerais de reprendre ce jeu et de corriger ses mécaniques pourries. Cependant, j’avais annoncé la même chose pour Loops in Pools et Soko-punk, et rien n’a avancé. Alors je préfère ne rien promettre.

    En vrac, des idées de pouvoirs spéciaux :

    • Le serpent tire la langue, attrape le premier fruit devant lui, et le rapproche d’une case. Ça peut permettre de décaler des fruits horizontalement, pour les matcher.
    • Le serpent vomit devant lui le dernier fruit qu’il a mangé.
    • Des fruits randoms tombent du haut de l’écran.
    • Vision de loin : l’aire de jeu scrolle vers le haut non pas quand le serpent est tout en bas, mais un peu plus haut.
    • Pousser des blocs de pierre.
    • Le serpent entoure un bloc de pierre pour le détruire. (Comme un super-boa constrictor).

    En vrac, des idées de quête et de mode de jeu (chacune pourrait débloquer un pouvoir spécifique) :

    • Manger une séquence de fruit définie, plus ou moins longue.
    • Manger une certaine quantité d’un fruit spécifique, en une seule partie.
    • Détruire une certaine quantité de blocs de pierre, en une seule partie.
    • Matcher en une seule fois une certaine quantité de fruits.
    • Matcher, avec des réactions en chaîne, une certaine quantité de fruits, ou une séquence de fruits.
    • Détruire entièrement une disposition prédéfinie de fruits et de blocs de pierre (avec ou sans certains pouvoirs spéciaux, sinon il y aura des solutions non prévues).

    Idées d’achievement, si jamais on fait des achievements :

    • Terminer un niveau avec à la fois l’estomac plein et la longueur max du serpent atteinte.
    • Terminer avec la longueur max atteinte, et un estomac très très vide (on a avancé en faisant pratiquement que des matchs)

    Peut-être aussi que les montées de niveau devraient se faire uniquement par rapport au score max de toutes les parties. Et donc ça ne s’appellerait plus des XP mais du score. La personne qui joue pourrait donc faire une partie pour monter son score max, puis une autre pour réussir une quête, etc. Ça donne un peu de replay value.

    Certaines quêtes seraient associées à un mode de jeu spécifique et à son score max. Le niveau dépendrait de la somme des scores max de tous les modes de jeu. Moui, une idée intéressante.

    Je laisse ces idées en vrac pour l’instant. On verra plus tard si j’ai le temps et le courage d’en faire quelque chose. La priorité actuelle, c’est de finir le jeu « Game of No-Life », puis de réattaquer quelques petites améliorations du moteur du jeu (il en a besoin) et aussi de formaliser pour de vrai la roadmap. Paf !

    Les serpents aiment les femmes un peu rondes.

    Elle, c’est Alexandra Shcherbakova.