3 puntos por GN⁺ 2023-11-01 | 1 comentarios | Compartir por WhatsApp
  • 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

 
GN⁺ 2023-11-01
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

    • Fue sorprendentemente bueno para verificar si ibas por el camino correcto
      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
    • Mi experiencia también fue similar
      Igual tienes que entender programación; solo que estás escribiendo código en inglés natural
    • Algo que se suele pasar por alto es que la mayoría de la gente solo puede programar a máxima productividad durante unas pocas horas al día
      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
    • Me da curiosidad si usas GPT-4 en ChatGPT Plus o vía API
      Si es por API, también me interesa saber con qué herramientas accedes normalmente
    • En vez de adivinar cuánto tardarías en escribirlo tú mismo, conviene medirlo de verdad
      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

    • https://twitter.com/javilopen/status/1719363669685916095 tiene relación con esto
      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
    • Probé crear un sitio completo basado en Flask, Python, HTML+JS+CSS y SQLite con generación de código de ChatGPT, y fue sorprendente
      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
    • Hay muchos clones open source de Angry Birds, así que no es tan impresionante como parece
      Programar un juego nuevo que no tenga decenas de plantillas existentes sería una mejor prueba de fuego
    • Otra pregunta interesante es: “¿cómo funciona en todos los demás casos que no aparecen en el video?”
    • Sinceramente, me cuesta creerlo
      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 usados
      Un 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

    • Es un enfoque interesante para una pantalla de carga, y personalmente pensaba que habría muchos más juegos usando algo así
      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...
    • Dato curioso: existía una patente que durante mucho tiempo bloqueó el desarrollo de minijuegos de carga
      Según recuerdo, era propiedad de Namco y podía verse en Ridge Racer
    • Prueba de finger tapping:
      https://psycnet.apa.org/record/2014-37068-023
    • Recuerdo la pantalla de carga de Budokai 3 (PS2), donde girabas como loco el stick analógico viendo crecer a los Saibamen
  • 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?

    • Conceptualmente parece una solución casi perfecta
      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
    • ¿De verdad habrían sido solo unos minutos? Estaría bien que lo probaras tú mismo y dieras retroalimentación real en lugar de una suposición
      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 es 100 veces, ¿no será que antes no eras tan productivo?
      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

    • En esa parte sinceramente no me preocuparía tanto
      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

    • Hace tiempo hice tokens para TTRPG con Midjourney, y la mejor forma que me funcionó fue escribir aerial view
      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