Artigo 05 (Jun/2000)

E agora, que linguagem?

por Osvaldo Santana Neto

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:

Borland Pascal 7.0 - Última versão do compilador Pascal da Borland que gerava código para DOS (apesar de também possuir algum suporte a API Windows). Possui suporte a programação orientada à objetos.

Delphi - Compilador Pascal que gera código 32bits e possui um ótimo suporte à API do Windows, mas também compila programas para WinDOS (DOS com suporte a DPMI). É muito utilizado para gerar aplicativos comerciais para Windows. É uma linguagem visual.

Free Pascal Compiler - Particularmente acho esse o mais interessante de todos. Ele é totalmente compatível com o Borland Pascal 7.0 e gera código para diversos sistemas operacionais diferentes como: Linux, Windows e Amiga. E o melhor de tudo: é free, ou seja, pode ser obtido no site e copiado livremente. O site? http://www.freepascal.org

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 porque 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:

Borland C/C++ 4.5 - Última versão para DOS do compilador C da Borland, funcionava de forma muito semelhante ao Borland Pascal 7.0 gerando código para DOS mas apresentando também algum suporte ao Windows.

GCC GNU C Compiler - Compilador C/C++ da GNU (GNU is not Unix). É um compilador muito poderoso e possui versões para diversas plataformas. Também é um software free e pode ser obtido através de download no site: http://gcc.gnu.org. A versão para DOS/Win pode ser obtida em: http://www.delorie.com

C++ Builder - Semelhante ao Delphi, mas compila códigos em C/C++. É uma linguagem visual.

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 <stdio.h>

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).

Visual Basic - Compilador da Microsoft que gera código apenas para Win32. Como o nome já diz, também é uma linguagem visual.

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.

TASM - Turbo Assembler da Borland, é um programa que faz parte dos pacotes de desenvolvimento da Borland (Turbo Pascal/Borland C/C++) que, na minha opinião, é a melhor produtora de compiladores comerciais existente.

MASM - Macro Assembler é o montador da Microsoft e também faz parte dos pacotes de desenvolvimento da mesma.

A86 - Assembler 86 é um compilador Free que gera código 16bits e possui mais algumas ferramentas para desenvolvimento em Assembly.

AS - Assembler que faz parte do pacote GCC da GNU.

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:

3D C com Assembly
Adventure Gráfico C/C++ com Assembly
Adventure Texto Linguagem Script
RPG Gráfico C/C++ ou Pascal
RPG Texto Linguagem Script
Trívia Linguagem Script
Tabuleiro Gráfico Pascal
Tabuleiro Texto Pascal
Arcade C com Assembly
Luta C com Assembly
Simuladores C com Assembly
Estratégia Gráfico C/C++ com Assembly
Estratégia Texto Pascal

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.


Osvaldo Santana Neto, equipe de desenvolvimento do Borolândia.