Clonar “Angry Birds” usando solo IA
(twitter.com/javilopen)- Javi Lopez creó Angry Pumpkins, un juego de física 2D al estilo Angry Birds, generando el código con GPT-4 y los gráficos con Midjourney y DALL·E 3
- El resultado se puede jugar en la web, pero no funciona en móviles; también se pueden crear niveles propios siguiendo las instrucciones debajo de la pantalla del juego
- La mayoría de los gráficos se hicieron con generación de imágenes por IA, y algunos sprites se ajustaron para el juego quitando fondos y recortándolos con Photoshop/Photopea
- El código empezó sobre la base de matter.js y p5.js, y se fue ampliando mediante iteraciones con GPT-4 para el sistema de lanzamiento, colisiones, partículas, formas de monstruos y detección de impactos indirectos
- El código completo tiene unas 600 líneas y, aunque no escribió código directamente, fue necesario un proceso iterativo de explicar errores y corregirlos, más que obtener un juego terminado con un solo prompt
Resultado de Angry Pumpkins
- Angry Pumpkins es un juego de física 2D similar a Angry Birds, creado con GPT-4, Midjourney y DALL·E 3
- El juego jugable se puede ver en Angry Pumpkins
- Actualmente no funciona en móviles
- Si lees las instrucciones debajo de la pantalla del juego, puedes ver cómo crear y jugar tus propios niveles
- Javi Lopez considera que se está volviendo posible una nueva forma de trabajo para crear cosas usando solo lenguaje natural, y lo ve como un “momento histórico”
Flujo de creación de gráficos y código
-
Generación de imágenes y trabajo con sprites
- DALL·E 3 se usó para generar una pantalla de título con ambiente de Halloween, el logo de “Angry Pumpkins” y un botón de Play
- Midjourney se usó para crear objetos del juego como el fondo de cementerio, terreno 2D, personajes de calabaza, monstruos verdes, cajas de madera, huesos, piedras y tablas de madera
- Los objetos se crearon en forma de “sprite stylesheets” y luego se recortaron y se les quitó el fondo con Photoshop/Photopea
- Los pequeños detalles se complementaron con inpainting de Midjourney
-
Lógica del juego creada con GPT-4
- El código fuente completo está publicado en sketch.js
- El código del juego tiene unas 600 líneas, y Javi Lopez afirma que no escribió código directamente
- El prompt inicial buscaba crear un juego simple usando matter.js y p5.js, donde se disparara una bola ajustando ángulo y fuerza con el mouse para golpear cajas apiladas con física 2D
- Después pidió de forma iterativa un sistema de lanzamiento con mouse al estilo Angry Birds, corregir el error
Uncaught ReferenceError: Constraint is not defined, efectos de partículas para antorchas, manejo de monstruos circulares y detección de impactos indirectos
La iteración importa más que un solo prompt
- La clave no fue pedir un juego terminado de una sola vez, sino empezar desde una base funcional simple y seguir ampliándola y corrigiéndola
- Cada vez que surgía un problema, describía el error con claridad y hacía que GPT-4 lo corrigiera
- Aunque GPT-4 todavía no está en una etapa en la que pueda generar un juego completo con un solo prompt, el caso expresa la expectativa de que en el futuro se puedan crear videojuegos de nivel AAA solo con pedirlos
1 comentarios
Comentarios de Hacker News
Trabajé como PM en Angry Birds, y esto de verdad es una demo excelente
El original usaba Box2D y scripting en Lua, y por supuesto también había que crear manualmente a los enemigos y los niveles
No esperaría que con el estado actual de la tecnología se pudiera hacer un juego exitoso, y es muy probable que termines limitado por las fronteras de la tecnología más que por tu propia habilidad
Aun así, es una herramienta que cambia las reglas del juego para validar ideas rápido, hacer prototipos y participar en game jams, y también parece una buena alternativa a Scratch para que los niños jueguen con sus ideas
Hace poco hice un experimento parecido porque tenía que crear una API REST básica y un frontend CRUD con 2 frameworks que no conocía bien, y dejé que GPT-4 generara todo el código
Muy probablemente fue más lento que simplemente escribirlo yo mismo viendo la documentación, y alguien familiarizado con esos frameworks seguramente habría sido mucho más rápido
Las partes complejas requerían prompts muy específicos y largos, y me tomó unas 5 horas completar toda la app; una buena parte de ese tiempo se fue esperando la salida lenta de ChatGPT
Si hubiera sido un framework conocido, probablemente lo habría terminado en menos de 2 horas
Definitivamente fue útil para comprobar si lo estaba haciendo de la manera correcta; se sentía como tener a un experto disponible para hacer preguntas
También fue bueno para generar código boilerplate con el formato correcto, pero no creo que lo use más que ahora en el desarrollo cotidiano
En la mayoría de los casos, es más rápido aprender bien el framework y escribirlo uno mismo
Terminé haciendo seguido preguntas como: “¿Qué estructura de directorios funciona bien para un proyecto en la plataforma {foo}?” o “¿Cuál es la forma idiomática de hacer {x} en {language y}?”
Tiene la ventaja de haber visto muchos proyectos en varios lenguajes, así que para algunas preguntas eso por sí solo lleva a respuestas bastante buenas
Igual tienes que entender programación; solo que estás escribiendo código en inglés natural
Aunque pases 3 horas supervisando a GPT-4 mientras escribe código, puede que todavía te queden 3 horas de máxima productividad programando sin haberlas “gastado” ese día
Si es por API, también me interesa saber con qué herramientas accedes normalmente
El resultado podría sorprenderte
Esto resulta más interesante que la avalancha de publicaciones tipo “¡Hice una app de iOS en 30 minutos con ChatGPT!”
Esas publicaciones podrían ser solo un simple Hello World, así que no significan gran cosa, pero aquí al menos están mostrando un producto terminado y de hecho es bastante impresionante
Aun así, los detalles que habría que conocer son cuánto tiempo tomó, cuántos prompts se usaron, cuántas correcciones de rumbo hicieron falta y qué tan hábil era la persona con la tecnología relacionada
Personalmente he sentido que ChatGPT ha sido de gran ayuda en muchas situaciones, pero la generación de código no fue una de ellas
Dice algo como: “el juego solo tiene 600 líneas y yo no escribí ni una sola, pero [programar el juego] fue la parte más difícil”
No es un Hello World, pero tampoco diría que es mucho más difícil que una lista de compras
Aun así, lo más impresionante es que se pueda hacer Angry Birds con solo 600 líneas y unas cuantas librerías
El código en producción tiene unas 5 mil líneas y todo funciona. No tiene mucho tráfico, pero igual está en un entorno de producción
Entender las limitaciones, escribir mejores prompts y detectar la posibilidad de alucinaciones preguntando por los riesgos son factores muy importantes
En especial fue donde mejor me funcionó: en tecnologías que no conozco bien. Soy desarrollador Android, pero lo estoy usando para crear sitios web, algo que no hacía directamente desde hace unos 15 años
La parte más genial fue la ayuda con administración de sistemas y operación de servidores, y es bueno depurando errores de gunicorn
Cuando el proyecto crece y pierde el contexto, hay que corregir el código que genera, pero el mayor obstáculo en proyectos más grandes es el límite de longitud de contexto, y parece que pronto se va a aliviar
Un sitio reciente que hice fue https://cosmictrip.space/, donde ChatGPT escribió alrededor del 95% del código, y usé GPT-4 para generar los prompts y luego DALL-E para crear imágenes del espacio
Es un sitio simple, pero ahora también estoy haciendo un juego de aventura abierto de imagen+texto basado en GPT+DALL-E
Cuando salga la API de DALL-E 3, espero lanzarlo antes del 6 de noviembre, y en este juego de aventura también más del 95% del código lo escribe ChatGPT
La generación de código funciona tan bien que estoy usando la API de GPT-4 en un agente que estoy construyendo yo mismo
Con llamadas a funciones creo subtareas estructuradas, hago que el agente escriba ese código, y también le añadí la capacidad de incluir archivos como contexto o conversar con el código
Todavía no está listo para publicarse, pero la capacidad de GPT-4 para generar código es realmente increíble, aunque sí hace falta experiencia escribiendo prompts
Es poco probable que el primer prompt que escribas sea bueno, así que espero que el agente que estoy creando resuelva bien esa parte
La idea es asignar un programador de IA a tareas dentro de un tablero estilo Jira/Kanban, donde una persona aprueba o corrige, y la IA va verificando el trabajo mientras los tickets se mueven automáticamente entre columnas
Programar un juego nuevo que no tenga decenas de plantillas existentes sería una mejor prueba de fuego
GPT-4 sí es bueno para este tipo de trabajo, pero en mi experiencia no se le da bien la mejora iterativa
Mientras más larga se vuelve la conversación, más pierde el contexto anterior y el código que genera se desvía del comportamiento previo
Por ejemplo, un “arréglame este bug” puede terminar fácilmente en una solución que rompe otra funcionalidad
El código del hilo (1) parece estar presente en el resultado final (2), y como está al principio del archivo, eso podría significar que hicieron que ChatGPT regenerara en bloques de más de 600 líneas
Eso es bastante sospechoso
Definir algo cerca de la línea 500 y luego crear un nuevo Slingshot en la línea 20 es muy poco probable, a menos que se le haya indicado explícitamente que lo hiciera así
¿
loadImage('stone2.png');también eligió por casualidad el nombre correcto del archivo y el tamaño correcto del sprite? ¿Le dieron todo eso en los prompts y luego escribió el código? Habría que mostrar los prompts reales usadosUn escenario mucho más creíble es que hayan generado los objetos de clase de forma relativamente independiente, luego una persona los ensambló en un archivo grande, copió todo como entrada y después creó prompts sobre el código del tipo “escríbeme una función así”
No es imposible que, como afirman, solo hayan usado prompts, pero da la impresión de que exageran bastante la parte de “hizo toda la programación” para conseguir likes y reputación
Parece más probable que hayan escrito o ensamblado parte del código a mano, lo hayan metido como entrada y luego fueran pidiendo cosas con prompts del tipo “haz esto también”
Así que la salida podría ser “100% generada”, pero quizá no de la forma que la gente imagina
Este enfoque hace que GPT-4 reescriba código existente, pero si no se le pide explícitamente o no se añaden comentarios que expliquen la intención a lo largo de todo el código, termina derivando poco a poco desde la funcionalidad previa
Sin una batería de pruebas, es fácil no notar esa deriva sutil y que algo termine roto
Tampoco hay ninguna mención de que el autor haya hecho algo así
Además, esta persona tiene un interés económico (4) porque vende material educativo sobre IA, así que le conviene parecer experto en el área, y cuando le preguntaron en X tampoco proporcionó más detalles, un historial de Git paso a paso ni los prompts reales que usó
Viendo la falta de detalles y lo difícil de creer que resulta el resultado, en este caso parece razonable ser escéptico
Se podrían crear resultados de este tipo con modelos como CodeLlama 34B o GPT-3.5, pero no de la manera descrita
Ni siquiera estoy seguro de que se pueda con GPT-4. Los prompts se ven demasiado vagos como para parecer reales (5)
Aun así, estaría bien que respondieran con más detalles, y GPT-4 sí es una buena herramienta
[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] - “Ahora, haz que los monstruos sean circulares, y ten mucho cuidado: aplica la misma técnica que ya existe para los rectangulares con respecto al escalado y al área de colisión, y no lo arruines como antes.”
Al ver a su hijo tocar repetidamente el spinner de carga como si estuviera enojado, él y GPT programaron este juego en una tranquila tarde de domingo
https://spinner.franzai.com/
Cree que un juego interactivo de spinner de carga podría convertirse en un patrón de UX interesante
Podría dar retroalimentación de que las acciones del usuario sí tienen efecto incluso mientras espera algo
Aunque claro, no AAA sino más bien del lado de los indies
Recuerdo claramente haber visto hace tiempo la noticia de que esa patente había expirado, pero al buscarla resulta que ese “hace tiempo” ya fue hace 8 años
https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
Según recuerdo, era propiedad de Namco y podía verse en Ridge Racer
https://psycnet.apa.org/record/2014-37068-023
Ya no hay lugar a dudas de que la IA está cambiando el desarrollo
Solo la semana pasada pude crear dos servicios de tamaño medio, con miles de líneas de código en Python, un lenguaje que no usaba desde hace más de 10 años
Lo realmente impresionante es que, por lo general, el resultado era mejor que el código que yo mismo habría escrito
Si necesitas un README.md elegante, le das el código fuente con rutas, argumentos de CLI y demás, y te lo genera
También te hace tests si se los pides. Nunca había sido tan fácil ser desarrollador
En generación de código, GPT-4 aplasta a GPT-3.5
GPT-3.5 puede copiar razonablemente bien si le das ejemplos muy detallados, pero GPT-4 da la impresión de que hasta cierto punto “piensa”
En mi experiencia, el contexto de 32k de GPT-4 falla con bastante frecuencia
Por ejemplo, si vas a generar más de 10 mil tokens, más o menos 30 mil caracteres, quizá tengas que reintentarlo varias veces
Además, ChatGPT no es la interfaz ideal para tareas que no sean triviales
Conviene más usar la API directamente o algo como Azure OpenAI Chat Playground, donde puedes usar contexto de 32k
Ya que estamos con la autopromoción, hice una app open source que automatiza el trabajo repetitivo de iterar en la creación de prompts: https://github.com/codespin-ai/codespin-cli
En los últimos 10 años se ha invertido muchísimo en herramientas no-code, y ahora resulta interesante que ChatGPT escriba código tan bien que, para gente con criterio técnico pero que no programa, probablemente ya sea más rápido, más flexible y con una usabilidad cercana al mismo nivel
Hace poco tuve que hacer una app demo en Mendix para consumir y publicar servicios REST, y me tomó días entender los detalles
Si hubiera hecho lo mismo con ChatGPT en cualquier lenguaje, por ejemplo bash, creo que me habría tomado minutos
El despliegue y el control de versiones pueden resolverse con PaaS/IaaS sin gran capacidad técnica, especialmente si lo comparas con el costo de las plataformas no-code empresariales
Puede ser un sesgo personal, pero siempre me han desagradado las plataformas no-code porque para hacer cosas serias me parecen más engorrosas, y por razones parecidas también me desagrada el ORM ActiveRecord
Aun así, parece que lo no-code podría volverse obsoleto bastante pronto
Si solo tienes que preguntar y copiar-pegar, ¿quién va a querer arrastrar y soltar?
El no-code es fácil pero rígido, mientras que programar es flexible pero tedioso y propenso a errores
Si puedes describir rápidamente con palabras lo que quieres y obtener el código, y ese código además queda limpio, entonces ganas la flexibilidad de ajustarlo según haga falta
En algunos casos, como este, quizá ni siquiera haga falta ajustarlo
Me emociona lo que viene
No parece que fuera a tomar tanto tiempo
Esto es un lavado estadístico de plagio, así que está bastante elegante
Personalmente, me parece una prioridad legal más urgente frenar esta fiebre del oro del lavado que seguir fingiendo que se está deteniendo a HAL mientras en realidad se construyen fosos de mercado para los grandes vendedores de picos actuales
Seguro que ya hay freelancers o trabajadores remotos que, usando bien GPT-4 y herramientas de IA, han multiplicado su productividad por 100
Cuesta imaginar que un truco tan potente exista solo en el vacío
Si piensas en lo que será posible dentro de 2 años, el genio ya salió de la botella
Si conoces algún truco para aumentar la productividad “100 veces” con ChatGPT, me encantaría que lo compartieras
Honestamente, cada vez que veo posts así me preocupa más mi empleabilidad
No tengo un plan alternativo y he invertido demasiado tiempo en aprender ingeniería de software, pero la situación no se ve bien
Como ya dijeron otros, el día en que la gente común pueda escribir especificaciones de producto lo bastante detalladas como para que un LLM genere software funcional exactamente como lo necesitan, ahí sí los programadores estarán en problemas
Pero eso suena bastante parecido a programar
Creo que nuestro trabajo va a cambiar. Pasaremos menos tiempo tecleando código y más tiempo pensando qué construir
De hecho, es muy probable que nos volvamos más valiosos. Porque podremos hacer muchas más cosas
Intenté conseguir una sprite sheet con animaciones top-down de un paladín para un posible juego RPG, y aquí está el proceso fallido: https://imgur.com/a/2uJyUT3
En realidad, el orden fue que primero probé variantes top-down y al final metí una vista lateral solo por curiosidad
top down a veces salía bien y a veces no, así que era muy inestable
Me pregunto si DALL-E 3 también necesita ese mismo tipo de indicación