6.1. DEFINIÇÃO DO CORPO DO JOGO

 

A base do jogo consistirá de apenas uma classe denominada Fireball. A seguir é demonstrado o código dessa classe.

 

1     #include <ClanLib/core.h>

2     #include <ClanLib/display.h>

3     #include <ClanLib/gl.h>

4     #include <ClanLib/application.h>

 

5     class Fireball: public CL_ClanApplication  {

6     public:

7           Fireball(){};

8           ~Fireball(){};

9           int coordX, coordY;

10          void procTecl(const CL_InputEvent &);

 

11    virtual int main(int, char **){

12          CL_ConsoleWindow console("Fireball Console");

13          console.redirect_stdio();

14          try {

15                CL_SetupCore::init();

16                CL_SetupDisplay::init();

17                CL_SetupGL::init();

18                CL_DisplayWindow window("Jogo", 500, 450);

19                CL_Slot teclaPres =

20                CL_Keyboard::sig_key_down().connect(this,

21                &Fireball::procTecl);

 

22                //Loop do Jogo

 

23                CL_SetupGL::deinit();

24                CL_SetupDisplay::deinit();

25                CL_SetupCore::deinit(); }

 

26          catch (CL_Error err) {

27                std::cout<<"Erro:"<<err.message.c_str();

28                console.display_close_message();}

29                return 0;}

30    } game;

 

31    //Implementação da função procTecl}

 

O código anterior é a base para o jogo, pois deriva a classe Fireball (linha 5), redefine a função main (linha 11) e já cria uma instância da classe (linha 30). As diretivas #include (linhas 1 a 4), incluem os quatro arquivos de cabeçalho obrigatórios em qualquer aplicação ClanLib.

Verifica-se que tanto o construtor quanto o destruidor não possuem código (linhas 7 e 8), pois o objetivo deste tutorial é apenas demonstrar as funções da ClanLib e dessa forma, para diminuir a quantidade de código, não serão utilizadas as facilidades da orientação a objetos.

O código int coordX, coordY (linha 9) será usado na Seção 6.3 para desenho dos gráficos. Da mesma forma, a função procTecl (linha 10) e o código CL_Slot teclaPres... (linhas 19 a 21), responsáveis pela captura e processamento de eventos, serão demonstrados na Seção 6.4.

Nota-se também a criação do objeto console, da classe CL_ConsoleWindow (linha 12), que será usado para exibir mensagens de erro que ocorram na aplicação.

Como a chamada de funções da ClanLib pode gerar exceções, as mesmas devem ser colocadas dentro de um bloco try/catch (linha 14). Dentro desse bloco estão as chamadas de funções para inicialização das classes principais da biblioteca (linhas 15 a 17).

O comentário //Loop do Jogo (linha 22) deverá ser substituído pelo código na próxima seção.

Finalmente observam-se as chamadas a funções de finalização das classes (linhas 23 a 25). É importante salientar que a inicialização da classe CL_SetupCore deve ser a primeira da lista e sua finalização deve ser a última.