- 1. Viso Geral e Introduo Biblioteca Allegro para Programao de Jogos Autor: Pedro Demasi E-mail: [email protected]
2. Instalando o Allegro
- http://www.talula.demon.co.uk/allegro/ (h link para um mirror em Portugus).
- Criar um diretrio (c:djgppallegro) e descompactar (matendo estrutura).
- Rodar o make (pode demorar bastante).
- Verificar se c:djgppallegroallegro.h est tambm em c:djgppinclude e sec:djgppallegrolibdjgppliballeg.a est em c:djgpplib (se no estiverem, copiar manualmente).
3. Passos Bsicos
- Todo programa deve ser compilado com a opo -lalleg.
- Exemplo: gcc prog.c -o prog.exe -lalleg
- Incluir diretiva#include , sempredepoisde todos os includes das bibliotecas padro (stdlib, stdio etc.)
- No RHIDE: menu Options/Libraries, escreverallegno primeiro espao vazio e selecionar a caixa ao lado.
4. Configuraes Iniciais
- Deve sempre aparecer uma chamada funoallegro_init()o mais perto possvel do incio do programa.
- Da mesma forma devem ser chamadas, a seguir, as funesinstall_keyboard() ,install_mouse()einstall_timer() . Nota: as funes normais do C para teclado no iro mais funcionar.
- A funoallegro_exit()deve ser chamada no final do programa.
5. Configurando o Som
- Iniciando usando a funoinstall_sound :
if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) { /* Mensagem de Erro */ }
- Acertando o volume usando a funoset_volume :
set_volume(255,255); /* som digital e msica; 0 a 255 */ 6. Configurando o Modo Grfico
- Iniciando usando a funoset_gfx_mode :
#define MAX_X 640 #define MAX_Y 480 (...) if(set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0) { /* Mensagem de Erro */ }
- MAX_X e MAX_Y indicam a resoluo a ser usada. Neste exemplo, 640x480.
7. Configurando o Modo Grfico
- Definindo o nmero de cores usando a funoset_color_depth :
set_color_depth(8);/* 256 cores */ set_color_depth(16); /* 65536 cores */ set_color_depth(24); /* 32 milhes de cores */ set_color_depth(32); /* 4 bilhes de cores */
- O nmero indica a quantidade de bits.
- A chamada a essa funo deve ser feitaantesda chamada funoset_gfx_mode .
- O default 8 (ou seja, 256 cores).
8. Esqueleto de Programa #include #include #define MAX_X 640 #define MAX_Y 480 int inicia(void) { allegro_init(); install_keyboard(); install_mouse(); install_timer(); if (install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) { printf("Erro ao tentar iniciar placa de som! "); return(FALSE); } set_volume(255,255); set_color_depth(8); if (set_gfx_mode(GFX_AUTODETECT,MAX_X,MAX_Y,0,0) < 0) { printf("Erro ao tentar iniciar modo de video! "); return(FALSE); } return(TRUE); } void main(void) { if (!inicia()) exit(-1); /* continua o programa */ allegro_exit(); } 9. Usando o Som
- Som digital: WAV ou VOC. Msica: MID.
- Antes de se tocar um som digital ou msica deve-se carreg-los da seguinte forma:
/* declarao das variveis que guardaro sons e msicas */ SAMPLE *som1,*som2;/* SAMPLE = arquivos de som digital */ MIDI *musica;/* MIDI = arquivos de msica */ /* carrega os arquivos usando-se as respectivas funes */ som1 = load_wav(arquivo.wav);/* para arquivos wav */ som2 = load_voc(arquivo.voc);/* para arquivos voc */ musica = load_midi(arquivo.mid); /* para arquivos mid */
- Ponteiro nulo -> arquivo no encontrado.
10. Usando o Som
- Para tocar uma msica usa-se a funoplay_midi . O primeiro parmetro o arquivo MIDI carregado, o segundo indica se ele tocar em loop ou no.
/* Exemplo para tocar um arquivo MIDI */ MIDI *musica; /* declarao da varivel a ser usada */ musica = load_midi(musica.mid); /* carrega arquivo */ play_midi(musica,TRUE); /* toca a msica em loop */
- Para parar de tocar uma msica usa-se a funostop_mid() .
11. Usando o Som
- Para tocar um som digital usa-se a funoplay_sample . Os cinco parmetros indicam: arquivo carregado, volume (0 a 255), equilbrio entre as caixas (0 a 255, 128 meio a meio), freqncia (1000 usa a freqncia original, 500 usa a metade da freqncia original etc.) e se vai ser tocado em loop (funostop_sample()pra de tocar).
/* Exemplo para tocar um arquivo de som WAV */ SAMPLE *som; /* declarao da varivel a ser usada */ som = load_wav(som.wav); /* carrega arquivo */ play_midi(musica,255,128,1000,FALSE); /* toca som */ 12. Usando o Teclado
- A funoclear_keybuf()esvazia o buffer de teclado.
- A funokeypressed()retorna FALSE se o buffer de teclado estiver vazio (ou seja, nenhuma tecla pressionada) e TRUE caso contrrio. Equivale funokbhit()da bibliotecaconio.h .
- O vetorkey[]contm o estado das teclas (TRUE se pressionadas).
13. Usando o Teclado
- O vetorkey[]vai de 0 a 127. Mas existem constantes definidas para auxiliar a verificar a tecla desejada no formatoKEY_TECLA .
- Exemplos: key[KEY_ENTER], key[KEY_A], key[KEY_LEFT], key[KEY_ESC], key[KEY_P], key[KEY_B], key[KEY_SPACE] etc.
- Exemplo: abortando um programa se a tecla ESC for pressionada:
if (key[KEY_ESC]) allegro_exit(); 14. Usando o Teclado
- A funoreadkey()retorna a prxima tecla do buffer de teclado ou, se este estiver vazio, espera que uma seja pressionada e a retorna.
- 2 bytes, o primeiro contm o scan code, o segundo contm o cdigo ASCII.
- Para se obter apenas o cdigo ASCII:
/* equivalente ach = getch();usando conio.h */ ch = readkey() & 0xFF; 15. Usando o Teclado
- Exemplos de uso de teclado:
/* Esvazia o buffer */ clear_keybuf(); /* fica em loop at que uma tecla seja pressionada */ while (!keypressed()); /* fica em loop at a tecla ENTER ser pressionada */ while (!key[KEY_ENTER]); /* aguarda uma tecla e verifica se foi s */ tecla = readkey() & 0xFF; if (tecla == S || tecla == s) exit(0); 16. Usando o Vdeo - Bitmaps
- Um bitmap nada mais do que uma matriz de pontos, em que cada valor indica uma cor.
- Esses valores podem indicar a cor em si ou uma entrada numa outra matriz de cores (no caso, por exemplo, dos modos em 8 bits).
- O desenho no Allegro sempre feito em bitmaps. O vdeo, inclusive, considerado um (declarado comoBITMAP *screen );
17. Usando o Vdeo - Primitivas
- A funoclear_to_colorcolore um bitmap completamente com a cor especificada.
- A funoputpixeldesenha um ponto num bitmap na posio e com a cor especificadas.
clear_to_color(screen,4);/* cor 4, em geral, vermelho */ putpixel(screen,234,123,0); /* cor 0, em geral, preto */
- Outras primitivas:vline ,hline ,line ,triangle ,rect ,rectfill ,circle ,circlefill .
18. Usando o Vdeo - Texto
- Funotext_modeindica qual cor vai ser usada como fundo da fonte. Se o valor for negativo, o fundo passa a ser transparente.
- Funotextoutimprime uma string. Seus parmetros so o bitmap destino, a fonte a ser usada, a posio (x,y) e a cor da fonte.
- Fonte padro:fonte(declaradaFONT *font ).
text_mode(-1); textout(screen,font,Testando texto...,200,200,0); 19. Usando o Vdeo - Paleta
- Paleta s se usa nos modos de cores de 8 bits (256 cores).
- A paleta uma matriz de 256 posies. Cada posio representa uma cor. Cada posio possui 3 bytes, cada um indicando a quantidade de vermelho, verde e azul daquela cor.
- Cor x indica que a cor a ser usada a que est na paleta na posio x.
20. Usando o Vdeo - Imagens
- Formatos de imagem: PCX e BMP.
- Antes de se mostrar uma imagem deve-se carreg-la da seguinte forma:
/* declarao das variveis que guardaro imagens */ BITMAP *img1,*img2;/* arquivos de BITMAP */ PALETTE pal1,pal2;/* paletas */ /* carrega os arquivos usando-se as respectivas funes */ img1 = load_pcx(img.pcx,pal1);/* para arquivos pcx */ img2 = load_bmp(img.bmp,pal2);/* para arquivos bmp */
- Ponteiro nulo -> arquivo no encontrado.
21. Usando o Vdeo - Imagens
- Para usar a paleta lida do arquivo como a atual, basta usar a funoset_palette , passando a paleta lida como parmetro.
- Depois de carregada, a imagem pode ser mostrada usando-se a funodraw_sprite . Seus parmetros so: bitmap destino, bitmap da imagem posio (x,y).
BITMAP *img; PALETTE pal; img = load_pcx(img.pcx,pal); set_palette(pal); draw_sprite(screen,img,100,100); 22. Usando o Vdeo - Imagens
- A funodraw_spritedesenha usando a cor 0 como transparente (no modo 8 bits) ou rosa claro nos outros modos.
- A funoblit parecida com adraw_sprite , a diferena (prtica) que ela no usa cor de transparncia e, por isso, desenha a imagem carregada exatamente como ela .
- Parmetros: imagem fonte, bitmap destino, posio (x,y) da fonte, posio (x,y) do destino, largura e altura.
23. Usando o Vdeo - Animao
- Usar toda hora oscreentraz problemas.
- Doubble Buffering (Buffer Duplo): desenha-se sempre num buffer secundrio na memria. No fim de cada iterao da animao, copia-se tudo para a tela.
- Declarando, alocando e destruindo um buffer de bitmap num programa:
BITMAP *tela; /* declarao da varivel