E agora, que linguagem?

por Osvaldo Santana Neto <acidbase@bigfoot.com>

Após ler o artigo anterior vocês devem estar se perguntando: Tá, e agora, tenho todo o material para começar o desenvolvimento de um jogo, mas como devo proceder? É exatamente isso que esse artigo vai tentar esclarecer.

Armado com um calhamaço de papéis, desenhos, rascunhos e idéias para o seu jogo chegou a tão esperada hora de codificar. Não, calma, ainda não. Chegou a hora de estruturar o seu programa, suas bibliotecas, e escolher a melhor linguagem de programação para codificar.

Os conceitos de estruturação de um programa ficam um pouco fora do escopo desse artigo, e poderão ser descritos em artigos posteriores. O que iremos explicar aqui é exatamente como escolher uma linguagem de programação.

Como vocês devem saber, a tarefa de desenvolver um jogo exige um bom conhecimento de programação. Posso até dizer que um bom programador de jogos conhecer um pouco de cada uma das técnicas de programação existentes até hoje.

Para facilitar a decisão do programador na escolha de uma linguagem de programação, irei descrever as vantagens e desvantagens das linguagens mais usadas (e suas variações) no desenvolvimento de jogos para computador.

Pascal

É uma linguagem que surgiu a partir do Algol e foi desenvolvida por Niklaus Wirth em um computador CDC 6600 entre 1967-68 como uma ferramenta para ser usada no ensino de programação. Esta linguagem foi inicialmente criada para ajudar a estudantes no aprendizado de programação, mas futuramente foi transformada em uma linguagem para desenvolvimento de programas genéricos. O Pascal faz parte da mesma família das linguagens Modula-2 e Ada. Deixando a história um pouco de lado, o Pascal é uma linguagem compilada, ou seja, o programa feito em Pascal é convertido (compilado) para código de máquina por um compilador.

Pascal é uma linguagem fortemente tipada, ou seja, ela força o programador a declarar variáveis com o tipo de dado que ela realmente irá armazenar. Para que isso funcione o Pascal tem que manter uma checagem de erros em tempo de execução. Em resumo: Se você declara que uma variável só receberá valores inteiros, o Pascal não permitirá que um valor de ponto flutuante seja atribuido a ela.

Recentemente foi criada uma extensão à linguagem Pascal chamada Object Pascal, que acrescentou suporte a OOP (Programação Orientada a Objetos). Os compiladores Pascal mais conhecidos são:

Todos esses compiladores permitem que as opções de checagem em tempo de execução sejam desabilitadas.

Vantagens: É de fácil aprendizado. Força o programador a manter códigos bem feitos. O Código do Pascal é de fácil interpretação. Possui uma vasta documentação.

Desvantagens: Possue um desempenho baixo devido ao seu sistema de checagem de erro em tempo de execução. Não possue muitas bibliotecas para trabalho com gráficos, sons ou outros tipos de hardware.

Exemplo: (Colocarei um exemplo de código para cada linguagem)

{ Programinha }
Program Programinha;

Uses Crt;

Var Km : Integer;

Begin
   For Km := 550 Downto 1 do Begin
      Writeln(Km,' kilômetros, pare um pouquinho, 
              descanse um pouquinho, ',Km,' kilômetros');
   End;
End.

C/C++

Linguagem de programação criada por Dennis Ritchie e Brian Kernnigan durante a década de 70 e usada para implementar o sistema operacional UNIX. Recebeu esse nome porquê ela se originou da linguagem B, que por sua vez se originou da BCPL que veio de uma variante do Algol. Bjarne Stroustrup acrecentou suporte à programação orientada a objeto ao C e criou o C++. A linguagem C é largamente utilizada no desenvolvimento de sistemas operacionais e jogos de computadores.

Algumas pessoas dizem que a linguagem C fica entre o Pascal e a linguagem Assembly. Como o Pascal, a linguagem C também é compilada. Mas C não é uma linguagem fortemente tipada. Isso significa que você pode dizer que uma variável deve receber um valor inteiro e atribuir (por sua conta e risco) um valor de ponto flutuante. Existem dezenas de compiladores C/C++ entre eles:

Vantagens: Gera códigos muito rápidos. Possui vasta documentação e um número considerável de bibliotecas para desenvolvimento de jogos (como a Allegro).

Desvantagens: Não tem um código fonte muito agradável de se ler. O aprendizado é mais complicado que Pascal. Em Sistemas Operacionais ruins, como o Windows :), pode causar crashs no sistema.

Exemplo:

/* Programinha */
#include

int main(void)
{
   int km;
   for(km = 550; km >= 1; km--) {
      printf("%d kilômetros, para um pouquinho, 
               descansa um pouquinho %d kilômetros.\n",km,km-1);
   }
}

Basic

O BASIC (Beginner's All-purpose Symbolic Instruction Code) foi uma linguagem criada com o propósito de ensinar programação nas escolas americanas. Porém, por não ser uma linguagem estruturada, permitia que os estudantes desenvolvessem programas de má qualidade e aprendessem técnicas de programação não muito "elegantes".

Inicialmente o BASIC era uma linguagem interpretada, o primeiro compilador BASIC foi criado pela Microsoft após ter modificado (como ela sempre faz) a linguagem de forma a ficar parecida com uma linguagem estruturada.

Existe apenas um compilador que merece ser citado, apesar da enorme quantidade de interpretadores BASIC disponíveis no mercado (entre soluções comerciais e de software livre).

Vantagens: Fácil aprendizagem.

Desvantagens: Permite que o programador use técnicas não muito "elegantes" de programação. Mesmo com código compilado, é uma linguagem lenta.

Exemplo:

10 ' Esse código servirá para linguagens interpretadas
20 ' A numeração de linha já não é necessária em alguns dialetos BASIC
30 FOR KM=550 TO 0 STEP -1
40  PRINT KM,"km, para um pouquinho, descanse um pouquinho, ",KM-1,"km"
50 NEXT KM
60 END

Assembly

Assembly não é necessariamente uma linguagem de programação. Assembly é chamada de linguagem de montagem. Ela possui um conjunto de instruções mnemônicas que variam de plataforma para plataforma, que são convertidas em código de máquina por um programa chamado Assembler. Por ser convertida em linguagem de máquina, ela apresenta um desempenho espantoso se comparado a uma linguagem de programação comum. Em contrapartida, um programa desenvolvido para uma plataforma X, certamente não funcionará em uma plataforma Y.

Existem centenas de compiladores (montadores) Assembly para centenas de plataformas diferentes, por esse motivo, citarei alguns compiladores Assembly conhecidos para a plataforma x86 que, acredito, é uma das mais comuns hoje.

Vantagens: MUITO rápida.

Desvantagens: Torna o programa depende de plataforma. Difícil aprendizado.

Exemplo:

Por depender muito de Sistema Operacional e da plataforma, não colocarei o exemplo utilizado nas outras linguagens. No lugar colocarei um exemplo simples de "Hello World!" que pode ser compilado no A86 e ser rodado em WinDOS.

; Programinha Hello World!

ORG 100H

INICIO: JMP START

MSG db 'Hello World!',13,10,'$'

START: MOV AH, 09H
       MOV DX, OFFSET MSG
       PUSH CS
       POP ES
       INT 21H
       MOV AX, 04C00H
       INT 21H

END INICIO

Linguagens Script

Com o advento da Internet as linguagens Script tiveram uma ascensão notável e merecem ser citadas nesse artigo. As linguagens Script são em sua grande maioria interpretadas, e são usadas principalmente na criação de sites dinâmicos para a Internet, ou para Intranets. As linguagens Script mais conhecidas são: Perl, Python, sh e suas variantes, e TCL. Todas essas possuem versões Free para sistemas operacionais Posix. Algumas delas, como Perl, possuem também versões para Windows.

Na produção de jogos só são recomendadas para criação de programas que não exigem alto desempenho.

Vantagens: São de fácil aprendizado.

Desvantagens: São lentas.

Exemplo: (colocarei um exemplo em Python que é a única que eu conheço :) )

#!/usr/bin/python
# Programinha

for km in range(550, 1, -1) :
	print km," km, para um pouquinho, descansa um pouquinho, ",km," km."

Conclusões

Nesse ponto você já conhece algumas características de várias linguagens de programação e já deve ter chegado a alguma conclusão sobre qual linguagem deve ser escolhida para o desenvolvimento do seu jogo.

Os pontos que devem ser considerados na escolha de uma linguagem de programação são:

Tipo de jogo

Fator principal na hora da escolha. Se você vai desenvolver um jogo com engine 3D que precisará renderizar vários frames por segundo, não seria adequado escolher uma linguagem interpretada. Já se você vai fazer um jogo de dama, nada impede que você use até mesmo uma linguagem Script.

Conhecimento de programação

É evidente que o fator "experiência com a linguagem" deve ser considerado na escolha da melhor linguagem.

Disponibilidade de ferramentas

Nem sempre reinventar a roda é um bom negócio, portanto, se uma linguagem já dispões de ferramentas, bibliotecas e outras coisas utilizadas no desenvolvimento de jogos, isso deve ser levado em consideração.

Híbridos

Se uma linguagem pode se comunicar com outras, isso a torna muito interessante. Essa técnica de misturar várias linguagens no desenvolvimento é muito útil para a criação de jogos. Imagine que você está desenvolvendo um jogo em C, mas as rotinas de tratamento de vídeo não estão desempenhando bem essa função (e acredite, isso acontece muito), pode ser interessante criar rotinas em Assembly para tratar dessas tarefas.

Recomendações

Nesse bloco, farei algumas recomendações sobre que linguagem de programação usar para alguns tipos de jogo:

3DC com Assembly
Adventure GráficoC/C++ com Assembly
Adventure TextoLinguagem Script
RPG GráficoC/C++ ou Pascal
RPG TextoLinguagem Script
TriviaLinguagem Script
Tabuleiro GráficoPascal
Tabuleiro TextoPascal
ArcadeC com Assembly
LutaC com Assembly
SimuladoresC com Assembly
Estratégia GráficosC/C++ com Assembly
EAstratégia TextoPascal

Mas lembrem-se que isso são apenas recomendações, tendo visto que já ví até engines 3D rodando em Java. Portando, não se prendam a uma única linguagem, explore as vantagens de cada uma delas and... FIGHT!


Alguns trechos desse artigo foram traduzidos do Jargonfile que pode ser obtido em http://avatar.deva.net ou nas melhores distribuições Linux do ramo.