Ainda durante a faculdade um professor apresentou para a turma um programa traria a inspiração para a gladCode anos mais tarde. Este programa possuía uma linguagem própria, e nele, nós alunos deveríamos programar a inteligência de um robô virtual, que deveria batalhar contra os robôs dos outros alunos em um mini torneio realizado após a entrega do trabalho da disciplina.
Os anos se passaram. Hoje sou professor do
Instituto Federal Sul-Riograndense (IFSul) - Campus Charqueadas e ministro principalmente disciplinas de lógica de programação e linguagem de programação C.
No campus Charqueadas existe um evento anual chamado
CharCode. Neste evento existem hoje quatro modalidades: Hackathon, Maratona de programação,
Robocode e a gladCode. Durante a CharCode 2016 eu e outros professores estávamos conversando sobre a Robocode, quando surgiu a ideia de desenvolver um software semelhante, com a diferença de usar a linguagem C, ao invés de Java, pois traria um engajamento maior dos alunos novatos do campus (pois C é ensinado desde o início do curso), e principalmente usando uma temática dos RPGs antigos ambientados em fantasia medieval.
Resolvi então tocar adiante o projeto que nomeei gladCode (pois se trataria de uma arena de gladiadores), e em 2017 foi incluído na CharCode a nova modalidade: a gladCode. Este meu novo projeto tinha por objetivo auxiliar alunos no processo de aprendizado de conceitos de lógica ao mesmo tempo que permitia que eles tivessem contato com a linguagem C em um ambiente gráfico, fugindo da tela preta do terminal, enquanto se divertiam em uma competição ambientada em uma temática de jogos estilo RPG.
A primeira versão da gladCode rodava localmente e funcionava no Windows. O repositório
gladCode contém a primeira versão do projeto, para quem quiser entender como funciona.
Na gladCode todos códigos criados pelo usuário precisavam incluir o arquivo-fonte da simulação. Este arquivo continha a função principal (main) e iniciava uma thread responsável por controlar o gladiador do usuário. Além de um processo para cada usuário, um outro processo responsável por gerenciar a simulação e intermediador os dados recebidos pelo processo de cada gladiador também era iniciada. A simulação era então executada, e após isso um log era gerado em um arquivo contendo o que aconteceu em cada instante de tempo da simulação. Este log era o histórico da luta, descrito em texto. Um render das lutas, responsável por mostrar na tela as animações referentes ao log da criado pela simulação, foi desenvolvido em Java pelo meu colega Maurício Escobar. Além disso uma interface gráfica também foi desenvolvida por mim em C para permitir que as equipes da competição selecionassem seus arquivos com os códigos-fonte e as imagens dos gladiadores. As imagens dos gladiadores eram extraídas do
gerador de folha de sprites do
projeto LPC, que diga-se de passagem é um maravilhoso projeto artístico que permite aos novos desenvolvedores de games criarem personagens altamente personalizáveis.
Embora um enorme desafio desafio do ponto de vista técnico, a gladCode foi um sucesso. Mas o projeto, muito promissor e elogiado por alunos e professores não podia para por aí. A gladCode era um programa que exigia um certo trabalho para rodar, e isso muitas vezes era um impecilho na hora de um aluno iniciante dar os primeiros passos. Então 2018 começou com o desafio de transportar a gladCode para um sistema web, permitindo que o usuário execute e visualize a simulação no navegador, sem precisar instalar nada.
Como eu precisava que o servidor compilasse e executasse os programas, eu precisava de acesso root ao servidor, por isso contratei um
VPS para hospedar o projeto. Depois da tarefa de configuração do servidor (que eu nunca tinha tido contato até então) percebi que eu precisaria executar o código do usuário em um ambiente seguro e isolado, então fui apresentado ao
Docker e seus containers, e desta empreitada surgiu o
compilador C da gladCode.
Após esta etapa precisei fazer o port de todo o código da gladCode para linux para executar no servidor, então aproveitei o momento para modificar a estrutura do programa. A partir de então a comunicação entre os processos passou a ser feita por troca de mensagens em um servidor
socket ao invés de por
memória compartilhada. Esta mudança permitiu criar uma
API onde no futuro se tornaria muito mais simples adicionar suporte à outras linguagens de programação além do C. Troquei também o padrão de comunicação do log da simulação por
JSON, visto que a comunicação entre o servidor e o usuário seria feita pelo navegador em linguagem javascript. Assim nasceu a segunda versão da gladCode.
Como a renderização da simulação agora seria feita no navegador, utilizando a
framework Phaser programei o novo render da gladCode.
Os passos seguintes foram a criação das páginas de documentação do projeto e o editor de aparência dos gladiadores, que permitia ao usuário de maneira intuitiva escolher cada peça de equipamento que comporia seu novo gladiador, e gravá-lo no banco da dados do servidor.
Na Charcode 2018 a modalidade gladCode utilizou a hoje chamada interface de
torneio clássico para realizar a competição, que permitiu a geração dos logs das batalhas para visualização posterior.
Os próximos passos da gladCode seriam torná-la um sistema multiplayer online, onde os usuários criariam seu perfil, salvariam seus códigos e seus gladiadores no servidor, e os colocariam para batalhar contra os gladiadores de outros usuários em um sistema de ranking online da plataforma. Desta forma nasceu o
editor de gladiadores, que une o editor da aparência do gladiador com o editor de texto do compilador C da gladCode. A página de perfil do usuário foi criada permitindo ao usuário comunicar-se com seus amigos, visualizar seu ranking, e inscrever seus gladiadores em batalhas.