- 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
- Ele apresenta um guia prático mínimo e código de exemplo para que qualquer pessoa possa tentar desenvolver seu próprio jogo
- Disponibiliza um repositório de exemplo de Tic-Tac-Toe, que pode ser usado como ponto de partida via fork
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.