19 pontos por GN⁺ 2025-08-25 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Um engenheiro de software com 15 anos de experiência compartilha a experiência de desenvolver em Go um jogo de cartas da infância
  • Ao desenvolver Truco sem LLM (modelo de linguagem de grande porte), ele resolveu manualmente todos os problemas, como design de UI e deploy serverless, e levou 3 meses
  • Ao criar Escoba, usou LLM para converter código de backend e acelerar muito a implementação, com a maior parte funcionando já no primeiro prompt
  • Na parte final, oferece um guia passo a passo para qualquer pessoa criar um jogo, usando um exemplo de Tic-Tac-Toe com backend em Go, conversão para WASM e integração com React
  • Porém, o frontend em React e o gerenciamento de estado do jogo baseado em WASM ainda exigiram depuração e implementação manual

Introdução

  • Um engenheiro de software com 15 anos de experiência percebeu que nunca havia realmente criado e publicado um jogo
  • Decidiu desenvolver em Go um dos jogos de cartas que jogava com os amigos na infância, na Argentina

Truco: 3 meses sem LLM

  • Em 18 de junho de 2024, começou a desenvolver o jogo de cartas Truco com backend em Go. O frontend foi escrito com apenas conhecimento mínimo de React
  • A implementação da UI foi o maior desafio e, para evitar fornecer um servidor, ele usou TinyGo para transpilar para WASM (WebAssembly) e depois publicou os arquivos estáticos no GitHub Pages
  • Como era um período sem LLM, precisou descobrir cada detalhe por conta própria e avançar por tentativa e erro, levando cerca de 3 meses para concluir
  • O objetivo não era publicidade nem receita, mas apenas finalizar o jogo, e mesmo 1 ano após o lançamento ele continua sendo jogado regularmente

Escoba: 3 dias com LLM

  • Um ano depois, durante uma visita à Argentina para ver a família, ele ensinou ao sobrinho Escoba, o segundo jogo de cartas mais popular
  • Desta vez, usou um LLM (Claude): clonou o backend de Truco, explicou as regras de Escoba no prompt e pediu uma refatoração do código
  • Já no primeiro prompt, a implementação ficou quase perfeita, e ele só precisou corrigir manualmente alguns bugs pequenos e adicionar recursos extras
  • O frontend ainda exigiu vários dias de implementação e depuração manuais. As limitações do LLM, o nível de habilidade com React e o ambiente incomum de gerenciar o estado do jogo em WASM foram fatores desafiadores

Passo a passo: como criar seu próprio jogo

Desenvolvimento do backend

  • Em backends baseados em turnos, é possível definir as funcionalidades com clareza
  • Manter uma estrutura serverless e evitar um modelo em que pessoas jogam entre si é uma escolha realista quando não há servidor comercial disponível

Desenvolvimento do frontend

  • O frontend precisa realizar as seguintes tarefas
    • Solicitar ao backend a criação de um novo GameState
    • Exibir o estado na UI
    • Oferecer uma interface para selecionar ações válidas
    • Enviar comandos ao backend ao aplicar uma ação
    • Fazer uma solicitação ao backend quando for a vez do bot

Conversão do backend para WASM

  • Para compilar código Go para WASM, use GOARCH=wasm GOOS=js go build
  • Como o tamanho do binário pode ser um problema, ele usa TinyGo para reduzir o tamanho
  • Para exportar as funções que serão conectadas ao frontend, ele escreve um ponto de entrada separado em Go (ex.: main_wasm.go) e faz o tratamento condicional no build
  • Na função principal, é necessário bloquear com select {} para evitar que o programa seja encerrado imediatamente

Integração de dados entre backend e frontend

  • Structs livres do Go, como GameState, não podem ser serializadas/desserializadas diretamente no WASM
  • É necessário trocar todos os dados em formato JSON
  • Seguindo a documentação fornecida pelo TinyGo, tanto a entrada quanto a saída são trocadas por serialização JSON

Interface frontend-backend

  • No frontend, as funções do backend são chamadas diretamente
  • O GameState é gerenciado apenas dentro do WASM e o frontend não pode mutá-lo; o backend é sempre a fonte da verdade
  • Depois de recompilar o WASM, é preciso substituir os arquivos, e ele mostra um exemplo de automação com Makefile

Ambiente de execução do WASM

  • Para executar, é necessário incluir wasm_exec.js no head e usar esse script para criar a instância e executá-la

Conclusão

  • Criar jogos foi uma experiência divertida, e a combinação de Go, WASM e React é uma abordagem que qualquer pessoa pode tentar
  • A ajuda do LLM aumentou bastante a produtividade, mas a capacidade de frontend e a experiência de depuração continuam sendo importantes
  • Qualquer pessoa pode tentar desenvolver seu próprio jogo com essa estrutura, então vale a pena experimentar

Ainda não há comentários.

Ainda não há comentários.