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