Biblioteca Allegro

  • View
    3.269

  • Download
    3

Embed Size (px)

Text of Biblioteca Allegro

  • 1. Viso Geral e Introduo Biblioteca Allegro para Programao de Jogos Autor: Pedro Demasi E-mail: demasi@ufrj.br

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.
  • Exemplos:

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 ).
  • Exemplo:

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