Reproduire « Angry Birds » uniquement avec l’IA
(twitter.com/javilopen)- Javi Lopez a créé Angry Pumpkins, un jeu de physique 2D dans le style d’Angry Birds, en générant le code avec GPT-4 et les graphismes avec Midjourney et DALL·E 3
- Le résultat est jouable sur le web, mais ne fonctionne pas sur mobile ; il est aussi possible de créer ses propres niveaux en suivant les explications sous l’écran du jeu
- Les graphismes ont été majoritairement produits par génération d’images par IA, puis certains sprites ont été retouchés dans Photoshop/Photopea pour supprimer l’arrière-plan et les recadrer afin de les adapter au jeu
- Le code a démarré sur une base matter.js et p5.js, puis a été enrichi de manière itérative avec GPT-4 pour le mode de lancement, les collisions, les particules, la forme des monstres et la détection des impacts indirects
- Le code complet fait environ 600 lignes ; il n’a pas écrit le code lui-même, mais il a fallu un processus itératif d’explication des erreurs et de correction, plutôt qu’obtenir un jeu terminé en un seul prompt
Résultat d’Angry Pumpkins
- Angry Pumpkins est un jeu de physique 2D similaire à Angry Birds, réalisé avec GPT-4, Midjourney et DALL·E 3
- Le jeu jouable est disponible sur Angry Pumpkins
- Il ne fonctionne actuellement pas sur mobile
- En lisant les explications sous l’écran du jeu, on peut voir comment créer et jouer ses propres niveaux
- Javi Lopez estime qu’une nouvelle manière de créer uniquement à partir du langage naturel devient possible, et y voit un « moment historique »
Flux de création des graphismes et du code
-
Génération d’images et travail sur les sprites
- DALL·E 3 a été utilisé pour générer l’écran d’accueil à l’ambiance Halloween, le logo « Angry Pumpkins » et l’écran titre avec bouton Play
- Midjourney a servi à créer l’arrière-plan de cimetière, le terrain 2D, le personnage citrouille, le monstre vert, la caisse en bois, les os, les pierres et les planches en bois
- Les objets ont ensuite été produits sous forme de « sprite stylesheets », puis recadrés et détourés dans Photoshop/Photopea
- Les petits détails ont été complétés avec l’inpainting de Midjourney
-
Logique du jeu créée avec GPT-4
- Le code source complet est publié dans sketch.js
- Le code du jeu fait environ 600 lignes, et Javi Lopez précise n’avoir écrit aucune ligne lui-même
- Le prompt de départ consistait à créer, avec matter.js et p5.js, un jeu simple où l’on tire une balle en réglant l’angle et la puissance à la souris pour frapper des caisses empilées avec une physique 2D
- Il a ensuite demandé à plusieurs reprises un mode de lancement à la Angry Birds avec la souris, la correction de l’erreur
Uncaught ReferenceError: Constraint is not defined, un effet de particules de torche, la gestion de monstres circulaires et la détection des impacts indirects
Les itérations comptent plus qu’un prompt unique
- L’essentiel n’est pas de demander un jeu terminé d’un seul coup, mais de partir d’un comportement simple puis de l’étendre et de le corriger en continu
- Chaque fois qu’un problème survenait, il décrivait clairement l’erreur afin que GPT-4 la corrige
- Aujourd’hui, GPT-4 n’en est pas encore au stade où il peut générer un jeu complet à partir d’un seul prompt, mais l’idée qu’il sera possible à l’avenir de créer un jeu vidéo AAA sur simple demande transparaît déjà
1 commentaires
Avis sur Hacker News
J’ai travaillé comme PM sur Angry Birds, et c’est vraiment une excellente démo
L’original utilisait Box2D et du scripting Lua, et bien sûr il fallait aussi créer les ennemis et les niveaux à la main
Vu l’état actuel de la technologie, je ne m’attendrais pas à ce qu’elle produise un jeu à succès, et il y a de fortes chances d’être davantage limité par la technologie que par ses propres compétences
Cela dit, pour valider rapidement des idées, faire des prototypes ou participer à des game jams, c’est un outil qui change la donne, et ça semble aussi être une bonne alternative à Scratch pour que des enfants puissent jouer avec leurs idées
J’ai fait une expérience similaire récemment, où je devais créer une API REST basique et un frontend CRUD avec deux frameworks que je ne connaissais pas bien, et j’ai laissé GPT-4 générer tout le code
C’était probablement plus lent que de simplement lire la documentation et coder moi-même, et quelqu’un de familier avec ces frameworks aurait sans doute été bien plus rapide
Les parties complexes demandaient des prompts très spécifiques et assez longs, et il a fallu environ 5 heures pour construire toute l’application, dont une bonne partie passée à attendre les sorties lentes de ChatGPT
Avec un framework que je connais, ça aurait sans doute été bouclé en moins de 2 heures
En revanche, c’était clairement utile pour vérifier si je faisais les choses correctement, comme si un expert disponible pour répondre à mes questions restait en attente
C’était aussi pratique pour générer du code boilerplate bien formaté, mais je ne pense pas l’utiliser davantage qu’aujourd’hui dans le développement quotidien
Dans la plupart des cas, il est plus rapide de bien apprendre le framework et d’écrire soi-même le code
Je me retrouve souvent à poser des questions du type : « Quelle structure de répertoires convient bien à un projet sur la plateforme {foo} ? » ou « Quelle est la manière idiomatique de faire {x} en {language y} ? »
Comme il a vu énormément de projets dans plusieurs langages, cet avantage mène parfois à de très bonnes réponses à lui seul
Il faut toujours comprendre la programmation, on ne fait que taper du code en anglais naturel
Même si on passe 3 heures à superviser GPT-4 pendant qu’il écrit du code, il se peut qu’il nous reste encore, ce jour-là, 3 heures de productivité de codage maximale non « consommées »
Si c’est via l’API, je serais aussi curieux de savoir avec quels outils vous y accédez en général
Le résultat pourrait vous surprendre
C’est plus intéressant que le déluge de posts du genre « J’ai créé une app iOS avec ChatGPT en 30 minutes ! »
Ce genre de post n’a souvent pas beaucoup de valeur, parce qu’il peut s’agir d’un simple Hello World, alors qu’ici on a au moins un résultat fini à montrer, et c’est effectivement assez impressionnant
Cela dit, les détails qu’il faut connaître sont le temps passé, le nombre de prompts, le nombre de réorientations nécessaires, et le niveau de maîtrise de l’auteur sur les technologies concernées
Personnellement, j’ai trouvé que ChatGPT m’a beaucoup aidé dans plusieurs situations, mais la génération de code n’en faisait pas partie
Il y est dit que « le jeu ne fait que 600 lignes et je n’en ai écrit aucune, mais [le code du jeu] était la partie la plus difficile »
Ce n’est pas un Hello World, mais difficile aussi de dire que c’est bien plus complexe qu’une liste de courses
Malgré tout, le plus impressionnant reste qu’on puisse faire Angry Birds avec 600 lignes et quelques bibliothèques
Le code en production fait environ 5 000 lignes et tout fonctionne. Il n’y a pas beaucoup de trafic, mais c’est tout de même en environnement réel
Comprendre les limites, mieux écrire ses prompts, repérer les risques d’hallucination et demander quels sont les dangers joue énormément
C’était particulièrement utile sur des technologies que je maîtrisais mal. Je suis développeur Android, et je m’en sers pour créer des sites web, ce que je n’avais pas fait moi-même depuis une quinzaine d’années
La partie la plus impressionnante, c’est l’aide sur l’administration système et l’exploitation serveur, avec une bonne capacité à déboguer les erreurs gunicorn
Quand le projet grossit et que le modèle perd le contexte, il faut modifier le code généré, mais sur les gros projets, le principal obstacle reste la limite de longueur du contexte, qui devrait sans doute être atténuée bientôt
Le site que j’ai créé récemment, https://cosmictrip.space/, a été écrit à environ 95 % par ChatGPT, et j’ai utilisé GPT-4 pour générer les prompts puis DALL-E pour créer les images spatiales
C’est un site simple, mais je développe aussi en ce moment un jeu d’aventure IA ouvert basé sur GPT+DALL-E avec images et texte
Si l’API DALL-E 3 sort, j’espère un lancement avant le 6 novembre, et là aussi plus de 95 % du code est écrit par ChatGPT
La génération de code marche si bien que j’utilise l’API GPT-4 dans l’agent que je construis moi-même
Avec les appels de fonctions, je crée des sous-tâches structurées, je fais écrire ce code par l’agent, et j’y ai aussi ajouté la possibilité d’inclure des fichiers comme contexte ou de dialoguer avec le code
Ce n’est pas encore prêt à être rendu public, mais les capacités de génération de code de GPT-4 sont vraiment remarquables, même s’il faut de l’expérience en prompting
Il y a peu de chances que le premier prompt soit bon, donc j’espère que l’agent que je développe réglera bien ce problème
L’idée, c’est un tableau de style Jira/Kanban où l’on assigne des tâches à un codeur IA, un humain approuve ou corrige, et l’IA vérifie le travail pendant que les tickets passent automatiquement d’une colonne à l’autre
Un meilleur test décisif serait de programmer un nouveau jeu sans dizaines de modèles existants
GPT-4 est bon pour ce genre de travail, mais d’après mon expérience, il ne gère pas bien l’amélioration itérative
Plus la conversation s’allonge, plus il perd le contexte précédent, et le code généré s’éloigne du comportement antérieur
Par exemple, un simple « corrige ce bug » peut facilement aboutir à une solution qui casse d’autres fonctionnalités
Le code du fil (1) semble présent dans le résultat final (2), et comme il se trouve tout en haut du code, cela pourrait vouloir dire qu’on a fait régénérer à ChatGPT des blocs de plus de 600 lignes à chaque itération
C’est franchement suspect
Définir quelque chose à la ligne 500 puis créer un nouveau Slingshot à la ligne 20 est très improbable, sauf instruction explicite en ce sens
loadImage('stone2.png');a aussi, par hasard, choisi le bon nom de fichier et la bonne taille de sprite ? Tout cela lui a été fourni dans le prompt avant qu’il écrive le code ? Il faut montrer les prompts réellement utilisésUn scénario bien plus plausible serait d’avoir généré les objets de classe de façon relativement indépendante, puis qu’un humain les ait assemblés dans un gros fichier, ait recopié l’ensemble en entrée, puis créé des prompts sur le code du genre « écris-moi une fonction comme celle-ci »
Il n’est pas impossible que seuls des prompts aient été utilisés, comme l’affirmation le prétend, mais on a l’impression que la partie « j’ai tout fait coder » est fortement exagérée pour obtenir des likes et de la réputation
Il semble plus probable qu’une partie du code ait été écrite ou assemblée à la main, puis fournie en entrée avant de demander « fais aussi ceci »
Donc le résultat est peut-être « 100 % généré », mais pas de la manière que les gens imaginent
Cette approche pousse GPT-4 à réécrire du code existant, mais sans demander explicitement ou ajouter des commentaires expliquant l’intention dans l’ensemble du code, il dérive progressivement des fonctionnalités précédentes
Sans suite de tests, on ne remarque pas cette dérive subtile et des fonctionnalités finissent par casser
Rien n’indique non plus que l’auteur ait fait ce travail
En plus, cette personne a un intérêt direct à vendre des contenus de formation sur l’IA (4), donc elle a intérêt à paraître experte dans ce domaine, et lorsqu’on lui a posé des questions sur X, elle n’a pas fourni plus de détails, ni d’historique Git étape par étape, ni les prompts réellement utilisés
Vu le manque de détails et le résultat difficile à croire, il est raisonnable de rester sceptique dans ce cas précis
On pourrait peut-être produire ce type de résultat avec des modèles comme CodeLlama 34B ou GPT-3.5, mais pas de la manière décrite
Je ne suis même pas certain que ce soit possible avec GPT-4. Les prompts paraissent trop vagues pour être plausibles (5)
Cela dit, j’aimerais qu’on me contredise avec davantage de détails, et GPT-4 reste bel et bien un bon outil
[1] - https://nitter.net/pic/orig/media%2FF9xoI8mXgAAn7v9.jpg
[2] - https://bestaiprompts.art/angry-pumpkins/sketch.js
[3] - https://nitter.net/javilopen/status/1719363669685916095#m
[4] - https://javilopen.substack.com/
[5] - « Maintenant, rends les monstres circulaires, et fais très attention : applique la même technique qui existe déjà pour les rectangulaires concernant la mise à l’échelle et la zone de collision, et ne bâcle pas ça comme la dernière fois. »
En voyant son fils taper sans arrêt sur le spinner de chargement comme s’il était en colère, il a codé ce jeu avec GPT pendant un dimanche après-midi tranquille
https://spinner.franzai.com/
Il pense qu’un jeu de spinner de chargement interactif pourrait devenir un pattern UX intéressant
Cela peut donner un retour à l’utilisateur en montrant que son action a un effet même pendant l’attente
Bien sûr, plutôt du côté des jeux indé que des AAA
Je me souvenais très bien avoir vu à l’époque une actu disant que ce brevet avait expiré, mais en vérifiant je me suis rendu compte que cet « à l’époque » remonte déjà à 8 ans
https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
Il appartenait, si je ne me trompe pas, à Namco, et on pouvait le voir dans Ridge Racer
https://psycnet.apa.org/record/2014-37068-023
Il n’y a désormais plus guère de doute sur le fait que l’IA va transformer le développement
Rien que la semaine dernière, j’ai pu créer deux services de taille intermédiaire, représentant des milliers de lignes de code Python, alors que cela faisait plus de 10 ans que je n’avais pas utilisé Python
Ce qui est vraiment impressionnant, c’est que le résultat est généralement meilleur que le code que j’aurais écrit moi-même
Si vous avez besoin d’un beau README.md, il suffit de lui donner le code source avec les routes, les arguments CLI, etc., et il le génère
Il peut aussi écrire les tests si vous le souhaitez. Cela n’a jamais été aussi facile pour les développeurs
Pour la génération de code, GPT-4 surpasse totalement GPT-3.5
GPT-3.5 s’en sort correctement pour copier si on lui donne des exemples très détaillés, mais GPT-4 donne davantage l’impression de « réfléchir »
D’après mon expérience, le contexte 32k de GPT-4 échoue assez souvent
Par exemple, si vous générez plus de 10 000 tokens, soit environ plus de 30 000 caractères, il faudra peut-être relancer plusieurs fois
Et ChatGPT n’est pas une interface idéale pour tout ce qui n’est pas trivial
Mieux vaut utiliser directement l’API ou quelque chose comme Azure OpenAI Chat Playground, qui permet le contexte 32k
Petite autopromo : j’ai créé une app open source pour automatiser le travail répétitif de génération de prompts : https://github.com/codespin-ai/codespin-cli
Des investissements énormes ont été injectés dans les outils no-code ces 10 dernières années, et il est intéressant de voir qu’avec ChatGPT qui écrit désormais du code si bien, cela devient probablement plus rapide, plus flexible, et d’une ergonomie assez comparable pour les personnes ayant un certain sens technique mais ne codant pas
J’ai récemment dû créer une app de démonstration avec Mendix pour consommer et publier des services REST, et il m’a fallu plusieurs jours pour comprendre les détails
Faire la même chose avec ChatGPT, dans n’importe quel langage, par exemple en bash, aurait sans doute pris quelques minutes
Le déploiement et la gestion des versions peuvent être largement pris en charge via du PaaS/IaaS sans gros niveau technique, surtout en comparaison du coût des plateformes no-code d’entreprise
C’est peut-être un biais personnel, mais j’ai toujours détesté les plateformes no-code pour des tâches sérieuses, parce qu’elles me semblent encore plus pénibles, et pour des raisons similaires je n’aime pas non plus l’ORM ActiveRecord
Malgré tout, le no-code semble bien parti pour devenir obsolète assez vite
Quand il suffit de demander puis de faire un copier-coller, qui a encore envie de faire du drag-and-drop ?
Le no-code est simple mais rigide, tandis que le code est flexible mais fastidieux et sujet aux erreurs
Exprimer rapidement ce que l’on veut en langage naturel pour obtenir du code, puis disposer de la souplesse nécessaire pour l’ajuster si ce code est propre, c’est très puissant
Dans certains cas, comme ici, il n’est peut-être même pas nécessaire de l’ajuster
La suite donne envie
Cela ne devrait pas prendre bien longtemps
C’est un blanchiment statistique du plagiat, et c’est assez impressionnant
Personnellement, je pense qu’empêcher la ruée vers l’or du blanchiment est une priorité juridique plus urgente que de faire semblant de stopper HAL tout en créant en pratique des douves de marché pour les grands vendeurs de pioches actuels
Il doit sûrement déjà exister des freelances ou travailleurs à distance qui ont augmenté leur productivité de 100x en utilisant correctement GPT-4 et les outils d’IA
J’ai du mal à imaginer qu’un hack aussi puissant n’existe que dans le vide
Quand on pense à ce qui sera possible dans deux ans, le génie est déjà sorti de la bouteille
Si quelqu’un connaît des astuces pour multiplier sa productivité par « 100 » avec ChatGPT, j’aimerais bien qu’il les partage
Honnêtement, chaque fois que je vois ce genre de post, je m’inquiète de plus en plus pour mon employabilité
Je n’ai pas de plan B et j’ai passé beaucoup trop de temps à apprendre l’ingénierie logicielle, donc la situation ne semble pas très rassurante
Comme d’autres l’ont dit, le jour où des gens ordinaires sauront rédiger des spécifications produit assez détaillées pour qu’un LLM fabrique le logiciel fonctionnel dont ils ont besoin, les programmeurs auront effectivement des soucis
Mais cela ressemble déjà beaucoup à de la programmation
Je pense que notre travail va changer. Nous passerons moins de temps à taper du code au clavier, et plus de temps à réfléchir à ce qu’il faut construire
Nous avons même de bonnes chances de devenir plus précieux, parce que nous pourrons accomplir bien davantage
J’ai essayé d’obtenir une sprite sheet d’animation top-down de paladin pour un éventuel RPG, et voici la suite de l’échec : https://imgur.com/a/2uJyUT3
En réalité, j’ai d’abord essayé des variantes en vue du dessus, et à la fin j’ai ajouté une vue de côté, juste par curiosité
top down fonctionnait parfois, mais c’était très instable
Je me demande si DALL-E 3 a besoin du même type d’indications