Sie sind auf Seite 1von 7

Introdu

Introduo biblioteca
Allegro

Material originalmente preparado por


Tiago Alves Macambira

Introdu
Introduo

Onde obter a allegro:


http://alleg.sf.net
Onde obter a allegro para o Dev-C++
http://www.devpaks.org
E onde obter o original deste tutorial?
http://www.loomsoft.net/resources/alltut/alltut_index.htm

Programao/Anlise Orientada a Objetos Biblioteca Allegro 2

Iniciando

Antes de poder usar qualquer coisa da Allegro, voc deve


inici-la:
allegro_init()
O allegro possui suporte a vrios dispositivos, tais como,
mouse, som, grficos, joystick
O suporte a cada um desses despositivos deve ser instalado
install_<dispositivo>

Programao/Anlise Orientada a Objetos Biblioteca Allegro 3

1
Iniciando

Vamos ao cdigo:
#include <allegro.h>

int main(int argc, char* argv[])


{
allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
readkey(); // Espera tecla ser pressionada...
return(0); // sai...
}
END_OF_MAIN(); // Obrigatorio para o allegro

Programao/Anlise Orientada a Objetos Biblioteca Allegro 4

Gr
Grficos (ou o que importa a aparncia
aparncia)

Boa parte do seu trabalho ser desenhar imagens (.bmp),


bitmaps ou sprites
Voc pode utilizar as funes de desenho de figuras geomtricas
bsicas para fazer tudo.
A escolha sua.
Profundidade de cores
Para colocar imagens na tela deve-se antes especificar a
profundidade de cores da tela (color depth): 8, 15, 16, 24, 32 bits
Voc deve informar a profundidade de cores antes de iniciar a
prpria tela

Programao/Anlise Orientada a Objetos Biblioteca Allegro 5

Gr
Grficos (ou o que importa a aparncia
aparncia)

Imagens
Declarao:
BITMAP* imagem; // bitmap ou sprite
Bitmap pr-definido para a tela: screen
Carga:
imagem = load_bitmap(bola.bmp,palheta_de_cores);
Pode-se omitir a palheta de cores passando-se NULL em seu lugar
A cor RGB (255,0,255) a cor transparente no allegro
Se a imagem no estiver acessvel retorna NULL
if ((imagem=load_bitmap(bola.bmp,NULL))==NULL){
fprintf(stderr,Erro ao carregar bola.bmp\n);
exit(-1);
}
Existe uma forma de se inserir os bitmaps no executvel
(avanado)
Programao/Anlise Orientada a Objetos Biblioteca Allegro 6

2
Gr
Grficos (ou o que importa a aparncia
aparncia)

Desenhando Imagens
Importante: antes de iniciar o processo de desenho de vrias
imagens adquira a posse da tela e depois libere-a:
acquire_screen()
release_screen()
Use a funo blit para desenhar coisas na tela:
draw_sprite( onde, o que, posio x , posio y )
Liberando memria:
Quando no forem mais ser usadas, destrua as imagens com
destroy_bitmap()

Programao/Anlise Orientada a Objetos Biblioteca Allegro 7

Gr
Grficos (ou o que importa a aparncia
aparncia)
int main(int argc, char* argv[])
{
BITMAP* imagem;

allegro_init();
install_keyboard();
set_color_depth(16);
set_gfx_mode(GFX_AUTODETECT_WINDOWED,800,600,0,0);
imagem = load_bitmap("bola.bmp",NULL);
acquire_screen();
draw_sprite(screen, imagem, 0, 0 );
release_screen();
readkey();
destroy_bitmap(imagem); // Acabou o uso da imagem
return(0);
}
END_OF_MAIN();

Programao/Anlise Orientada a Objetos Biblioteca Allegro 8

Transparncias

Quando desenhamos elementos de um tabuleiro, por ex.,


queremos que eles casem com o fundo (background)
A cor RGB (255,0,255) a cor transparente no allegro
Podemos desenhar imagens com transparncia usando:
masked_blit(o que, onde, ...)
draw_sprite(onde, o que, x, y)

Programao/Anlise Orientada a Objetos Biblioteca Allegro 9

3
Movendo coisas na tela

Vrivel global int key[]


permite ver quais teclas esto pressionadas.
constantes definidas para identificar cada tecla

void processa_teclado(int* x, int* y){


if (key[KEY_UP]){
*y = *y - 1;
} else if (key[KEY_DOWN]){
*y = *y + 1;
} else if (key[KEY_RIGHT]){
*x = *x + 1;
} else if (key[KEY_LEFT]){
*x = *x - 1;
}
}

Programao/Anlise Orientada a Objetos Biblioteca Allegro 10

Movendo coisas na tela


int main(int argc, char* argv[])
{
int x = 0;
int y = 0;
...
imagem = load_bitmap("bola.bmp",NULL);
while(! key[KEY_ESC]){
processa_teclado(&x,&y);
acquire_screen();
draw_sprite(screen,imagem,x,y);
release_screen();
clear_bitmap(screen);
}
destroy_bitmap(imagem);
return(0);
}
END_OF_MAIN();

Programao/Anlise Orientada a Objetos Biblioteca Allegro 11

Outros recursos avan


avanados

Escrita de texto em modo grfico:


Diversas funes: textout_*, textprintf_*, etc.
Controle de tempo
Extremamente importante em jogos
Pausa por tempo definido:
rest(miliseconds); // programa espera o tempo indicado
Temporizao peridica pode ser usada para jogos com animao
Rotina acionada periodicamente altera uma varivel para marcar o
tempo
Loop principal testa varivel a cada iterao
Sincronizao com a varredura da tela
vsync();
Tcnicas diversas para controlar o tempo decorrido de forma
estvel
Sons: MIDI e streams de udio
Programao/Anlise Orientada a Objetos Biblioteca Allegro 12

4
Mundo Perigoso
tecle <esc> para sair

Programao/Anlise Orientada a Objetos Biblioteca Allegro 13

Exemplo

#include <stdio.h>
#include <stdlib.h>
#include <allegro.h>

using namespace std;


#define MAX_X 800
#define MAX_Y 600
#define V_MAX_X 0
#define V_MAX_Y 0
#define COLOR_BITS 8

#define PASSO 2

Programao/Anlise Orientada a Objetos Biblioteca Allegro 14

int inicia(void);
void principal(void);
void finaliza(void);

int main (void)


{
if (!inicia())
{
finaliza();
return -1;
}

principal();

finaliza();
return 0;
}
END_OF_MAIN();

Programao/Anlise Orientada a Objetos Biblioteca Allegro 15

5
int inicia (void)
{
allegro_init();

install_keyboard();

set_color_depth(COLOR_BITS);
if (set_gfx_mode(GFX_AUTODETECT, MAX_X,
MAX_Y, V_MAX_X, V_MAX_Y) < 0)
{
printf( "Erro ao inicializar o modo grafico.\n " );
return (FALSE);
}

return (TRUE);
}

Programao/Anlise Orientada a Objetos Biblioteca Allegro 16

void principal (void)


{
int x;
BITMAP *tela;
BITMAP *nave;
PALETTE pal;
nave = load_bitmap( "nave.bmp", pal);
x = (MAX_X - nave->w) / 2;

tela = create_bitmap(MAX_X, MAX_Y);

set_palette(black_palette);

clear(tela);
draw_sprite(tela, nave, x, 4 * MAX_Y / 5);
blit(tela, screen, 0, 0, 0, 0, MAX_X, MAX_Y);
fade_in(pal, 4);
Programao/Anlise Orientada a Objetos Biblioteca Allegro 17

while (!key[KEY_ESC])
{
clear(tela);
textout_ex(tela,font, "Mundo perigoso" , 1,1,10,0);
textout_ex(tela,font, "Press esc to quit" ,1,12,11,0);
draw_sprite(tela, nave, x, 4 * MAX_Y / 5);
blit(tela, screen, 0, 0, 0, 0, MAX_X, MAX_Y);
if ((key[KEY_LEFT]) && (!key[KEY_RIGHT]))
{
x -= PASSO;
}
if ((key[KEY_RIGHT]) && (!key[KEY_LEFT]))
{
x += PASSO;
}
}
fade_out(4);
}
Programao/Anlise Orientada a Objetos Biblioteca Allegro 18

6
void finaliza (void)
{
allegro_exit();
}

Programao/Anlise Orientada a Objetos Biblioteca Allegro 19

Exercicio

1) Procure no sitio www.dcc.ufmg.br pelos arquivos nave.cpp e nave.bmp e


monte o projeto para testar o programa mostrado.

2) Acrescente ao programa as modificaes necessrias para que o


usurio possa mover a no somente para a esquerda e direita, mas para
e para baixo.

3)Observe que o programa no usa o paradgma de Orientao a Objetos.


Reescreva o programa utilizado os conceitos de OO. Sugesto: utilize
apenas 2 objetos: espao ( onde a nave se movimenta) e a nave.

Programao/Anlise Orientada a Objetos Biblioteca Allegro 20

Das könnte Ihnen auch gefallen