paint-brush
¡Cómo dejo que una IA programe un juego para mí!por@lukaszwronski
17,868 lecturas
17,868 lecturas

¡Cómo dejo que una IA programe un juego para mí!

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

Demasiado Largo; Para Leer

Estaba tratando de averiguar si puedo escribir un clon completo de Space Invaders usando solo el código escrito por una IA. He usado Copilot para probarlo. Tomó 2 horas construir el juego con algunos problemas importantes, pero en general el experimento fue un éxito. Puedes ver mi lucha en un video de 2 horas de duración adjunto a este artículo.

Company Mentioned

Mention Thumbnail
featured image - ¡Cómo dejo que una IA programe un juego para mí!
Lukasz Wronski HackerNoon profile picture


Recientemente descubrí que Github Copilot, una IA que ayuda a escribir el código al sugerir fragmentos completos (a menudo basados solo en comentarios en lenguaje natural), ahora está disponible como un servicio comercial. Ya no necesito esperar para acceder a la versión beta, me registré para una prueba gratuita de dos meses.


Debo decir que mis expectativas eran altas. He jugado un poco con OpenAI API antes. Creo que usa el mismo modelo que Copilot, así que sabía que podría ser una experiencia alucinante. Lo instalé como una extensión de Visual Studio Code y comencé a preguntarme cómo debo desafiar a mi nuevo colega virtual.

Que empiecen los juegos


Al leer algunos de los comentarios y artículos de la comunidad, descubrí que una de las ventajas de Copilot es que esta IA conoce más lenguajes de programación, marcos y API que cualquier desarrollador de flash y huesos que viva hoy. Después de todo, aprende usando cada repositorio público de GitHub que haya existido. Puede ser algo más que una herramienta de productividad. También puede ser una forma interactiva de descubrir cosas nuevas.


Mientras espero utilizarlo de esta manera, he decidido construir un juego. Un clon de Space Invaders parecía ser una elección adecuada, pero para hacer esto más interesante, hice algunas suposiciones:


  1. Usaré Python , un lenguaje que conozco muy bien y lo empleo solo de vez en cuando para resolver los desafíos de CTF.
  2. Usaré PyGame , una biblioteca con la que jugué hace más de diez años para construir un pequeño proyecto académico.
  3. No me prepararé de ninguna manera , solo sigo la corriente.
  4. No escribiré una sola línea de código yo mismo , esperando que mi copiloto lo escriba todo por mí.


Configuré la grabación de pantalla, encendí mi micrófono para hacer un pequeño comentario, inicié Visual Studio y acabo de escribir mi primera solicitud:


"""main function for a pygame"""


Copilot comenzó a darme líneas de código, una tras otra. Acabo de ingresar con tabulación a través de la lista de sugerencias y acepto un montón de importaciones. Entusiasmado al principio, rápidamente me encontré atrapado en un ciclo infinito de agregar las mismas dos líneas de código una y otra vez. No es bueno.


Con un mal comienzo, rápidamente me di cuenta de que estoy tratando de hacer demasiado, demasiado rápido. Pedir a Copilot que agregue una importación de PyGame primero y luego que cree una función que muestre una ventana funcionó.

En ese momento, también me di cuenta de que al hacer mi solicitud más precisa, puedo mejorar los resultados. Mientras escribe


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


Lo tengo funcionando excepto por el hecho de que se mostró solo por un segundo y luego se detuvo de inmediato. Entonces me imaginé que tenía que ser muy directo con respecto a mis expectativas. cambiándolo a


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


Copilot amplió el código agregando un bucle de juego básico que evitaba que la ventana se cerrara.


Parecía que mi amigo y yo comenzamos a comunicarnos entre nosotros. ¡Agradable!

Polillas en mi estómago

El siguiente paso fue crear una clase de nave espacial. Creé una clase en un archivo separado, nuevamente comencé a escribir otra solicitud y encontré otra cosa interesante. Resulta que Copilot sugiere no solo el código sino también el contenido de los comentarios que estoy escribiendo. Comencé a pedir usar las teclas de flecha para mover mi nave espacial y sugirió una oración completa.


Copilot no solo escribe el código, sino que también sugiere lo que le gustaría que hiciera


Tengo que decir que era un poco escéptico si Copilot realmente entendería lo que está pasando en cuanto al proyecto. Analizar el código en un archivo editado actualmente es una cosa. Averiguar cómo estos archivos están interconectados es otra tetera.


El copiloto dice: "Te tengo cubierto". Es consciente de las clases en otros archivos, y no fue un problema usar la nave espacial en nuestra clase de juego. Copilot también descubrió que hemos definido un tamaño de ventana de juego específico y lo usamos mientras colocamos la nave espacial en la parte inferior central de la pantalla.

Debes pensar - "esta herramienta es asombrosa". ¿Derecha?


Lo es, pero nuestra relación no era solo luz de luna y rosas. Algunos de los problemas eran triviales, como lógica innecesaria en funciones que le pedí a Copilot que escribiera para mí. Algunas sugerencias llegaron con retraso y he perdido un poco de tiempo esperándolas.


A veces me sentía frustrado por mis propios errores. Dejé un comentario de que la función debería devolver cero en la parte superior del archivo, y luego, escribiendo otro comentario a continuación, estaba averiguando por qué Copilot intenta devolver cero al final de mi función. Pero no fue nada en comparación con el problema que pasé casi una hora resolviendo.


Estaba buscando colocar el barco en el lugar correcto y establecer su tamaño en 50x50 píxeles. Estaba tratando de formular mi comentario de muchas maneras. Obteniendo siempre el mismo resultado. Código, que no funcionaba porque Copilot decidió usar métodos que no existían en PyGame.

Obstinado como una mula, estaba tratando de invocar set_size y set_center en mi objeto sprite cargado, cada vez que obtenía:


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


Innumerables veces he intentado reformular mi solicitud y siempre obtengo el código que no funcionaba en absoluto. Muy frustrante.


En algún momento, incluso pensé que debería dejar de grabar y olvidarme de eso. Etiquete Copilot como no apto para este propósito y finalice el experimento. Sin embargo, sentí que debe haber una manera de superar esto.

No eres tu, soy yo

Pensé que trabajando con Copilot podía olvidarme de los documentos, pero resultó que era mi culpa por no entender los conceptos básicos de PyGame. No entendí el concepto de Rect ayudando a mover objetos en la escena. No entendí cómo usar las clases de utilidad para escalar mi sprite.

Encontrar esa información en la documentación rompió el hechizo. Pude sugerir una estrategia diferente de Copilot separando el sprite representado como un objeto Surface del Rect y pasándolos por separado a la pantalla.


El resto de este curso fue pan comido. Cuanto más código produje, más inteligente se volvió Copilot. Fue mágico cuando leyó mi mente e hizo que las balas y los extraterrestres se movieran en las direcciones correctas. Fue pan comido agregar un contador de puntuación que Copilot descubrió automáticamente que debería sumar las colisiones de balas con los invasores.


Copilot sugiere fragmentos completos de código


Después de todo, fue un éxito. El juego funcionaba y lo hice en menos de 2 horas aprendiendo todo desde cero. Copilot escribió al menos el 99 % del código y apenas he tenido que mirar la documentación, aunque sin ella probablemente todavía estaría atascado con el código incorrecto que me entregó mi nuevo amigo.


  • ¿Es Copilot una buena manera de aprender a usar una nueva biblioteca o lenguaje de programación? De alguna manera lo es, pero si crees que nunca volverás a leer la documentación, entonces estás equivocado. Saber al menos los conceptos básicos de PyGame me haría la vida mucho más fácil y pasaría mucho menos tiempo.


  • ¿Podemos usar Copilot y no escribir una sola línea de código? Más bien no. Como nuestro propio código da forma a la forma en que piensa la IA. Realmente entiende mucho, así que darle un pequeño empujón hace que sea un placer trabajar con él. Aportará mucho más valor al ayudarlo a expandir el código existente que construir algo desde cero.


  • ¿Es Copilot una herramienta increíble? Definitivamente. Este es el futuro del desarrollo y no digo que nos quitará el trabajo porque la IA no reemplazará a los programadores en el corto plazo, pero definitivamente nos hará más productivos. Es una revolución y fue muy divertido descubrir sus capacidades de esta manera.


Puedes ver todos mis esfuerzos en este video de 2 horas en YouTube:

👉


Sin preparación, sin edición, sin trucos. Pura improvisación.


Solo una advertencia rápida: es emocional. Estoy frustrado la mitad del tiempo solo por reír y estar totalmente emocionado de dar cada pequeño paso en la dirección correcta.


También puede encontrar el código fuente que generó en mi Github. Como mencioné en el video, no es bonito, pero funciona:

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



Espero que lo hayas disfrutado. ¡Gracias por leer!