paint-brush
Comment je laisse une IA coder un jeu pour moi !par@lukaszwronski
17,868 lectures
17,868 lectures

Comment je laisse une IA coder un jeu pour moi !

par Lukasz Wronski2022/06/29
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

J'essayais de comprendre si je pouvais écrire un clone entier de Space Invaders en utilisant uniquement le code écrit par une IA. J'ai utilisé Copilot pour l'essayer. Il a fallu 2 heures pour construire le jeu avec quelques problèmes majeurs, mais en général l'expérience a été un succès. Vous pouvez voir mon combat dans une vidéo de 2 heures jointe à cet article.

Company Mentioned

Mention Thumbnail
featured image - Comment je laisse une IA coder un jeu pour moi !
Lukasz Wronski HackerNoon profile picture


Récemment, j'ai découvert que Github Copilot, une IA qui aide à écrire le code en suggérant des extraits entiers (souvent basés uniquement sur des commentaires en langage naturel), est désormais disponible en tant que service commercial. N'ayant plus besoin d'attendre l'accès à la version bêta, je me suis enregistré pour un essai gratuit de deux mois.


Je dois dire - mes attentes étaient élevées. J'ai déjà joué un peu avec l'API OpenAI. Je crois qu'il utilise le même modèle que Copilot, donc je savais que cela pourrait être une expérience époustouflante. Je l'ai installé en tant qu'extension Visual Studio Code et j'ai commencé à me demander comment défier mon nouveau collègue virtuel.

Que les jeux commencent


En lisant certains des commentaires et articles de la communauté, j'ai découvert que l'un des avantages de Copilot est que cette IA connaît plus de langages de programmation, de frameworks et d'API que n'importe quel développeur flash et bone vivant aujourd'hui. Après tout, il apprend en utilisant chaque référentiel GitHub public qui ait jamais existé. Il peut être plus qu'un simple outil de productivité. Cela peut aussi être un moyen interactif de découvrir de nouvelles choses.


Tout en ayant hâte de l'utiliser de cette façon, j'ai décidé de créer un jeu. Un clone de Space Invaders semblait être un choix approprié, mais pour rendre cela plus intéressant, j'ai fait quelques hypothèses :


  1. J'utiliserai Python - un langage que je connais à peine et que je ne l'emploierai que de temps en temps pour résoudre les défis du CTF
  2. J'utiliserai PyGame - une bibliothèque avec laquelle j'ai joué il y a plus de dix ans pour construire un petit projet académique
  3. Je ne me préparerai en aucune façon - suivez simplement le courant
  4. Je n'écrirai pas une seule ligne de code moi -même - je m'attends à ce que mon copilote écrive tout pour moi


J'ai configuré l'enregistrement d'écran, allumé mon microphone pour faire un petit commentaire, lancé Visual Studio et je viens d'écrire ma première requête :


"""main function for a pygame"""


Copilot a commencé à me donner des lignes de code, les unes après les autres. Je viens d'entrer moi-même dans la liste des suggestions acceptant une tonne d'importations. Enthousiaste au début, je me suis rapidement retrouvé coincé dans une boucle infinie consistant à ajouter les mêmes deux lignes de code encore et encore. Pas bien.


Mal parti, je me suis vite rendu compte que j'essayais d'en faire trop, trop vite. Demander à Copilot d'ajouter d'abord une importation PyGame, puis de créer une fonction affichant une fenêtre a fait l'affaire.

À ce moment-là, j'ai aussi réalisé qu'en précisant ma demande, je pouvais améliorer les résultats. En écrivant


"""create a function showing a game window"""


Je l'ai fait fonctionner, sauf pour le fait qu'il n'a montré qu'une seconde, puis s'est immédiatement arrêté. Ensuite, j'ai imaginé que je devais être très simple concernant mes attentes. Le changer en


"""create a function showing a game window and then left it open"""


Copilot a étendu le code en ajoutant une boucle de jeu de base qui empêchait la fenêtre de se fermer.


Il semblait que mon copain et moi avons commencé à communiquer les uns avec les autres. Agréable!

Des papillons dans mon ventre

L'étape suivante consistait à créer une classe de vaisseau spatial. J'ai créé une classe dans un fichier séparé, j'ai recommencé à écrire une autre requête et j'ai trouvé une autre chose intéressante. Il s'avère que Copilot suggère non seulement le code mais aussi le contenu des commentaires que j'écris. J'ai commencé à demander d'utiliser les touches fléchées pour déplacer mon vaisseau spatial, et cela a suggéré une phrase entière.


Copilot n'écrit pas seulement le code, mais suggère également ce que vous pourriez vouloir qu'il fasse


Je dois dire que j'étais un peu sceptique quant à savoir si Copilot comprendra réellement ce qui se passe au niveau du projet. Analyser le code d'un fichier en cours d'édition est une chose. Comprendre comment ces fichiers sont interconnectés est une autre paire de manches.


Le copilote dit : "Je t'ai couvert". Il est conscient des classes dans d'autres fichiers, et ce n'était pas un problème d'utiliser un vaisseau spatial dans notre classe de jeu. Copilot a également compris que nous avions défini une taille de fenêtre de jeu spécifique et que nous l'avions utilisée pour positionner le vaisseau spatial en bas au centre de l'écran.

Vous devez penser - "cet outil est incroyable". Droit?


C'est en quelque sorte, mais notre relation n'était pas seulement clair de lune et roses. Certains des problèmes étaient triviaux, comme une logique inutile dans les fonctions que j'ai demandé à Copilot d'écrire pour moi. Certaines suggestions arrivaient avec du retard, et j'ai perdu un peu de temps à les attendre.


Parfois, j'étais frustré à cause de mes propres erreurs. J'ai laissé un commentaire indiquant que la fonction doit renvoyer zéro en haut du fichier, puis en écrivant un autre commentaire ci-dessous, je cherchais pourquoi Copilot essayait de renvoyer zéro à la fin de ma fonction. Mais ce n'était rien en comparaison du problème que j'avais passé près d'une heure à résoudre.


Je cherchais à positionner le vaisseau au bon endroit et à définir sa taille à 50x50 pixels. J'essayais de formuler mon commentaire de tant de façons. Toujours le même résultat. Code, cela ne fonctionnait pas car Copilot a décidé d'utiliser des méthodes qui n'existaient pas dans PyGame.

Têtu comme une mule, il essayait d'invoquer set_size et set_center sur mon objet sprite chargé, obtenant à chaque fois :


AttributeError: 'pygame.Surface' object has no attribute 'set_size'


D'innombrables fois, j'ai essayé de reformuler ma demande en obtenant toujours le code qui ne fonctionnait pas du tout. Tellement frustrant.


À un moment donné, j'ai même pensé que je devrais arrêter d'enregistrer et oublier. Étiquetez Copilot comme ne convenant pas à cette fin et mettez fin à l'expérience. Pourtant, je sentais qu'il devait y avoir un moyen de surmonter cela.

Ce n'est pas toi c'est moi

Je pensais qu'en travaillant avec Copilot, je pouvais oublier la documentation, mais il s'est avéré que c'était de ma faute si je ne comprenais pas les bases de PyGame. Je n'ai pas compris le concept de Rect aidant à déplacer des objets sur la scène. Je n'ai pas compris comment utiliser les classes utilitaires pour mettre à l'échelle mon sprite.

Trouver cette information dans la documentation rompit le charme. J'ai pu suggérer une stratégie différente de Copilot en séparant le sprite représenté comme un objet Surface du Rect et en les passant séparément à l'écran.


Le reste de ce cours était la paix du gâteau. Plus j'ai produit de code, plus Copilot est intelligent. C'était magique quand il lisait dans mon esprit et faisait bouger les balles et les extraterrestres dans la bonne direction. C'était un jeu d'enfant d'ajouter un compteur de score que Copilot a automatiquement compris qu'il devrait ajouter des collisions de balles avec des envahisseurs.


Copilot suggère des extraits de code entiers


Après tout, ce fut un succès. Le jeu fonctionnait et je l'ai fait en moins de 2 heures en apprenant tout à partir de zéro. Copilot a écrit au moins 99% du code et j'ai à peine eu besoin de consulter la documentation, bien que sans elle, je serais probablement encore coincé avec le code incorrect servi par mon nouvel ami.


  • Copilot est-il un bon moyen d'apprendre à utiliser un nouveau langage de programmation ou une nouvelle bibliothèque ? C'est un peu le cas, mais si vous pensez que vous ne lirez plus jamais la documentation, alors vous vous trompez. Connaître au moins les bases des concepts de PyGame me faciliterait grandement la vie et j'y passerais beaucoup moins de temps.


  • Peut-on utiliser Copilot sans écrire une seule ligne de code ? Plutôt pas. Comme notre propre code façonne la façon dont l'IA pense. Il comprend vraiment beaucoup de choses, donc lui donner juste un petit coup de pouce en fait un plaisir de travailler avec. Cela apportera beaucoup plus de valeur en vous aidant à étendre le code existant que de créer quelque chose à partir de zéro.


  • Copilot est-il un outil formidable ? Absolument. C'est l'avenir du développement et je ne dis pas que cela prendra nos emplois car l'IA ne remplacera pas les programmeurs de si tôt, mais cela nous rendra certainement plus productifs. C'est une révolution et c'était très amusant de découvrir ses capacités de cette façon.


Vous pouvez regarder tous mes efforts dans cette vidéo de 2 heures sur YouTube :

👉


Aucune préparation, aucun montage, aucune astuce. Pure improvisation.


Juste un avertissement rapide - c'est émotif. Je suis frustré la moitié du temps juste pour rire et être totalement excité de faire chaque petit pas dans la bonne direction.


Vous pouvez également trouver le code source généré sur mon Github. Comme je l'ai mentionné dans la vidéo, ce n'est pas joli, mais ça marche:

👉 https://github.com/lukasz-wronski/copilot-invaders



J'espère que vous en avez profité. Merci d'avoir lu!