Visão Geral e Introdução à
Biblioteca Allegro para
Programação de Jogos
Autor: Pedro Demasi
E-mail: [email protected]
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);
set_color_depth(16);
set_color_depth(24);
set_color_depth(32);
/*
/*
/*
/*
256 cores */
65536 cores */
32 milhões de cores */
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): desenhase 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);
show_mouse(NULL);
/* mostra o mouse na tela */
/* 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.

Download

Biblioteca Allegro em Power Point