Você está na página 1de 27

Viso Geral e Introduo Biblioteca Allegro para Programao 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 Portugus). Criar um diretrio (c:\djgpp\allegro) e descompactar (matendo estrutura). Rodar o make (pode demorar bastante). Verificar se c:\djgpp\allegro\allegro.h est tambm em c:\djgpp\include e se c:\djgpp\allegro\lib\djgpp\liballeg.a est em c:\djgpp\lib (se no estiverem, copiar manualmente).

Passos Bsicos
Todo programa deve ser compilado com a opo -lalleg. Exemplo: gcc prog.c -o prog.exe -lalleg Incluir diretiva #include <allegro.h>, sempre depois de todos os includes das bibliotecas padro (stdlib, stdio etc.) No RHIDE: menu Options/Libraries, escrever alleg no primeiro espao vazio e selecionar a caixa ao lado.

Configuraes Iniciais
Deve sempre aparecer uma chamada funo allegro_init() o mais perto possvel do incio do programa. Da mesma forma devem ser chamadas, a seguir, as funes install_keyboard(), install_mouse() e install_timer(). Nota: as funes normais do C para teclado no iro mais funcionar. A funo allegro_exit() deve ser chamada no final do programa.

Configurando o Som

Iniciando usando a funo install_sound:

if(install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL) < 0) { /* Mensagem de Erro */ }

Acertando o volume usando a funo set_volume:

set_volume(255,255); /* som digital e msica; 0 a 255 */

Configurando o Modo Grfico

Iniciando usando a funo 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 resoluo a ser usada. Neste exemplo, 640x480.

Configurando o Modo Grfico

Definindo o nmero de cores usando a funo set_color_depth:


/* /* /* /* 256 cores */ 65536 cores */ 32 milhes de cores */ 4 bilhes de cores */

set_color_depth(8); set_color_depth(16); set_color_depth(24); set_color_depth(32);

O nmero indica a quantidade de bits. A chamada a essa funo deve ser feita antes da chamada funo 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. 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.

Usando o Som

Para tocar uma msica usa-se a funo play_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 funo stop_mid().

Usando o Som

Para tocar um som digital usa-se a funo play_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 (funo stop_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 */

Usando o Teclado
A funo clear_keybuf() esvazia o buffer de teclado. A funo keypressed() retorna FALSE se o buffer de teclado estiver vazio (ou seja, nenhuma tecla pressionada) e TRUE caso contrrio. Equivale funo kbhit() da biblioteca conio.h. O vetor key[] contm 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 funo readkey() 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 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 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 como BITMAP *screen);

Usando o Vdeo - Primitivas


A funo clear_to_color colore um bitmap completamente com a cor especificada. A funo putpixel desenha 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.

Usando o Vdeo - Texto


Funo text_mode indica qual cor vai ser usada como fundo da fonte. Se o valor for negativo, o fundo passa a ser transparente. Funo textout imprime 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 (declarada FONT *font). Exemplo:

text_mode(-1); textout(screen,font,Testando texto...,200,200,0);

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.

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.

Usando o Vdeo - Imagens


Para usar a paleta lida do arquivo como a atual, basta usar a funo set_palette, passando a paleta lida como parmetro. Depois de carregada, a imagem pode ser mostrada usando-se a funo draw_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);

Usando o Vdeo - Imagens


A funo draw_sprite desenha usando a cor 0 como transparente (no modo 8 bits) ou rosa claro nos outros modos. A funo blit parecida com a draw_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.

Usando o Vdeo - Animao


Usar toda hora o screen traz problemas. Doubble Buffering (Buffer Duplo): desenhase 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 */ tela = create_bitmap(MAX_X,MAX_Y); /* alocando espao */ destroy_bitmap(tela); /* destruindo, no fim do programa */

Usando o Mouse
Usa-se a funo show_mouse para que o cursor do mouse seja mostrado no bitmap especificado. Passando NULL como parmetro 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); show_mouse(NULL); /* mostra o mouse na tela */ /* esconde o mouse */

Usando o Mouse
As variveis mouse_x e mouse_y contm a posio do cursor do mouse na tela. A varivel mouse_b contm o estado dos botes. (mouse_b & 1) verdadeiro se o boto esquerdo estiver pressionado. (mouse_b & 2) verdadeiro se o boto direito estiver pressionado.

Tpicos Adicionais & Avanados


Outras funes sobre os tpicos abordados. Timers (temporizadores). Data Files (arquivos de dados). Joystick. Arquivos de configurao. Funes Grficas 3D.

Como Obter Mais Ajuda


Arquivos de documentao do Allegro, principalmente faq.txt e allegro.txt. Links na prpria pgina do Allegro. Demo do Allegro (\allegro\demo). Exemplos do Allegro (\allegro\examples). Newsgroups e listas de discusso. Vrios programas j desenvolvidos usando o Allegro fornecidos com o cdigo fonte.

Você também pode gostar