7 pontos por gogoj2 2026-01-19 | 14 comentários | Compartilhar no WhatsApp

No verão de 2004, eu estava passando meus últimos meses no serviço militar e comecei a pensar no que poderia fazer no tempo livre, então comecei a planejar um jogo. Na época, meu irmão mais novo estudava design gráfico para jogos, então pensei que, quando eu desse baixa, seria legal criar alguma coisa juntos. (Ah... eu sou um estudante comum de humanas. Não tenho nenhuma habilidade técnica.)

Como era um desafio amador, eu queria fazer algo pequeno e simples. Usei como base um dos jogos mais acessíveis, o quebra-blocos (Arkanoid), e acrescentei um novo formato de confronto. Já era um jogo com incontáveis novas versões feitas por muita gente, mas não parecia haver nada feito exatamente como eu imaginei.

Depois de sair do exército, reuni meu irmão e os amigos dele e montei uma equipe com bastante ambição, mas não demorou para cada um ter seus próprios compromissos, e o time acabou se desfazendo rapidamente. Pensei que faria isso quando surgisse outra oportunidade, mas essa chance nunca voltou. O tempo passou, e mesmo trabalhando eu às vezes ainda lembrava da ideia. Houve até uma época em que tentei estudar Python e coloquei isso como objetivo, mas era um desafio difícil demais para mim.

Assim o tempo foi passando, e no verão do ano passado, mais de 20 anos depois, terminei uma reunião e fui jantar com as pessoas que participaram dela. Os CEOs das empresas com quem eu tinha me reunido diziam que agora havia coisas demais que podiam ser feitas com IA, e que todos queriam abrir uma startup de novo. Estimulado por aquilo, voltei para casa à noite e resolvi instalar o tão falado Claude Code. E duas horas depois… pá!!

Enquanto eu pensava no que pedir ao Claude Code como primeiro projeto, retomei a ideia de 20 anos atrás e fui descrevendo o que queria. Cerca de duas horas depois, diante dos meus olhos, a raquete e a bola estavam se movendo e quebrando blocos. A emoção daquele momento foi indescritível. Histórias assim de testemunho(?) agora já estão por toda parte, então talvez vocês estejam acostumados, mas hoje, meio ano depois, eu já não consigo mais viver sem Claude Code.

Fui lapidando o jogo aos poucos nesse meio-tempo, e agora ele chegou a um nível em que pelo menos dá para chamar de demo, então tomei coragem para publicá-lo. E logo no GeekNews, onde eu só ficava lendo sem comentar!! A ideia original era fazer um jogo competitivo para duas pessoas, mas o recurso de multijogador era um obstáculo alto demais para mim, então acabei fazendo no formato de disputar contra o computador.

Apresentando de forma simples:

  • É para computador. Ainda não há suporte para mobile.
  • É um jogo de quebrar blocos para 2 pessoas no mesmo espaço, jogando de costas uma para a outra. Quem destruir todos os blocos primeiro vence.
  • Se eu deixar a bola cair, ela passa para a área do adversário. Se o adversário deixar cair, ela volta para mim.
  • Incluí conceitos de física do mundo real, como peso, impacto, aceleração e inércia. É mais difícil do que parece.
  • Como é uma versão demo, dá para continuar jogando reiniciando após cada partida única.
  • Como nos fliperamas da infância, se você bater um recorde, pode registrar seu nome.

Se eu fosse escrever também algumas lições do processo de desenvolvimento:

  • Refatoração! Refatoração! Refatoração!
  • Passei a entender o que era essa tal de refatoração, da qual eu só ouvia falar, e comecei a pensar que talvez exista algo como o inferno da refatoração dentro de todos os infernos.
  • No começo, empolgado e sonhando alto com uma Battle.net, fui quebrando tudo em partes e inflando as funcionalidades, mas acabei me afogando numa enxurrada de bugs. No fim, resetei tudo, quebrei de novo, juntei de novo... isso foi antes de sair o Opus 4.5.
  • Se mesmo fazendo uma coisinha tão pequena já foi assim, passei a ter ainda mais respeito pelos programadores.

Felizmente, agora já passei a ter mais noção das minhas limitações, e me tornei alguém que divide o trabalho em partes menores, cria documentos de workflow e cuida com atenção do log de desenvolvimento e dos commits no Git. O maior ganho foi que agora tenho muitas coisas que quero tentar fazer. Estou pensando bastante em criar por conta própria as ferramentas de que preciso no trabalho.

Estou em dúvida sobre o que fazer com este jogo. Na minha situação atual, é difícil levá-lo para um desenvolvimento mais sério, mas ao mesmo tempo seria um desperdício simplesmente deixá-lo enterrado. Gostaria que ele se tornasse um jogo divertido para crianças.

Sempre aprendo muito com as notícias do GeekNews e sou muito grato por poder acompanhá-las. Obrigado.

14 comentários

 
colus001 2026-01-22

O conceito é divertido, mas a jogabilidade é muito ruim. Acho que aplicar inércia aos controles em um jogo como este não é uma boa ideia. Parece ser uma questão um pouco diferente da dificuldade.

 
gogoj2 2026-01-28

Obrigado pela opinião. Pensei sobre os pontos que você mencionou e reduzi a inércia pela metade para facilitar um pouco mais o controle. Eu estava priorizando primeiro o conceito físico que tinha em mente, mas isso me fez pensar mais sobre a jogabilidade e sobre como o jogo deve reagir nas colisões. Vou continuar ajustando. (Como fiquei mais ocupado com meu trabalho principal, a aplicação dessas mudanças demorou um pouco.)

 
gogoj2 2026-01-20

Quem será o FURY... deixou registrada uma pontuação impressionante.;;

 
bsh998 2026-01-20

Há conceitos de física do mundo real, como peso, impacto, aceleração e inércia. É mais difícil do que parece.

Parece um comentário que transmite pouca compreensão de física de jogos, então seria bom refiná-lo um pouco.

 
cucumber9 2026-01-20

Ajuste você mesmo kkk, e não venha bancar o sabichão na frente de quem é de humanas

 
gogoj2 2026-01-20

Obrigado por se preocupar com o coração de quem é de humanas. rsrs ^^

 
bsh998 2026-01-20

O motivo pelo qual é difícil para mim ajudar a refinar a redação é que eu não vi o código que você criou, então não sei de que forma você implementou a engine de física.

 
bsh998 2026-01-20

Peço desculpas pela parte em que fiz uma observação indesejada.
Muitas pessoas divulgam seus produtos, e eu costumo deixar comentários porque com frequência fazem essa divulgação usando IA ou acrescentam explicações inadequadas. Não foi um comentário escrito para irritar ninguém.

 
gogoj2 2026-01-20

Obrigado pelo interesse. Não me senti ofendido de forma alguma. Sou sempre grato por conselhos. Na verdade, eu não entendi bem o que exatamente e como deveria ser corrigido, então seria ótimo se você pudesse explicar com um pouco mais de detalhes.

Explicando melhor sobre a parte de aplicar física realista: normalmente, jogos desse tipo implementam apenas detecção de colisão e reflexão bem simples. Mas eu queria que, como em um jogo de pinball de verdade, desse para sentir a energia da colisão causada pelo peso e pela velocidade reais quando a bola ou os blocos colidissem. Por isso, fui procurar e acabei usando o Planck.js, que me pareceu mais preciso do que bibliotecas voltadas para jogos. Também representei os blocos sendo empurrados e girando com o impacto quando são atingidos pela bola. Além disso, nas configurações é possível alterar coisas como o peso da bola, o peso dos blocos, a atenuação da energia da colisão e a resistência, fazendo com que a experiência mude conforme a configuração.
(Há uma configuração que eu chamo de modo maluco: se você aumentar o peso da bola ao máximo e reduzir o peso dos blocos ao mínimo, o jogo fica bem dinâmico.)

O código também está no GitHub.
https://github.com/gogodevelop2/mirror-breakout

 
bsh998 2026-01-20

Comentando,
primeiro, parece que você dedicou mais esforço ao projeto de colisão, à configuração do coeficiente de restituição e afins.
E, em especial, as colisões passaram a ser calculadas e acontecer com base na massa e no coeficiente de restituição de cada elemento; mas, falando das partes que diferem do que você pretendia,

como coisas como a massa ou a velocidade do paddle ou do brick na prática só influenciam o momento da ball,
no fundo, isso fica mais próximo de ter se inspirado em um modelo físico para
implementar de forma diferente cada colisão entre a bola e (brick, paddle, parede).

Portanto, em vez de dizer que é física realista, parece melhor explicar que você aproveitou elementos de um motor de física para projetar de forma dinâmica as colisões e as mudanças de momento.

Em especial, como o processo de colisão é irrealista e por isso há mudanças de momento, você aplicou isso como correção de velocidade; e isso, do ponto de vista da sensação de controle, tanto pode soar como algo oculto quanto pode parecer um aspecto bastante pouco amigável.

 
bsh998 2026-01-20

Explicando de forma um pouco mais simples,
foram usadas fórmulas e métodos de cálculo da física, mas no fim das contas é um modelo que não é realista,
e há muitas correções aplicadas para bloquear, de forma lúdica, os problemas que surgem nessas partes não realistas (velocidade infinita, parada, controle de direção etc.).

 
gogoj2 2026-01-20

Obrigado pela explicação detalhada. Ficou bem fácil de entender. Como estou fazendo um jogo pela primeira vez, eu não conhecia muito bem esse universo da física de jogos nem o uso adequado da terminologia, então acabei escrevendo de um jeito que gerou mal-entendidos na explicação. Ouvindo sua explicação, acho que consegui entender um pouco melhor em que nível as pessoas que trabalham na área avaliam os resultados. Não consegui encontrar como editar o texto principal... vou procurar e corrigir. Obrigado.

 
[Este comentário foi ocultado.]
 
gogoj2 2026-01-20

Obrigado. haha Eu também vou apoiar suas atividades de hobby!