270 likes | 404 Views
Visão Geral e Introdução à Biblioteca Allegro para Programação de Jogos. Autor: Pedro Demasi E-mail: demasi@ufrj.br. Instalando o Allegro. http:// www.talula.demon.co.uk/allegro/ (há link para um mirror em Português). Criar um diretório (c:djgppallegro) e descompactar (matendo estrutura).
E N D
Visão Geral e Introdução à Biblioteca Allegro para Programação de Jogos Autor: Pedro Demasi E-mail: demasi@ufrj.br
Instalando o Allegro • http://www.talula.demon.co.uk/allegro/ (há link para um mirror em Português). • Criar um diretório (c:\djgpp\allegro) e descompactar (matendo estrutura). • Rodar o make (pode demorar bastante). • Verificar se c:\djgpp\allegro\allegro.h está também em c:\djgpp\include e se c:\djgpp\allegro\lib\djgpp\liballeg.a está em c:\djgpp\lib (se não estiverem, copiar manualmente).
Passos Básicos • Todo programa deve ser compilado com a opção -lalleg. • Exemplo: gcc prog.c -o prog.exe -lalleg • Incluir diretiva #include <allegro.h>, sempre depois de todos os includes das bibliotecas padrão (stdlib, stdio etc.) • No RHIDE: menu Options/Libraries, escrever alleg no primeiro espaço vazio e selecionar a caixa ao lado.
Configurações Iniciais • Deve sempre aparecer uma chamada à função allegro_init() o mais perto possível do início do programa. • Da mesma forma devem ser chamadas, a seguir, as funções install_keyboard(), install_mouse() e install_timer(). Nota: as funções normais do C para teclado não irão mais funcionar. • A função allegro_exit() deve ser chamada no final do programa.
Configurando o Som • Iniciando usando a função install_sound: if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) { /* Mensagem de Erro */ } • Acertando o volume usando a função set_volume: set_volume(255,255); /* som digital e música; 0 a 255 */
Configurando o Modo Gráfico • Iniciando usando a função set_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 resolução a ser usada. Neste exemplo, 640x480.
Configurando o Modo Gráfico • Definindo o número de cores usando a função set_color_depth: set_color_depth(8); /* 256 cores */ set_color_depth(16); /* 65536 cores */ set_color_depth(24); /* 32 milhões de cores */ set_color_depth(32); /* 4 bilhões de cores */ • O número indica a quantidade de bits. • A chamada a essa função deve ser feita antes da chamada à função set_gfx_mode. • O default é 8 (ou seja, 256 cores).
Esqueleto de Programa #include <stdlib.h> #include <allegro.h> #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!\n"); 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!\n"); return(FALSE); } return(TRUE); } void main(void) { if (!inicia()) exit(-1); /* continua o programa */ allegro_exit(); }
Usando o Som • Som digital: WAV ou VOC. Música: MID. • Antes de se tocar um som digital ou música deve-se carregá-los da seguinte forma: /* declaração das variáveis que guardarão sons e músicas */ SAMPLE *som1,*som2; /* SAMPLE = arquivos de som digital */ MIDI *musica; /* MIDI = arquivos de música */ /* carrega os arquivos usando-se as respectivas funções */ 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 não encontrado.
Usando o Som • Para tocar uma música usa-se a função play_midi. O primeiro parâmetro é o arquivo MIDI carregado, o segundo indica se ele tocará em loop ou não. /* Exemplo para tocar um arquivo MIDI */ MIDI *musica; /* declaração da variável a ser usada */ musica = load_midi(“musica.mid”); /* carrega arquivo */ play_midi(musica,TRUE); /* toca a música em loop */ • Para parar de tocar uma música usa-se a função stop_mid().
Usando o Som • Para tocar um som digital usa-se a função play_sample. Os cinco parâmetros indicam: arquivo carregado, volume (0 a 255), equilíbrio entre as caixas (0 a 255, 128 é meio a meio), freqüência (1000 usa a freqüência original, 500 usa a metade da freqüência original etc.) e se vai ser tocado em loop (função stop_sample() pára de tocar). /* Exemplo para tocar um arquivo de som WAV */ SAMPLE *som; /* declaração da variável a ser usada */ som = load_wav(“som.wav”); /* carrega arquivo */ play_midi(musica,255,128,1000,FALSE); /* toca som */
Usando o Teclado • A função clear_keybuf() esvazia o buffer de teclado. • A função keypressed() retorna FALSE se o buffer de teclado estiver vazio (ou seja, nenhuma tecla pressionada) e TRUE caso contrário. Equivale à função kbhit() da biblioteca conio.h. • O vetor key[] contém o estado das teclas (TRUE se pressionadas).
Usando o Teclado • O vetor key[] vai de 0 a 127. Mas existem constantes definidas para auxiliar a verificar a tecla desejada no formato KEY_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();
Usando o Teclado • A função readkey() retorna a próxima tecla do buffer de teclado ou, se este estiver vazio, espera que uma seja pressionada e a retorna. • 2 bytes, o primeiro contém o scan code, o segundo contém o código ASCII. • Para se obter apenas o código ASCII: /* equivalente a ch = getch(); usando conio.h */ ch = readkey() & 0xFF;
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);
Usando o Vídeo - 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 vídeo, inclusive, é considerado um (declarado como BITMAP *screen);
Usando o Vídeo - Primitivas • A função clear_to_color colore um bitmap completamente com a cor especificada. • A função putpixel desenha um ponto num bitmap na posição 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.
Usando o Vídeo - Texto • Função text_mode indica qual cor vai ser usada como fundo da fonte. Se o valor for negativo, o fundo passa a ser transparente. • Função textout imprime uma string. Seus parâmetros são o bitmap destino, a fonte a ser usada, a posição (x,y) e a cor da fonte. • Fonte padrão: fonte (declarada FONT *font). • Exemplo: text_mode(-1); textout(screen,font,”Testando texto...”,200,200,0);
Usando o Vídeo - Paleta • Paleta só se usa nos modos de cores de 8 bits (256 cores). • A paleta é uma matriz de 256 posições. Cada posição representa uma cor. Cada posição 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 posição x.
Usando o Vídeo - Imagens • Formatos de imagem: PCX e BMP. • Antes de se mostrar uma imagem deve-se carregá-la da seguinte forma: /* declaração das variáveis que guardarão imagens */ BITMAP *img1,*img2; /* arquivos de BITMAP */ PALETTE pal1,pal2; /* paletas */ /* carrega os arquivos usando-se as respectivas funções */ img1 = load_pcx(“img.pcx”,pal1); /* para arquivos pcx */ img2 = load_bmp(“img.bmp”,pal2); /* para arquivos bmp */ • Ponteiro nulo -> arquivo não encontrado.
Usando o Vídeo - Imagens • Para usar a paleta lida do arquivo como a atual, basta usar a função set_palette, passando a paleta lida como parâmetro. • Depois de carregada, a imagem pode ser mostrada usando-se a função draw_sprite. Seus parâmetros são: bitmap destino, bitmap da imagem posição (x,y). BITMAP *img; PALETTE pal; img = load_pcx(“img.pcx”,pal); set_palette(pal); draw_sprite(screen,img,100,100);
Usando o Vídeo - Imagens • A função draw_sprite desenha usando a cor 0 como transparente (no modo 8 bits) ou rosa claro nos outros modos. • A função blit é parecida com a draw_sprite, a diferença (prática) é que ela não usa cor de transparência e, por isso, desenha a imagem carregada exatamente como ela é. • Parâmetros: imagem fonte, bitmap destino, posição (x,y) da fonte, posição (x,y) do destino, largura e altura.
Usando o Vídeo - Animação • Usar toda hora o screen traz problemas. • Doubble Buffering (Buffer Duplo): desenha-se sempre num buffer secundário na memória. No fim de cada iteração da animação, copia-se tudo para a tela. • Declarando, alocando e destruindo um buffer de bitmap num programa: BITMAP *tela; /* declaração da variável */ tela = create_bitmap(MAX_X,MAX_Y); /* alocando espaço */ destroy_bitmap(tela); /* destruindo, no fim do programa */
Usando o Mouse • Usa-se a função show_mouse para que o cursor do mouse seja mostrado no bitmap especificado. Passando NULL como parâmetro esconde o cursor do mouse. • Deve-se ter cuidado ao desenhar algo na tela pois o cursor do mouse pode passar por cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer coisa. show_mouse(screen); /* mostra o mouse na tela */ show_mouse(NULL); /* esconde o mouse */
Usando o Mouse • As variáveis mouse_x e mouse_y contêm a posição do cursor do mouse na tela. • A variável mouse_b contém o estado dos botões. • (mouse_b & 1) é verdadeiro se o botão esquerdo estiver pressionado. • (mouse_b & 2) é verdadeiro se o botão direito estiver pressionado.
Tópicos Adicionais & Avançados • Outras funções sobre os tópicos abordados. • Timers (temporizadores). • Data Files (arquivos de dados). • Joystick. • Arquivos de configuração. • Funções Gráficas 3D.
Como Obter Mais Ajuda • Arquivos de documentação do Allegro, principalmente faq.txt e allegro.txt. • Links na própria página do Allegro. • Demo do Allegro (\allegro\demo). • Exemplos do Allegro (\allegro\examples). • Newsgroups e listas de discussão. • Vários programas já desenvolvidos usando o Allegro fornecidos com o código fonte.