Voce nao precisa ver toda a escada,simplesmente de o primeiro passo!Bem vindo a primeira parte do nosso mini-curso Criando um Game Completo, onde iremos criar, do zero, uma versao do classico Space Invaders compativel com Windows e Linux, utilizando aceleracao de hardware para graficos 2D, suporte a joysticks e uma tabela de scores online!O jogo e propositalmente simples para que o leitor com pouca experiencia na linguagem Pascal e no desenvolvimento de games possa acompanhar o texto e o codigo o inicio ao fim. Iremos utilizar uma abordagem mista de programacao estruturada e orientada a objetos ja que precisaremos interfacear com algumas bibliotecas de baixo nivel, mas sempre buscaremos manter o codigo simples, comentando e explicando cada bloco que surgir.O curso esta divido em nove partes, com cada uma delas sendo publicada semanalmente aqui no blog. Duvidas, criticas e sugestoes poderao ser postadas livremente nos comentarios.Espero que apreciem.Iniciando o SDL2No artigo anterior, criamos a estrutura basica para comecar a escrever nosso game e vamos utiliza-la agora. Caso voce ainda nao tenha configurado seu ambiente, siga as instrucoes citadas na Parte 0 e, antes de prosseguir, baixe o projeto, descompacte, e abra abara-o no Lazarus.A inicializacao do SDL pode falhar por diversos motivos. Pode nao haver memoria suficiente para que a biblioteca seja carregada, a dll pode nao ser encontrada ou estar em um formato invalido para o programa (um programa compilado em 32bits tentando carregar uma biblioteca de 64bits, por exemplo).O tratamento de erro no SDL e realizado atraves de codigos de retorno. Cada funcao, pode retornar um codigo de erro especifico ou 0 se nao houve erro algum durante a sua execucao. Isto pode parecer um tanto exotico para quem esta acostumado ao modo como o codigo em pascal geralmente e escrito (heranca dos tempos da Borland/Inprise), entao vamos mapear estes codigos de erro para excecoes customizadas e vamos encapsular todas as chamadas a biblioteca em uma classe chamada Game.Adicione uma nova unit ao projeto e chame-a de sdlGame.pas. Nela, vamos implementar a classe TGame conforme a definicao abaixo.unit sdlGame;{$mode objfpc}{$H+}interfaceuses sysutils, SDL2;type SDLException = class(Exception); TGame = class private fRunning : boolean; fWindow : PSDL_Window; fRenderer : PSDL_Renderer; procedure Quit; procedure HandleEvents; procedure Render; public constructor Create; destructor Destroy; override; procedure Initialize; procedure Run; property Running: boolean read fRunning; end; Note que nos campos privados, temos dois ponteiros bem interessantes, um para a janela do game (fWindow) e outro para o renderizador (fRenderer).O SDL pode trabalhar com varias janelas (em varios monitores, inclusive) mas, para nosso game, teremos somente uma acessivel atraves deste ponteiro. Alem da janela, precisamos de um renderizador para poder trabalhar com a biblioteca. O papel do renderizador e pegar os buffers de memoria com dados de imagens, camadas, etc. e passa-los para a placa de video, para que esta possa exibir o resultado na tela (em fWindow, no nosso caso).Alem destes ponteiros, temos um flag (fRunning) que utilizaremos para controlar mais tarde para controlar o estado da instancia de TGame.Para iniciar os subsistemas que utilizaremos do SDL, vamos implementar o metodo Initialize.procedure TGame.Initialize;begin if ( SDL_Init(