Conheça a iniciativa da Biblioteca dos Desenvolvedores  
Índice da Biblioteca  
Área dos Usuários  
Fórum de Discussão  
Forúm
 
 

Respostas dos Exercícios

- Usando o programa exemplo de movimentação ( Movendo um objeto na tela ), faça um circulo se mover pela tela.


CÓDIGO...

// Movendo um objeto nas coordenadas x e y
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(16);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
   
   
   // inicio da programação atual
   int x = 0;
   int y = 0;
   
   // dimensao do circulo
   // variáveis constantes nunca mudam durante a execução do programa
   const int tamanho = 50;
   
   
   // Laço principal
   while( !key[KEY_ESC] )
   {
      if ( key[KEY_UP] )
      {
         y--;
      }
      
      if ( key[KEY_DOWN] )
      {
         y++;
      }
      
      if ( key[KEY_LEFT] )
      {
         x--;
      }
      
      if ( key[KEY_RIGHT] )
      {
         x++;
      }
      
      // esta função limpa a tela ou um objeto que tem buffer no allegro
      clear( screen );      

      circlefill( screen, x, y, tamanho, makecol(255, 50, 50) );
      
      // imprimimos as coordenadas x e y na tela para o usuário ver
      textprintf_ex( screen, font, 10, 10, makecol(255,0,0), -1, "Variavel X: %d", x);
      textprintf_ex( screen, font, 10, 20, makecol(255,0,0), -1, "Variavel Y: %d", y);
      
      // essa função faz o allegro esperar um pouco antes de voltar para o while
      rest(10);
   }
   
   
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO...

 

 

- Usando o programa exemplo de movimentação, faça o objeto se mover pela tela de forma que o programa vá aumentando a velocidade do objeto.
Ele deve começar a se mover bem lento e ir ficando cada vez mais rapido.

Para resolver o exercício, criamos uma variável que controla a velocidade.. e criamos também duas outras para verificar a troca de botão.
Caso o usuário aperte um botão diferente, a velocidade é diminuida para 0;

Para ter a sensação de velocidade, também aumentamos o valor do rest.


CÓDIGO...
// Movendo um objeto nas coordenadas x e y
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(16);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
   
   
   // inicio da programação atual
   int x = 0;
   int y = 0;
   
   // variáveis constantes nunca mudam durante a execução do programa
   const int tamanho = 30;
   
   int velocidade = 0;
   
   // esta é uma variável flag, que indica qual o ultimo botao apertado
   int ultimo_botao = 0;
   int botao_atual = 0;
   
   
   // Laço principal
   while( !key[KEY_ESC] )
   {
      if ( key[KEY_UP] )
      {
         y = y - velocidade;
         velocidade++;
         ultimo_botao = 1;
      }
      
      if ( key[KEY_DOWN] )
      {
         y = y + velocidade;
         velocidade++;
         ultimo_botao = 2;
      }
      
      if ( key[KEY_LEFT] )
      {
         x = x - velocidade;
         velocidade++;
         ultimo_botao = 3;
      }
      
      if ( key[KEY_RIGHT] )
      {
         x = x + velocidade;
         velocidade++;
         ultimo_botao = 4;
      }
      
      if ( botao_atual != ultimo_botao )
      {
         botao_atual = ultimo_botao;
         velocidade = 0;
      }
      
      // esta função limpa a tela ou um objeto que tem buffer no allegro
      clear( screen );
      
      
      circlefill( screen, x, y, tamanho, makecol(255, 50, 50) );
      
      // imprimimos as coordenadas x e y na tela para o usuário ver
      textprintf_ex( screen, font, 10, 10, makecol(255,0,0), -1, "Variavel X: %d", x);
      textprintf_ex( screen, font, 10, 20, makecol(255,0,0), -1, "Variavel Y: %d", y);
      
      // essa função faz o allegro esperar um pouco antes de voltar para o while
      rest(50);
   }
   
   
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO...

 

 

 

- Crie uma tela com 10 quadrados de cores diferentes usando um laço for.


CÓDIGO...
// Criando 10 quadrados com cores diferentes entre si
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(16);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
   
   
   // inicio da programação atual
   int x = 1;
   int y = 1;
   
   // dimensao dos quadrados
   // variáveis constantes nunca mudam durante a execução do programa
   const int tamanho = 30;
   
   for ( int i=0; i<10; i++ )
   {
      x = x + ( i + tamanho );
      rectfill( screen, x, y, x+tamanho, y+tamanho, makecol(i*25, i*25, 0) );
   }
   
   
   // Laço principal
   while( !key[KEY_ESC] )
   {
   
   }
   
   
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO...

 

- Crie uma tela com 10 circulos de cores diferentes usando um laço for.
Sendo que um deve estar dentro do outro, de forma que o último circulo desenhado seja o menor dos circulos.


CÓDIGO...
// Movendo um objeto nas coordenadas x e y
#include <allegro.h>

int main()
{
   allegro_init();
   set_color_depth(16);
   install_keyboard();
   set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
   
   
   // inicio da programação atual
   int cores[10] = { 50, 200, 130, 80, 140, 240, 30, 100, 222, 111 };
   
   // bem no meio da tela
   int x = SCREEN_W/2;
   int y = SCREEN_H/2;
   
   // O tamanho será o raio, e este precisa ser alteravel
   int tamanho = 30;
   
   // o for ainda irá fazer 10 circulos
   int i = 10;
   
   for ( i=11; i>1; i-- )
   {
      tamanho = ( ( tamanho + i ) / 2) ;
      circlefill( screen, x, y, tamanho * 5, makecol( cores[i], cores[i], cores[i]) );
   }
   
   
   
   
   // Laço principal
   while( !key[KEY_ESC] )
   {
   
   }
   
   
   allegro_exit();
   return 0;
}
END_OF_MAIN();


FIM DE CÓDIGO...


Contribuidor
Adriano Waltrick
10/07/2007


 

« Anterior

 

Próximo »

 
 

01/06/2007 (C) Copyright. Todos os Direitos Reservados. Leia a política de privacidade do portal.
É proibida a cópia de conteúdo deste site de acordo com a Lei Brasileira de Direitos Autorais.