Game Dev 16 de outubro de 2026• 6 min de leitura• Rafael Guimarães

Onde tudo começou: a pós em jogos na Unicenp, da Batalha Naval em texto ao Pacman 3D

Os primeiros jogos do Guima Games, feitos na pós em Desenvolvimento de Jogos da Unicenp (2005–2007): Batalha Naval em C++, SDL, OpenGL, Lua, Pacman 3D e a engine ACAGL.

Onde tudo começou: a pós em jogos na Unicenp, da Batalha Naval em texto ao Pacman 3D

Em 12 de março de 2005, começou em Curitiba a pós-graduação em Desenvolvimento de Jogos da Unicenp. As aulas eram em sábados alternados, das 9h às 18h. O curso estava previsto para catorze meses, até setembro de 2006, mas terminou só em 10 de janeiro de 2007, com a entrega de um Pacman para celular.

Foi ali que nasceram os primeiros jogos do que viria a ser o Guima Games. Este artigo conta o que foi feito em cada etapa, em que tecnologia, e o que esses trabalhos de aula deixaram de herança para os jogos que você encontra hoje no portal.

O que se estudava

A grade dá uma ideia do que é preciso saber para fazer um jogo do zero:

  • C++ para jogos
  • Game Design I, II e III
  • Computação Gráfica I e II
  • Arquitetura de Engines
  • Inteligência Artificial
  • Multiplayer
  • Jogos para celulares

O curso também ensinava um roteiro de documento de game design, o texto que descreve o jogo antes de ele existir: conceito, regras, controles, fases, personagens. Escrever o jogo antes de programá-lo parece burocracia, até o dia em que você descobre no meio do código que não sabia o que o jogo deveria fazer.

Tarefa 1: Batalha Naval em modo texto

O primeiro projeto foi uma Batalha Naval em modo texto, escrita em C++. Sem gráficos: o tabuleiro aparece como caracteres no terminal, e o jogador digita as coordenadas do tiro.

É o tipo de projeto que parece pequeno e ensina o essencial:

  • o laço do jogo: ler a jogada, atualizar o tabuleiro, mostrar o resultado, repetir;
  • o estado: onde estão os navios, quais casas já levaram tiro, quem está ganhando;
  • a validação da entrada: uma coordenada fora do tabuleiro ou repetida precisa de resposta, não de travamento.
Bug marcante: havia implementado tudo que sabia de padrões de orientação objeto, e ficou complicado de explicar para outras pessoas. Quando portei pra celular, funcionou no emulador mas não no Android, ai simplifiquei tudo, ai tudo fucnionou bem ... liçào 1: KISS: Keep It Simple Stupid

Tarefa 2: a mesma Batalha Naval, agora com imagem

A segunda tarefa foi refazer a Batalha Naval em 2D, com SDL, OpenGL e Lua. A regra era a mesma; o que mudava era tudo em volta:

  • SDL abre a janela, lê o mouse e o teclado e toca sons;
  • OpenGL desenha na tela usando a placa de vídeo;
  • Lua é uma linguagem pequena, feita para ser embutida em outros programas, e serve para guardar regras e comportamentos fora do código compilado em C++.

Refazer o mesmo jogo com outra tecnologia é um exercício subestimado. Como as regras já estão resolvidas, toda a atenção vai para a técnica nova. E fica claro o que é jogo (as regras da Batalha Naval) e o que é motor (desenhar, ouvir o mouse, tocar o som).

Foi também numa das primeiras aulas de SDL que aconteceu a história contada no artigo O Pong que não morre: a turma tinha cerca de uma hora para fazer um Pong, e eu fui o único dos trinta que não terminou.

Crazyroids e Gênius Faraó 3D

Os trabalhos seguintes continuaram na mesma base de C++, SDL, OpenGL e Lua:

  • Crazyroids, um jogo 2D no estilo Asteroids, usado também como teste da engine;
  • Gênius Faraó 3D, uma versão em três dimensões do clássico jogo de memória de sequência de cores e sons.

O Gênius é um parente distante do GG Colors, o jogo de memória de sequência do portal. A mecânica é a mesma de vinte anos atrás: o jogo mostra uma sequência, você repete, a sequência cresce.

Pacman 2D: a disciplina de Inteligência Artificial

Na disciplina de IA, o projeto foi um Pacman 2D em SDL com duas peças interessantes: um gerador de mapas e fantasmas que encontram o caminho até o jogador usando o algoritmo A\* (lê-se "A estrela").

O A\* é o algoritmo clássico para achar o menor caminho num mapa. Ele explora o labirinto a partir do fantasma, mas não às cegas: dá preferência às casas que parecem mais próximas do destino. Para cada casa, soma duas coisas:

  • quanto já custou chegar até ela;
  • uma estimativa de quanto falta até o alvo (no Pacman, a distância em linha reta ou em "quarteirões").

Em seguida, expande sempre a casa com a menor soma. Num labirinto como o do Pacman, isso encontra o caminho mais curto muito mais rápido que testar todas as rotas.

Hoje o GG Pacman do portal tem outra proposta: os fantasmas são controlados por outras pessoas, em multiplayer. Mas o labirinto e a perseguição vêm daquele trabalho de IA.

O projeto final: Pacman 3D e a engine ACAGL

O projeto final da pós foi um Pacman 3D em C++, OpenGL e SDL, aprovado em 21 de novembro de 2006.

Para fazê-lo, desenvolvi uma engine própria, a ACAGL. Ela partiu da engine ACA, criada pelo coordenador do curso, Fábio Binder, e foi ampliada com Lua e com a biblioteca FTGL, que desenha texto em OpenGL.

Fazer uma engine para um único jogo é uma decisão que só se justifica num contexto de estudo. Mas como estudo ela é imbatível: obriga a entender cada camada, da janela ao texto na tela, e a decidir onde termina o motor e onde começa o jogo.

Pacman para celular

O curso terminou com um terceiro Pacman: uma versão para celular em J2ME, o Java dos aparelhos da época, usando o perfil MIDP. Em 2006, "jogo de celular" significava tela pequena, teclado numérico e pouquíssima memória, e isso obrigava a pensar o jogo de novo, em vez de só encolher o do computador.

Depois da pós: a ACAGL no SourceForge

Em agosto de 2009, voltei à ACAGL. Ela tinha sido escrita no Visual Studio 6; migrei para o Visual Studio 2005 e 2008, acrescentei controle de som e volume e publiquei o código no SourceForge.

O post daquela época tem uma frase que eu repetiria hoje: aprimorar uma engine "é divertido só para o programador". Para quem joga, o que importa é o jogo. Por isso, nos anos seguintes, troquei a engine própria por ferramentas prontas (XNA, Unity, Unreal, Phaser) e passei a gastar o tempo no que o jogador vê.

O que esses trabalhos de aula deixaram

Quase todos os jogos do portal têm um antepassado naquela pós:

Trabalho da pósParente no portal hoje
Pong em SDL (não terminado)GG Pong
Gênius Faraó 3DGG Colors
Pacman 2D com A\*, Pacman 3DGG Pacman
Batalha Naval, jogo de tabuleiro por turnosGGBoard

E algumas lições que continuam valendo:

  1. Escreva o jogo antes de programar. O documento de game design poupa reescritas.
  2. Refaça o mesmo jogo com outra técnica. Fica claro o que é jogo e o que é motor.
  3. Algoritmos clássicos resolvem problemas reais. O A\* de uma aula de IA é o mesmo dos jogos comerciais.
  4. Engine própria ensina, mas não é o produto. O jogador quer jogar.

Continue lendo

RG

Rafael Guimarães

Criador do Guima Games Portal & Game Developer

Ver mais artigos