Ainda
hoje, no início do terceiro milênio, em qualquer
fórum ou lista de discussão sobre jogos que se preze,
a maioria absoluta dos participantes é formada por pessoas
que acreditam que jogos bons devem ser escritos em C.
Essa crença na linguagem C é antiga
e tem suas origens nos primórdios da computação
acadêmica. Sob certos aspectos, C é
de longe a linguagem mais marquetizada
que se tem noticia na face da terra (e sem que nenhum fabricante
de compilador gaste um centavo sequer com isso).
Para
entender melhor precisamos voltar ao começo dos tempos,
nas décadas de 70
e principalmente 80.
Naqueles tempos, cada fabricante de computador tinha o seu próprio
sistema e invariavelmente o sistema de um não se dava bem
com o de outro. Não apenas porque cada um usava um processador
diferente, mas principalmente porque os sistemas operacionais,
bios e linguagens residentes não guardavam nenhuma semelhança
ou compatibilidade entre si.
Normalmente
os computadores vinham de fábrica com um sistema operacional
básico e uma linguagem interpretada, gravados em eprom
e portanto disponíveis para uso tão logo o botão
de liga/desliga fosse ativado. Invariavelmente a linguagem residente
era o basic (embora um ou outro fabricante maluco
tenha optado pelo forth - que era considerada
a linguagem ideal para escrever jogos).
Acontece
que o basic sempre foi a pedra no sapato dos
acadêmicos. Considerada meramente como "lixo"
pela nata da programação, a linguagem tinha suas
vantagens e desvantagens. A vantagem principal era a de que até
um chipanzé é capaz de programar em basic,
ao contrário do assembler, que exige um
pensamento organizado e principalmente paciência, tornando-a
a melhor de todas as linguagens herméticas (portanto mantendo
a academia exatamente onde ela deve ficar, na manutenção
do conhecimento). A grande desvantagem do basic
era justamente o fato de ser interpretado e não compilado.
Um
programa compilado executa exatamente o que o código manda
executar. Um programa interpretado precisa antes ser traduzido
para os zeros e uns que o processador compreende, acrescentando
ao programa uma etapa que consome muito processamento e não
traz nenhuma vantagem adicional, além do fato do programa
poder ser alterado a qualquer momento. Neste esquema, todos os
programas seriam em princípio open source
(a grande vedete dos tempos modernos).
As
demais linguagens tradicionais, como Cobol, Fortran,
além das esquisitas como Ada, Prolog,
Lisp, etc, ou estavam em processo de extinção
ou simplesmente não saiam do círculo formado pelos
seus criadores e entusiastas. Nem mesmo o Pascal,
uma espécie de basic metido a aristocrata,
conseguia vencer as resistências e o mundo seria dominado
pelo basic se nada fosse feito. Principalmente porque já
começavam a aparecer compiladores basic e, heresia de todas
as heresias, um basic estruturado começava a ganhar terreno.
Então
apareceu a linguagem C. Foi proposta como uma
linguagem intermediária: não era tão escandalosamente
restrita como o assembler e nem escancaradamente
simples e direta como o basic, mas a meio caminho
de ambas. Mantinha a velocidade do asssembler (claro, afinal toda
linguagem compilada tem a velocidade do assembler) e era "portável"
- era para rodar os fontes em qualquer máquina C (assim
como o Java tenta ser hoje). De fato, o basic
possuía contra si o fato de existirem inúmeros dialetos
que as vezes nem entre eles havia compatibilidade.
O
C manteve a mesma estrutura hermética
das linguagens acadêmicas, ou seja, era uma linguagem para
os estudiosos e não para usuários comuns, ou programadores
de segunda linha (programador de fim de semana). Assim ela nasceu
e assim ela permanece até hoje.
Além
disso, a linguagem foi planejada para que os programadores escrevessem
sistemas operacionais, compiladores, drivers, etc, de forma mais
rápida e eficiente. Nunca foi proposto que ela substituísse
as linguagens de alto nível, na criação de
programas ou aplicativos.
Então
por que o C está tão ligado à
criação de jogos, quase que como se fosse impossível
ser diferente? As razões estão também lá
no começo dos tempos.
Na
idade da pedra da computação, a exemplo de hoje,
os jogos exigiam sempre o máximo potencial e o melhor aproveitamento
dos recursos das máquinas disponíveis e o grande
gargalo (ainda hoje é) era a parte de vídeo, ou
gráfica.
Hoje
em dia, soluciona-se isso gastando algumas centenas de dinheiros
numa placa 3D de alto desempenho e pronto. Mas naqueles tempos
antigos, os computadores não dispunham de tais facilidades
e eles eram sempre do jeito que saiam de fábrica. Todos
iguais. Produzir animações na tela do micro exigia
então programação assembler complexa.
O
aparecimento da linguagem C permitiu que os programadores
se livrassem da incompatibilidade entre os processadores e mais:
dotou-os de uma ferramenta portável (a palavra sob a qual
o C foi criado). Assim, converter um jogo para os diversos micros
da época era relativamente simples.
Passou
a ser verdadeira então a afirmação de que,
profissional e comercialmente, usar C para programar os jogos
era a melhor opção. Com o tempo e com a evolução
dos compiladores, aumento da performance dos equipamentos e principalmente
com o surgimento de novas técnicas de animação,
essa verdade tornou-se então questionável. Mas não
se pode negar que ainda dispomos de uma vasta biblioteca de conhecimentos
em C, sobre programação de jogos e que não
devemos simplesmente desprezar por qualquer tipo de preconceito.
Hoje
em dia, vale a regra: quem já domina ou tem uma estrutura
calcada na programação usando C,
deve permanecer nela. Quem ainda vai formar sua estrutura ou está
começando agora, tem à sua disposição
uma série de opções, tão boas quanto,
podendo inclusive optar pelo C. Mas é preciso considerar
um ponto: o C é de longe a pior escolha para um iniciante.
Não apenas porque sua sintaxe é antiquada, mas porque
ela se tornou improdutiva se levarmos em conta o tempo disponível
que temos para programar (ainda que não se considere o
trabalho como um produto comercial e portanto com prazos a cumprir).
Porém,
nenhuma linguagem, nenhum sistema é capaz de responder
sozinho pela criação e produção de
um jogo, se desejarmos dar alguma complexidade a esse programa.
|