Clonando “Angry Birds” usando apenas IA
(twitter.com/javilopen)- Javi Lopez criou Angry Pumpkins, um jogo de física 2D no estilo Angry Birds, gerando código com GPT-4 e gráficos com Midjourney e DALL·E 3
- O resultado pode ser jogado na web, mas não funciona em dispositivos móveis; seguindo as instruções abaixo da tela do jogo, também é possível criar seus próprios níveis
- A maior parte dos gráficos foi feita com geração de imagens por IA, e alguns sprites foram ajustados para o jogo com remoção de fundo e recorte no Photoshop/Photopea
- O código começou com base em matter.js e p5.js e foi expandido por meio de revisões iterativas com o GPT-4 para lançamento, colisões, partículas, formatos dos monstros e detecção de impacto indireto
- O código completo tem cerca de 600 linhas; embora ele não tenha escrito o código diretamente, foi necessário um processo iterativo de explicar e corrigir erros, em vez de obter um jogo pronto com um único prompt
Resultado de Angry Pumpkins
- Angry Pumpkins é um jogo de física 2D parecido com Angry Birds, criado com o uso de GPT-4, Midjourney e DALL·E 3
- O jogo jogável pode ser acessado em Angry Pumpkins
- Atualmente, ele não funciona em dispositivos móveis
- Lendo as instruções abaixo da tela do jogo, é possível ver como criar e jogar seus próprios níveis
- Javi Lopez afirma que está se tornando possível uma nova forma de trabalho para criar coisas usando apenas linguagem natural, e vê isso como um “momento histórico”
Fluxo de criação dos gráficos e do código
-
Geração de imagens e trabalho com sprites
- DALL·E 3 foi usado para criar a tela inicial com atmosfera de Halloween, o logotipo “Angry Pumpkins” e uma tela de título com botão Play
- Midjourney foi usado para criar objetos do jogo, como fundo de cemitério, terreno 2D, personagem de abóbora, monstro verde, caixa de madeira, ossos, pedras e tábuas de madeira
- Os objetos foram criados no formato de “sprite stylesheets” e depois recortados e tiveram o fundo removido no Photoshop/Photopea
- Pequenos detalhes foram complementados com inpainting do Midjourney
-
Lógica do jogo criada com GPT-4
- O código-fonte completo está disponível em sketch.js
- O código do jogo tem cerca de 600 linhas, e Javi Lopez afirma que não escreveu nenhum código diretamente
- O prompt inicial pedia a criação de um jogo simples usando matter.js e p5.js, no qual o jogador ajusta ângulo e força com o mouse para lançar uma bola e acertar caixas empilhadas com física 2D
- Depois disso, ele solicitou repetidamente coisas como o modo de lançamento com mouse ao estilo Angry Birds, correção do erro
Uncaught ReferenceError: Constraint is not defined, efeito de partículas de tochas, tratamento de monstros circulares e detecção de impacto indireto
Revisões iterativas são mais importantes que um único prompt
- O ponto central não é pedir um jogo completo de uma só vez, mas começar com uma base funcional simples e continuar expandindo e corrigindo
- Sempre que surgia um problema, ele descrevia o erro com clareza e fazia o GPT-4 corrigi-lo
- O GPT-4 atual ainda não está no estágio de gerar um jogo inteiro a partir de um único prompt, mas há a expectativa de que, no futuro, seja possível criar jogos de videogame AAA apenas fazendo pedidos
1 comentários
Opiniões no Hacker News
Trabalhei como PM em Angry Birds, e isto é uma demonstração realmente excelente
O original usava Box2D e scripting em Lua e, claro, também era preciso criar os inimigos e os níveis manualmente
Não espero que, no estado atual da tecnologia, alguém faça um jogo de sucesso; é bem provável que a pessoa fique limitada mais pelas restrições da tecnologia do que pela própria habilidade
Ainda assim, para validação rápida de ideias, protótipos e game jams, é uma ferramenta que muda o jogo, e também parece uma boa alternativa ao Scratch para crianças brincarem com ideias
Recentemente fiz um experimento parecido porque precisava criar uma API REST básica e um frontend CRUD com dois frameworks que eu não conhecia bem, e deixei o GPT-4 gerar todo o código
É bem provável que tenha sido mais lento do que simplesmente escrever eu mesmo olhando a documentação, e alguém familiarizado com aqueles frameworks teria sido muito mais rápido
As partes complexas exigiam prompts muito específicos e longos; levei cerca de 5 horas para fazer o app inteiro, e uma parte considerável do tempo foi esperando a saída lenta do ChatGPT
Se fossem frameworks com os quais eu já tivesse familiaridade, acho que teria terminado em menos de 2 horas
Foi definitivamente útil para verificar se eu estava fazendo do jeito certo, como se houvesse um especialista de prontidão a quem eu pudesse fazer perguntas
Também foi bom para gerar código boilerplate bem formatado, mas não acho que vou usar muito mais do que uso hoje no desenvolvimento do dia a dia
Na maioria dos casos, é mais rápido aprender bem o framework e escrever diretamente
Acabo fazendo muitas perguntas como “qual é uma boa estrutura de diretórios para um projeto na plataforma {foo}?” ou “qual é a forma idiomática de fazer {x} em {language y}?”
Ele tem a vantagem de ter visto muitos projetos em várias linguagens, então, para algumas perguntas, isso por si só leva a respostas bem boas
Ainda é preciso entender programação; no fim, você está apenas digitando código em inglês em linguagem natural
Mesmo que você passe 3 horas supervisionando o GPT-4 enquanto ele escreve código, ainda pode ter sobrando naquele dia 3 horas de produtividade máxima de programação “não consumidas”
Se for via API, também tenho curiosidade sobre quais ferramentas costuma usar para acessá-la
O resultado pode surpreender
Isso é mais interessante do que a enxurrada de posts do tipo “criei um app iOS com ChatGPT em 30 minutos!”
Esses posts podem ter feito apenas um simples Hello World, então não significam muita coisa; aqui, pelo menos, há um produto final sendo mostrado, e ele é de fato bem impressionante
Mas os detalhes que seria preciso saber são o tempo gasto, o número de prompts, quantas correções de rumo foram necessárias e quão proficiente a pessoa que fez era nas tecnologias envolvidas
Pessoalmente, senti que o ChatGPT ajuda muito em várias situações, mas geração de código não foi uma delas
A ideia é que “o jogo tem só 600 linhas e eu não escrevi nenhuma delas, mas [programar o jogo] foi a parte mais difícil”
Não é um Hello World, mas também é difícil dizer que seja muito mais complexo do que uma lista de compras
Ainda assim, o mais impressionante é que dá para fazer Angry Birds com 600 linhas e algumas bibliotecas
Há cerca de 5 mil linhas de código em produção e tudo funciona. Não tem muito tráfego, mas ainda assim é ambiente de produção
Saber as limitações, escrever prompts melhores e reconhecer a possibilidade de alucinações, perguntando sobre riscos, são fatores muito importantes
Foi especialmente bom em tecnologias que eu não conhecia bem. Sou desenvolvedor Android e estou usando isso para criar sites, algo que eu não fazia diretamente havia uns 15 anos
A parte mais legal foi a ajuda com administração de sistemas e operação de servidores, e ele é bom em depurar erros do gunicorn
Quando o projeto cresce e o contexto se perde, é preciso corrigir o código gerado, mas o maior obstáculo em projetos maiores é o limite de tamanho de contexto, e parece que isso deve melhorar em breve
Um site que criei recentemente é https://cosmictrip.space/, com cerca de 95% do código escrito pelo ChatGPT; gerei os prompts com GPT-4 e depois criei as imagens espaciais com DALL-E
É um site simples, mas agora também estou criando um jogo de aventura de IA aberto, com imagem+texto baseado em GPT+DALL-E
Quando a API do DALL-E 3 sair, espero lançar antes de 6 de novembro, e esse jogo de aventura também tem mais de 95% do código escrito pelo ChatGPT
A geração de código funciona tão bem que estou usando a API do GPT-4 em um agente que eu mesmo estou construindo
Crio subtarefas estruturadas com chamadas de função, faço o agente escrever esse código e também adicionei recursos para incluir arquivos como contexto ou conversar com o código
Ainda não está em nível de ser publicado, mas a capacidade de geração de código do GPT-4 é realmente incrível; só que exige experiência com prompts
É pouco provável que o primeiro prompt que alguém escreve seja bom, então espero que o agente que estou criando resolva bem essa parte
A ideia é ter, em um quadro estilo Jira/Kanban, coders de IA atribuídos a tarefas, com uma pessoa aprovando e corrigindo, enquanto a IA verifica o trabalho e os tickets se movem automaticamente entre as colunas
Programar um jogo novo, que não tenha dezenas de templates existentes, seria um teste decisivo melhor
O GPT-4 é bom nesse tipo de tarefa, mas, pela minha experiência, melhoria iterativa não funciona bem
Quanto mais longa fica a conversa, mais ele perde o contexto anterior, e o código gerado se afasta do comportamento anterior
Por exemplo, “corrija este bug” pode facilmente levar a uma solução que quebra outra funcionalidade
O código do thread (1) parece existir no resultado final (2), e, como está bem no começo do código, isso pode significar que ele fez o ChatGPT gerar iterativamente blocos de mais de 600 linhas
Isso é bastante suspeito
Definir algo na linha 500 e depois criar um novo Slingshot na linha 20 é algo muito improvável, a menos que se instrua especificamente a fazer isso
E
loadImage('stone2.png');teria escolhido por acaso o nome correto do arquivo e o tamanho do sprite? Tudo isso foi fornecido no prompt e então o código foi escrito? É preciso mostrar os prompts realmente usadosUm cenário bem mais plausível é que os objetos de classe tenham sido gerados de forma relativamente independente, depois uma pessoa os montou em um arquivo grande, copiou tudo como entrada e criou prompts de código do tipo “escreva uma função assim”
Não é impossível que tenha sido feito só com prompts, como afirmado, mas dá a impressão de que a parte de “mandei codificar tudo” foi bastante exagerada para ganhar curtidas e reputação
Parece mais provável que parte do código tenha sido escrita ou montada à mão, depois colocada como entrada, com prompts do tipo “faça isto também”
Então a saída pode ser “100% gerada”, mas talvez não do jeito que as pessoas imaginam
Essa abordagem faz o GPT-4 reescrever código existente, mas, se você não pedir explicitamente ou adicionar comentários que expliquem a intenção em todo o código, ele vai se desviando aos poucos das funcionalidades anteriores
Sem uma suíte de testes, você não percebe esse desvio sutil e funcionalidades acabam quebrando
Também não há menção de que o autor tenha feito isso
Além disso, essa pessoa tem um interesse financeiro em vender materiais educacionais sobre IA (4), então se beneficia de parecer especialista na área; e, quando questionado no X, não forneceu detalhes adicionais, histórico Git passo a passo nem os prompts realmente usados
Diante da falta de detalhes e de um resultado difícil de acreditar, é razoável ser cético neste caso
Talvez seja possível criar esse tipo de resultado com modelos como CodeLlama 34B ou GPT-3.5, mas não da forma descrita
Nem tenho certeza de que isso seja possível com GPT-4. Os prompts parecem frouxos demais para serem reais (5)
Ainda assim, eu gostaria que ele refutasse isso com mais detalhes, e o GPT-4 de fato é uma boa ferramenta
[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] - “Agora, deixe os monstros circulares e tenha muito cuidado: aplique a mesma técnica que já existe para os retangulares em relação ao dimensionamento e à área de colisão, e não estrague tudo como antes.”
Vi meu filho tocando sem parar no spinner de carregamento como se estivesse irritado, então, numa tarde de domingo tranquila, eu e o GPT codamos este jogo
https://spinner.franzai.com/
Acho que um jogo interativo de spinner de carregamento pode ser um padrão de UX interessante
Mesmo enquanto algo está carregando, dá para dar ao usuário um feedback de que suas ações têm efeito
Claro, estou falando de jogos indie, não de jogos AAA
Lembro claramente de ter visto há algum tempo a notícia de que essa patente tinha expirado, mas, ao procurar, vi que esse “há algum tempo” já foi há 8 anos
https://www.eff.org/deeplinks/2015/12/loading-screen-game-pa...
Pelo que sei, ela pertencia à Namco e dá para vê-la em Ridge Racer
https://psycnet.apa.org/record/2014-37068-023
Já não há dúvida de que a IA está mudando o desenvolvimento
Só na semana passada consegui criar 2 serviços de porte médio, com milhares de linhas de código Python, sendo que Python era uma linguagem que eu não usava havia mais de 10 anos
O que é realmente impressionante é que, em geral, o código é melhor do que o que eu mesmo teria escrito
Se você precisa de um README.md bacana, basta fornecer o código-fonte com rotas, argumentos de CLI etc., que ele gera
Se quiser testes, ele também cria. Nunca houve uma época tão fácil para ser desenvolvedor
Em geração de código, o GPT-4 supera de longe o GPT-3.5
O GPT-3.5 copia razoavelmente bem se você der exemplos muito detalhados, mas o GPT-4 dá a sensação de que “pensa” um pouco
Pela minha experiência, o contexto de 32k do GPT-4 falha com bastante frequência
Por exemplo, se você estiver gerando mais de 10 mil tokens, algo como mais de 30 mil caracteres, talvez precise tentar de novo algumas vezes
Além disso, o ChatGPT não é a interface ideal para tarefas não triviais
É melhor usar a API diretamente ou algo como o Azure OpenAI Chat Playground, que permite usar contexto de 32k
Aproveitando para fazer uma divulgação: criei um app open source que automatiza o trabalho repetitivo de gerar prompts: https://github.com/codespin-ai/codespin-cli
É interessante que, nos últimos 10 anos, houve um investimento enorme em ferramentas no-code, e agora o ChatGPT escreve código tão bem que, para pessoas com sensibilidade técnica mas que não programam, talvez esteja ficando mais rápido, mais flexível e quase no mesmo nível de usabilidade
Recentemente precisei criar, com Mendix, um app de demonstração que consumisse e publicasse serviços REST, e levei dias para entender os detalhes
Se eu tivesse feito a mesma coisa com o ChatGPT em qualquer linguagem, por exemplo bash, acho que levaria alguns minutos
Deploy e versionamento podem ser resolvidos com PaaS/IaaS sem grande conhecimento técnico, especialmente em comparação com o custo de plataformas no-code corporativas
Talvez seja um viés pessoal, mas para trabalhos sérios as plataformas no-code sempre me pareceram mais trabalhosas, então nunca gostei delas; por motivos parecidos, também não gosto de ORMs como ActiveRecord
Ainda assim, parece que o no-code vai ficar ultrapassado em breve
Quem vai querer arrastar e soltar se basta perguntar e copiar e colar?
No-code é fácil, mas rígido; programar é flexível, mas tedioso e propenso a erros
Se você descreve em palavras o que quer e obtém código rapidamente, e esse código é limpo, ganha a flexibilidade de ajustá-lo conforme necessário
Em alguns casos, como neste exemplo, talvez nem seja preciso ajustar nada
Estou ansioso pelo que vem por aí
Não parece que levaria muito tempo
Isto é lavagem estatística de plágio, e é bem legal
Pessoalmente, acho que impedir essa corrida do ouro da lavagem é uma prioridade jurídica mais urgente do que fingir que estamos contendo o HAL enquanto criamos fossos de mercado para os grandes vendedores de picaretas de hoje
Com certeza deve haver freelancers ou trabalhadores remotos que aumentaram a produtividade em 100 vezes usando corretamente o GPT-4 e ferramentas de IA
É difícil imaginar que esses truques incríveis existam apenas no vácuo
Pensando no que será possível daqui a 2 anos, o gênio já saiu da garrafa
Se você souber dicas para aumentar a produtividade em “100 vezes” com o ChatGPT, gostaria que compartilhasse
Sinceramente, cada vez que vejo textos assim fico cada vez mais preocupado com a minha empregabilidade
Não tenho plano B e investi tempo demais aprendendo engenharia de software; a situação não parece boa
Como outros disseram, os programadores estarão em apuros quando pessoas comuns conseguirem escrever especificações de produto detalhadas o suficiente para que um LLM crie o software funcional de que elas precisam
Mas isso soa bastante parecido com programação
Acho que nosso trabalho vai mudar. Vamos passar menos tempo digitando código no teclado e mais tempo pensando no que construir
Na verdade, é bem possível que nos tornemos mais valiosos, porque conseguiremos fazer muito mais
Tentei obter uma sprite sheet de animação top-down de um paladino para um possível jogo de RPG, e o processo de fracasso está aqui: https://imgur.com/a/2uJyUT3
A sequência real foi que primeiro tentei variações top-down e, no fim, só por curiosidade, coloquei uma visão lateral
top down às vezes funcionava e às vezes não, então era muito instável
Fico curioso para saber se o DALL-E 3 precisa de uma orientação semelhante