Capítulo 12: El Proyecto Final (Construyendo un Juego)
¿Puede Nanocode realmente construir algo?
El “Desafío Cero Código”: construir un juego clásico Snake usando Python y Pygame. La regla: no se te permite escribir ni una sola línea de Python. Solo puedes comunicarte con el agente en inglés.
![]() |
Nota al margen: Esta demostración involucra muchas llamadas a la API. Si alcanzas los límites de frecuencia (HTTP 429), el agente reintentará automáticamente. Para sesiones largas, considera usar un modelo local a través de Ollama para evitar los límites por completo. |
Paso 1: Preparación
Desde la raíz de tu proyecto (el directorio que contiene nanocode.py y .env), crea un directorio de trabajo para el juego:
1 mkdir -p snake_game
2 cp nanocode.py snake_game/
3 cp .env snake_game/
4 cd snake_game
Si está usando el repositorio de código del libro, copie desde ch11 en su lugar:
1 mkdir -p snake_game
2 cp resources/code/ch11/nanocode.py snake_game/
3 cp .env snake_game/
4 cd snake_game
Instalar Pygame:
1 pip install pygame
![]() |
Nota al margen: En Windows, esto debería funcionar sin configuración adicional. En macOS, es posible que necesites instalar primero las bibliotecas SDL: |
Paso 2: El Arquitecto (Modo de Planificación)
Inicia el agente. Comenzamos en modo de planificación porque queremos tener un plano antes de colocar los ladrillos.
1 python nanocode.py
El Prompt:
1 Build a classic Snake game using Pygame. Include a score counter and Game Over screen with a restart option. Put ALL code in ONE file: snake.py. Write the plan in PLAN.md.
El agente utilizará write_file para crear PLAN.md. Léelo. Debería describir la clase Snake, la clase Food y el bucle del juego—todo en un solo archivo.
Si parece correcto, apruébalo.
Paso 3: El Constructor (Modo de Acción)
Cambia al modo de acción:
1 /mode act
El Prompt:
1 Implement the plan in snake.py. All code in one file.
Observa la terminal:
1 → Writing snake.py
El agente está generando código basado en el contexto almacenado en PLAN.md.
Paso 4: La Verificación de la Realidad
Antes de ejecutar el juego, aumenta el timeout. Abre nanocode.py y cambia timeout=30 a timeout=300 en RunCommand.execute()—los 30 segundos predeterminados no son suficientes para jugar realmente una partida. (Esta es la única excepción al Desafío de Código Cero.)
El Prompt:
1 Run the game with: python snake.py
El agente ejecuta run_command. Aparece una ventana. Juegas Snake.
Si falla: Los LLMs son no determinísticos. Tu agente podría producir un error en el primer intento. Si el juego falla con un error como AttributeError: 'Snake' object has no attribute 'draw', no lo arregles tú mismo. Deja que el agente vea el stderr.
El Prompt:
1 The game crashed. Read the error and fix it.
El agente leerá el traceback, usará read_file para encontrar el bug, usará edit_file para corregirlo, y lo ejecutará de nuevo.
Paso 5: El Giro (Expansión de Características)
El juego funciona, pero es feo. La serpiente son solo cuadrados verdes. Vamos a poner a prueba la capacidad del agente para refactorizar.
El Prompt:
1 The game looks boring. Make the snake change color as it eats food, increase speed every 5 points, and search the web for 'cool retro game color palettes' to apply.
El agente debe:
- Usar
search_webpara encontrar paletas de colores - Usar
read_filepara entender la lógica de renderizado actual - Usar
edit_filepara incorporar las nuevas funciones - Ejecutar el juego para verificar
Lo Que Sale Mal
Tus resultados serán diferentes a los míos—los LLM no son deterministas. Pero esto es lo que suele suceder, y lo que hay que vigilar.
Fallos comunes en la primera ejecución:
ModuleNotFoundError: No module named 'pygame'— el agente olvidó que necesitas instalarlo, o ejecutó el script en un entorno diferente. Dile que ejecutepip install pygameprimero.AttributeErroren un método que el agente definió pero escribió mal en el punto de llamada. El agente corrige estos rápidamente una vez que ve el rastreo de error.- Errores de desplazamiento por uno en la detección de colisiones. La serpiente atraviesa paredes o muere un píxel demasiado pronto. Estos requieren 2-3 iteraciones de editar-ejecutar-corregir.
El arco típico de la sesión:
En mis pruebas, el agente generalmente consigue un juego funcional (pero feo) en 2-4 iteraciones. La primera escritura produce algo que falla. La segunda o tercera corrección lo hace funcionar. El paso de expansión de características (cambios de color, rampas de velocidad) añade otras 3-5 iteraciones mientras el agente lee su propio código, hace ediciones quirúrgicas y verifica cada cambio.
Al final, la conversación tiene 15-20 rondas de profundidad. Si estás usando Claude, observa el disparador de compactación—alrededor de las rondas 12-15 verás “(Compactando conversación…)” cuando el recuento de tokens se acerca al umbral del 75%. Después de la compactación, el agente pierde algunos detalles sobre las primeras rondas pero sigue trabajando. Este es el sistema del Capítulo 9 demostrando su valor.
Donde el agente tiene dificultades:
El sistema de coordenadas y el bucle de eventos de Pygame son complicados. El agente a veces escribe código que se renderiza correctamente pero no maneja adecuadamente la entrada del teclado, o que dibuja la serpiente en el orden incorrecto por lo que la cabeza aparece detrás del cuerpo. Estos son el tipo de errores que un humano detecta instantáneamente pero el agente no puede ver—no tiene retroalimentación visual, solo stdout y stderr. Si el juego se ejecuta sin errores pero se ve mal, necesitarás describir el error visual: “La serpiente se renderiza al revés—la cabeza debería estar al frente.”
El punto no es la perfección en el primer intento. Es que el agente converge—escribe, ejecuta, lee el error, corrige, repite—usando todas las herramientas que construimos a lo largo de once capítulos.
Conclusión
Planificar, implementar, fallar, depurar, corregir, ejecutar de nuevo—eso es cada capítulo demostrando su valor.
Entonces, ¿hacia dónde va esto desde aquí?
Epílogo
Todo el conjunto son aproximadamente 750 líneas de Python. Sin framework. nanocode.py es tuyo. Haz lo que quieras con él:
- Integración con Git que realiza commits automáticamente después de pruebas exitosas
- Depuración basada en capturas de pantalla para trabajo frontend (Claude puede leer imágenes)
- Entrada de voz mediante Whisper para que puedas hablar en lugar de escribir
- MCP para conectar con servicios externos que tu equipo ya utiliza
Los agentes de producción como Claude Code, Cursor y Copilot hacen más que esto—respuestas en streaming, ejecución paralela de herramientas, análisis sintáctico tree-sitter, entornos de ejecución aislados, ventanas de contexto multi-archivo que abarcan miles de archivos. La brecha entre 750 líneas y 750.000 es real. Pero la arquitectura es la misma: un cerebro, un bucle, herramientas, memoria y un arnés de seguridad. Ahora sabes lo que hay detrás de la cortina.
Los modelos seguirán mejorando. El arnés—el bucle, las herramientas, las comprobaciones de seguridad—esa parte es ingeniería. Y esa parte no va a ninguna parte.
