Criando um Game Completo - Parte 0

Nesta série de artigos, divida em 9 partes, vamos partir do zero e criar uma versão do clássico Space Invaders compatível com Windows e Linux, utilizando aceleração de hardware para gráficos 2d, suporte a joystick e uma tabela de high scores online.

O jogo é propositalmente simples para que o leitor com pouca experiência na linguagem e no desenvolvimento de games possa acompanhar o texto e o código o início ao fim.

Ao final de cada etapa, como de costume, estarão disponíveis para download tanto o código fonte como o executável equivalente.

Espero que apreciem.




Lazarus

Setup do Lazarus 1.5
Vamos utilizar o Lazarus 1.5 junto com a versão 3.0 do Free Pascal para escrever nosso game. Além disto, minha estação de trabalho é um PC com o Windows 8 de 64bits e as imagens que mostraremos sempre irão refletir este ambiente de desenvolvimento.

Para realizar o download do instalador, visite http://www.getlazarus.org/setup/?download#windows

No momento em que escrevo, somente é possível obter este ambiente pelos nightly build do projeto, então, se alguma instabilidade for encontrada em seu PC, você pode recorrer à versão estável do Lazarus disponpível em sua página no Source Forge. As versões da IDE e do compilador serão um poco mais antigas, mas o código desenvolvido nos próximos textos deverá compilar sem problemas.

Depois de baixar o setup, a instalação segue o padrão next, next, finish típicos do windows. Simples e rápido!

Vamos em frente.



SDL 2

O SDL (Simple DirectMedia Layer) é uma biblioteca multimídia livre e de código aberto, multiplataforma, escrito em C que representa uma interface simples para gráficos, som, e dispositivos de entrada de várias plataformas.

Trine, exemplo de game escrito com SDL
Muito usada para criação de jogos comerciais, o SDL é a plataforma de escolha da Valve para o seu famoso Steam Client, e o caminho escolhido por vários desenvolvedores ao redor do globo para escrever seus jogos para Windows, Linux e MAC.

Para se ter uma idéia do que é possível fazer com SDL, veja o primeiro game da trilogia Trine na loja do steam ou clique na imagem ao lado para ampliá-la.

Animador, não?

Bom, por ser escrita em C e possuir bindings para várias linguagens, integrar o SDL 2 ao lazarus é uma tarefa trivial.

Primeiro precisamos baixar a biblioteca compilada para o windows ( vamos nos preocupar somente com a versão de 32 bits, por enquanto ). Acesse o endreço http://www.libsdl.org/download-2.0.php e escolha a dll adequada para seu ambiente.

Agora, para baixar os bindings ( as units com as chamadas de função, e declarações de tipos contidos na biblioteca compilada ) acesse o projeto de tradução dos headers no GitHub em  e faça o download dos arquivos compactados.



Configurando o Ambiente

Neste ponto, você deve ter o Lazarus instalado, a SDL2.dll e os headers descompactados em algum lugar de sua máquia. Vamos começar.

Abra o Lazarus, escolha a opção do menu
Projeto > Novo Projeto e crie um novo projeto do tipo "Programa Simples".

Salve o projeto em um diretório qualquer com o nome space_invaders.lpi. Para facilitar, vamos nos referir, neste texto, ao diretório em que o projeto foi salvo como PROJDIR.

Agora, crie dentro de PROJDIR, uma estrutura de diretórios seguindo a tabela abaixo para mantermos os arquivos de nosso projeto organizados.

Diretório

Descrição

PROJDIR Diretório raiz do projeto.
Pode ser qualquer diretório que você achar conveniente.
O arquivo space_invaders.lpi deve ser posto aqui.
PROJDIR\bin Conterá todos os binários necessários para que o projeto execute.
A biblioteca SDL2.dll deverá ser copiada para cá
PROJDIR\headers Irá conter os headers (ou bindings) das bibliotecas que utilizaremos
PROJDIR\headers\sdl2 Todos os arquivos dos headers do SDL2 deverão ser copiados para cá
PROJDIR\lib Aquivos .o e .ppu gerados pelo compilador
PROJDIR\units Todas as units escritas por nós, serão salvas aqui.

Opções do Compilador
Uma vez criados os diretórios, precisamos instruir o compilador a utilizá-los.

De volta ao Lázarus, abra o diálogo de opções do projeto (Projeto > Opções de Projeto) selecione o nó Opções do Compilador na árvore lateral e configure-a de acordo com a imagem ao lado.

Informamos no primeiro campo (Other unit files) que ele deverá incluir os arquivos de headers do SDL 2 que copiamos para PROJDIR\headers\sdl2 no passo anterior. Informamos também que queremos que o nosso executável seja gerado na pasta bin (Nome do arquivo alvo).


Para finalizar as configurações, vamos nos certificar de que iremos gerar (inicialmente, pelo menos) um programa de 32 bits no modo gráfico para windows.

A imagem ao lado mostra como deverão estar suas opções no nó Configuração e Alvo.

Pronto! Nosso ambiente está configurado.
Compile o programa vazio e veja se tudo saiu como esperado. Se for preciso, volte nos passos anteriores e confira e esqueceu de algo.


Testando o Ambeinte

Para conferir se está tudo ok, compile o programa abaixo.

program space_invaders;

uses
  SDL2;
begin
  if SDL_Init(SDL_INIT_VIDEO) = 0 then
  begin
    SDL_Delay(2000);
    SDL_Quit;
  end;
end.

Iniciamos o subsistema de vídeo do SDL através da função SDL_Init e, caso não haja erros, esperamos por 2 segundos, finalizamos o SDL e fechamos o programa.

Pronto! Temos tudo preparado para começar nossa jornada.

Até a próxima.

Links