45 pontos por GN⁺ 2025-07-05 | 3 comentários | Compartilhar no WhatsApp
  • Desenvolvedor de software há 20 anos, mas estreando em desenvolvimento de jogos, concluiu o jogo de tower defense "Tower of Time" baseado em Phaser.js usando um agente de programação com IA
  • O objetivo era testar a viabilidade real da IA no desenvolvimento de jogos, e o código, junto com todos os prompts de IA e o processo de trabalho, foi documentado no GitHub
  • Mais de 95% do código foi escrito por IA, com uso combinado de várias ferramentas de IA, como Augment Code, Cursor e Claude Sonnet 4
  • O jogo oferece uma diversão única com estratégia baseada no recurso de rebobinar o tempo, além de várias torres, sistema de gerenciamento de energia e inimigos surgindo por ondas
  • Com streaming em tempo real, uso de assets de arte e som, lições aprendidas no desenvolvimento e dicas práticas, o material é útil como recurso de aprendizado tanto para iniciantes em jogos quanto em IA

Visão geral de Tower of Time

  • Este projeto foi realizado com o objetivo de experimentar se o desenvolvimento real de jogos é possível com ferramentas de programação por IA
  • Aprendendo Phaser.js, uma engine de jogos em JavaScript, pela primeira vez, participou da Beginner's Jam Summer 2025 e concluiu 'Tower of Time' em 25 a 30 horas
  • Todo o processo de desenvolvimento, todos os prompts, o código, a documentação e o link para jogar foram registrados no GitHub

Apresentação do jogo

  • Tower of Time é um jogo de tower defense com tema de viagem no tempo, no qual o jogador impede inimigos que avançam em ondas e, em situações críticas, pode rebobinar o tempo para redesenhar sua estratégia
  • Ele combina vários tipos de torres (básica, sniper, lentidão, splash etc.) com um sistema de energia (usado para construir torres e rebobinar o tempo)
  • Principais características
    • Rebobinar o tempo: em momentos desfavoráveis, é possível voltar a um estado anterior e reorganizar a estratégia de defesa
    • Torres variadas: permite montar diferentes estratégias defensivas com torres de características distintas
    • Gerenciamento de energia: elemento de administração de recursos que exige pensar com cuidado onde gastar energia
  • Como jogar
    • Suporte a teclado/gamepad (movimento: setas/analógico, ação: espaço/botão do gamepad, rebobinar: backspace/gatilho)

Experimento de programação com IA e processo de desenvolvimento

  • Cerca de 95% de todo o código foi escrito com IA (Claude Sonnet 4, OpenAI, Augment Code, Cursor etc.)
  • Todos os principais prompts, tentativas e erros e os resultados finais foram registrados no repositório em PROMPTS.md
  • Vantagens da geração automática de código por IA: prototipagem rápida, automação de tarefas repetitivas de código e facilidade de documentação
  • Limitações e cuidados: a IA tende a gerar código em excesso; quando surgem problemas específicos de implementação, é necessário redesenhar prompts ou fazer rollback; recomenda-se usar logs de depuração

Lições aprendidas no desenvolvimento

  • Mesmo só com programação por IA, é perfeitamente possível concluir um jogo divertido
  • Qualidade dos prompts, contexto claro e estratégia de depuração são muito importantes
  • É preciso verificar continuamente para não aumentar o volume de código desnecessariamente

Stack técnica

  • Engine: Phaser 3 (v3.90.0) + Phaser Editor v4
  • Linguagem: TypeScript
  • Ferramenta de build: Vite
  • Assets de arte: itch.io, com alguns ajustes feitos manualmente
  • Som: freesound.org

Jogue no navegador: Tower of Time

3 comentários

 
softer 2025-07-07

Parece que vai ser uma boa referência.

 
ifmkl 2025-07-06

Eu também estou me esforçando bastante para colocar a IA para trabalhar e criar um jogo web.

 
GN⁺ 2025-07-05
Comentários do Hacker News
  • É bem divertido ler, um por um, os prompts usados no desenvolvimento
    Textos sobre “casos de sucesso de vibe coding” muitas vezes passam a ilusão de que, se você tiver vários agentes, uma orquestração complexa de código e regras geradas por LLM, então basta um prompt como “faça um tower defense com viagem no tempo, sem falhas nem bugs” e o jogo aparece magicamente.
    Mas os prompts realmente usados no projeto batem com a forma que funciona melhor para codificação com IA.
    Dividir uma ideia clara e bem elaborada em centenas de problemas pequenos, e dar orientação arquitetural concreta nas partes realmente importantes, é o que funciona.

    • Do ponto de vista de alguém que acumula os papéis de tech lead e product owner, esse também é o jeito certo de trabalhar com humanos.
      70% do meu trabalho é transformar a exigência abstrata de um executivo — “um jogo de torre com viagem no tempo, sem bugs” — em uma série de prompts embutidos em um contexto com uma visão arquitetural forte, para que a equipe consiga trabalhar sem se sobrepor e mantendo um alto nível de abstração.

    • Tentei fazer um jogo HTML simples do jogo de tabuleiro Just One, mas nem depois de continuar pedindo para quatro LLMs diferentes corrigirem o bug da caixa de entrada se mexendo eu consegui resolver.
      Todo mundo diz que faz um jogo inteiro de uma vez, e eu não consigo nem consertar o movimento de uma textbox, então acho curioso.

    • Depois do prompt “sem vulnerabilidades de segurança, sem bugs”, também precisa ter “sem alucinações”.
      É uma condição básica para iniciantes em IA.

    • O jeito que melhor funciona para mim com codificação por IA é criar de “one-shot” a funcionalidade básica ou o esqueleto da jogabilidade com IA, e depois ir construindo por cima em várias iterações.
      Se o resultado do one-shot não impressiona de cara, eu já tento compensar com outro prompt e repito até conseguir uma base aceitável.

    • Concordo totalmente com essa abordagem.
      Na verdade, meu post recente também se baseia nessa ideia.
      Se você fizer a IA escrever a especificação antes de começar a programar, reduz a barreira de uma pessoa ter que escrever a spec do zero, então a chance de ela realmente ser escrita aumenta muito.

  • Depois de mais de 20 anos na indústria de software, sinto que a maioria dos nossos colegas ainda é bastante cética em relação à codificação com IA.
    Recentemente usei IA para desenvolver principalmente um app grande, com algo em torno de 34.000 linhas, e a eficiência cresce exponencialmente de acordo com a qualidade das instruções que eu dou, a estrutura da interação e o cuidado com o resultado gerado, inclusive correções de rumo.
    Dá até a sensação de “no fim, é igual a qualquer outra ferramenta!”.
    Só que esta ferramenta tem uma alavancagem 10x de verdade, maior do que qualquer “ferramenta 10x” que já vi até hoje.
    O ponto que a maioria dos céticos perde é que essas ferramentas não devem ser tratadas como algo totalmente externo.
    Se você explicar o objetivo de forma vaga e delegar tudo, vai se dar mal.
    Talvez um dia a IA leia diretamente os nossos pensamentos, mas ainda não é o caso.
    No momento, o verdadeiro valor está em organizar com clareza o que você pensa, aprender coisas novas e acelerar as partes chatas.
    Para extrair o máximo de alavancagem, é preciso integrar bem essa ferramenta ao seu próprio processo de pensamento.

    • Tenho bastante tempo de programação, mas em jogos eu só tinha feito Hunt the Wumpus no ensino médio; recentemente comecei a criar um jogo novo com ajuda de IA.
      A IA cumpre basicamente três papéis.
      (1) Ferramenta de aprendizado — mesmo quando eu não sei a terminologia, ela entende bem a intenção da pergunta, me dá um ponto de partida e até me conta coisas que eu nem sabia que não sabia, então esse é o papel mais importante.
      (2) Execução de tarefas repetitivas ou tediosas — comentários de código, arquivos de configuração etc. são coisas que eu até poderia fazer, mas que só me fariam perder velocidade, e ela lida bem com isso.
      (3) Busca — parecido com o item (1), a IA entende o que eu realmente quero e assume filtragem, recomendação e afins.
      Dá até para delegar o “pensar” para a IA, mas não é necessário.
      Ela não é mais inteligente que um humano, é só uma espécie de FPU que é mais rápida e sabe mais coisas.

    • Pelos padrões do HN, sou até bem cético, mas na prática continuo forçando a adoção de IA na empresa e estou escrevendo este comentário enquanto peço coisas ao Claude.
      O motivo do ceticismo é a distância entre “como as soluções de IA estão sendo vendidas” e “o que elas realmente fazem”.
      Toda solução de IA, especialmente agentes, só produz resultados úteis quando há orientação de alguém experiente.
      Quase não existe nada realmente “autônomo” aí.
      Até a própria pessoa que cunhou o termo ‘vibe coding’ diz que a indústria está fazendo as coisas na ordem inversa.
      Essas ferramentas são fantásticas, mas omitir que elas precisam ser fortemente controladas é praticamente mentir.

    • Nos últimos meses, meu pensamento também chegou a uma conclusão parecida.
      Antes eu fazia comentários críticos sobre IA, mas as ferramentas mais recentes realmente melhoraram muito.
      Coisas que antes levavam semanas agora consigo fazer em poucas horas.
      Claro, é preciso pensar bem nos prompts, quebrar em partes detalhadas e integrar bem com a IDE.
      A parte mais revolucionária é quando se lida com uma biblioteca ou framework completamente novo.
      Antes eu procurava como usar, pegava um código de exemplo e adaptava; a IA sugere abordagens muito mais intuitivas e variadas, e isso muitas vezes me surpreende.
      Mesmo quem ainda está cético talvez já esteja na hora de testar de novo.

    • Como exemplo de alavancagem 10x, dá para pensar em linguagens.
      Antes se dizia que Lisp e outras permitiam fazer mais, mais rápido; agora dá para escrever menos código e ainda assim gerar resultado em linguagens rápidas e de alto desempenho.
      Só existe a “armadilha” de que é preciso revisar com bastante cuidado as partes do código gerado que não são facilmente verificáveis.
      Assim como linguagens de alta expressividade permitiram que pessoas sem planejamento prévio produzissem codebases caóticas, isso também tende a se repetir com ferramentas de IA.
      Mas onde eu realmente economizo tempo não é escrevendo código totalmente novo, e sim integrando ou melhorando código antigo com novo.
      Houve um salto enorme em debugging.
      Em vez de só colocar print como antigamente, agora basta copiar e colar o código e perguntar à IA: “por que a saída está dando isso em vez daquilo?”, para obter rapidamente causas e alternativas.
      Isso é uma vantagem gigantesca especialmente em SQL, IaC, scripts de build e outros tipos de trabalho em que é difícil acoplar um debugger.

    • Outra coisa é que a curva de aprendizado e o teto de dificuldade são bem mais altos do que parece.
      Há uma grande diferença entre usar Claude Opus dentro de um framework de automação complexo e apenas copiar/colar no GPT-4o no navegador.

  • Achei muito legal a transparência de publicar o processo de desenvolvimento e compartilhar até os prompts, então dei star no GitHub.

  • Tanto o código quanto o resultado parecem bonitos.
    Com certeza não foi algo feito só com IA; deve ter havido bastante participação direta também.
    Eu fiquei muito tempo sem programar e, por incentivo de amigos, tentei fazer um código simples com ajuda de IA.
    O que concluí foi algo como estourar Bubble Wrap e um silenciador (aperta o botão e fica sem som).
    Bubble Popper
    Silencer

    • Rodei no Chrome do Android, mas as bolhas não estouram direito e a contagem não sai de 0.
      Você pretende aceitar PRs?
  • Jogos indie parecem ser um ótimo caso de uso para IA de programação.
    O baixo risco e a natureza voltada à diversão combinam muito bem.
    O primeiro commit já contém muito código, mas ainda não inclui PROMPTS.md.
    Por exemplo, EnergySystem.ts já existe no primeiro commit, mas depois em PROMPTS.md parece que a IA o criou do zero.
    Fiquei curioso se você poderia explicar essa parte com mais detalhes no histórico do repositório.
    Link do primeiro commit

    • Como este projeto foi uma submissão de game jam, nos primeiros 2 ou 3 dias, por causa do prazo de uma semana, eu não usei controle de versão, então o trabalho desse período acabou ficando registrado em um grande commit só.
      Também não fui anotando os prompts em tempo real; depois que terminei o jogo, voltei no histórico da ferramenta de chat que usei e copiei tudo para o arquivo PROMPTS.md.
      Se você quiser ver como foi o processo de criação do projeto, a melhor maneira é ler o arquivo de prompts do começo ao fim.
      Por exemplo, o arquivo EnergySystem.ts foi uma parte totalmente nova criada pela IA a partir de um prompt do tipo “quero implementar um subsistema de energia”, depois que já estavam prontas coisas como pathfinding dos inimigos, spawn e tiro das torres.
  • Nunca tinha ouvido falar da ferramenta Augment Code.
    Queria entender o que ela faz, por que foi escolhida, em que difere de ferramentas concorrentes, como foi a experiência real de uso e se você a recomenda.

    • Somando a essa pergunta, também queria ouvir se o OP usou Augment Code dentro do Cursor, como essa combinação funciona e quais vantagens traz.
      Fiquei curioso também para saber se ele pagou pelos dois.
  • Fiquei impressionado e motivado pelo fato de você ter registrado os prompts.
    Pela minha experiência, ‘vibe coding’ tanto pode avançar muito rápido quanto ficar infinitamente lento.
    Se você tiver instruções concisas e claras, revisão rápida de código e capacidade de entender a arquitetura, isso realmente pode acelerar o desenvolvimento.

  • Eu também já fiz um jogo de tower defense e, recentemente, vinha pensando em usar IA até para gerar novas waves e ajustar balanceamento.
    Para que a IA consiga “sentir” o jogo, imagino que talvez seja necessário um protocolo que codifique em tokens o estado visível da partida.
    Terreno, posição das entidades do jogo e outros atributos que o jogador consegue ver.
    Colocar tudo em um autoencoder talvez não seja uma boa, mas tokenizar em listas por elemento do jogo parece ter potencial.
    Se o engine do jogo fornecer a imagem da tela e também expuser diretamente os tokens à IA, ela poderia entender muito mais profundamente o andamento real da partida.
    Não sei ao certo quanto de dataset seria necessário para aproveitar bem esses tokens, mas talvez já dê para representar isso em poucos tokens até com o espaço de embeddings atual.
    Se houvesse um conjunto de treinamento com logs de jogo e avaliações de diversão feitas por usuários, daria para extrair muitos dados interessantes.
    Também seria possível encontrar clusters de preferências dos jogadores e criar jogos variados para diferentes perfis.

  • Obrigado por compartilhar esse workflow.
    Eu também venho pensando em introduzir rastreabilidade e transparência no meu workflow com LLM.
    Compartilhar os prompts e manter histórico traz uma grande vantagem: permite ver de relance qual era o problema essencial que o desenvolvedor queria resolver no início, como isso foi mudando e até que novos problemas surgiram no processo.
    Projeto muito legal.
    Post sobre uso responsável de LLM

  • Estou em tecnologia há mais de 20 anos e, recentemente, venho fazendo vários experimentos usando o Gemini-cli para gamificar uma ferramenta de testes de integração de apps enterprise.
    Ao combiná-lo com um servidor MCP, percebi que os melhores resultados vêm quando se divide o problema em etapas e se aumenta a clareza dos prompts.
    A IA pode errar ou entrar em loop às vezes, especialmente em coisas como roteamento de app, e nesses casos é útil adotar uma postura ativa de “pair programming”.
    Outra coisa que notei é que ficou muito mais fácil do que antes manter princípios como evitar duplicação de código.
    Caso contrário, a IA tende a alterar só uma parte e deixar arquivos relacionados de fora.
    Isso vale não só para lógica de programação, mas igualmente para UX e comportamento do app.
    Com IA, trabalhos que antes levavam semanas agora podem ser concluídos com prazer em poucas horas.
    A possibilidade de dar uma personalidade ao Gemini e reutilizar o arquivo GEMINI.md ajustado em vários dispositivos é uma vantagem enorme.