![Page 1: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/1.jpg)
Ana Queiroga (aicmq)
André Guedes (agl)
Bruno Batista (bamb)
Bruno Lins (bfol)
![Page 2: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/2.jpg)
A Biblioteca Allegro
Biblioteca para construção de jogos e aplicações multimídia em geral
Free Source Voltada mais especialmente para jogos 2D Conhecida pela facilidade de adicionar
entrada de dados via teclado, mouse e joystick
Grande comunidade de desenvolvedores
![Page 3: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/3.jpg)
Características Multi-plataforma
DOS Windows Linux Mac (OS X) BeOS QNX
Primitivas Gráficas Rectas, círculos, elipses Polígonos (sólidos, texturados, transparentes) Texto em modo gráfico Animações
![Page 4: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/4.jpg)
Características (cont.)
Gere mouse, teclado, joystick Suporta arquivos de configuração e de dados
comprimidos Temporizadores
![Page 5: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/5.jpg)
Usando Allegro
Incluir <allegro.h> depois de todos os demais includes
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.
![Page 6: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/6.jpg)
Usando Allegro
A função allegro_exit() deve ser chamada no final do programa.
Colocar a macro END_OF_MAIN() logo após a chave final da rotina main()
Ao compilar, incluir a biblioteca alleg: gcc -o test test.c –lalleg
![Page 7: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/7.jpg)
Especificar Modo Gráfico Especificado antes de começar a desenhar:
int set_gfx_mode (int card, int w, int h, int v_w, int v_h);
Onde: card é usualmente GFX_AUTODETECT, GFX_AUTODETECT_FULLSCREEN ou GFX_AUTODETECT_WINDOWED
w , h largura e altura v_w , v_h largura e altura virtual (normalmente,
0)
![Page 8: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/8.jpg)
Bitmaps são matrizes de pixels, em que cada valor indica uma cor
Desenho se dá sobre estruturas chamadas BITMAPs
Tela é um BITMAP especial chamado screen BITMAPs adicionais podem ser criados com:
BITMAP *bmp = create_bitmap(int width, int height);
Chamado antes de set_gfx_mode
Desenhar Objectos – BITMAP’s
![Page 9: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/9.jpg)
Desenhar Objectos – BITMAP’s
Os vectores X e Y, estão posicionados da maneira diferente quando comparamos os planos, desta forma, quando desenharmos a linha, devemos ter em mente a direcção do traço.
![Page 10: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/10.jpg)
Alguns exemplos de rotinas gráficas simples:
void putpixel (BITMAP *bmp, int x, int y, int color);
void vline(BITMAP *bmp, int x, int y1, int y2, int color);
void hline(BITMAP *bmp, int x1, int y, int x2, int color);
void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color);
void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color);
void circle(BITMAP *bmp, int x, int y, int radius, int color);
Desenhar Objectos – BITMAP’s
![Page 11: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/11.jpg)
Cores
Modelo depende do modo gráfico sendo o default 8 (256 cores).
Cada cor é expressa com três números, cada um numa escala de 0 a 63 (intensidade)
Para armazenar cores no Allegro:
typedef struct RGB { unsigned char r, g, b;
} RGB;
![Page 12: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/12.jpg)
Cores
A cor azul é formada através da RGB [0,0,255]
![Page 13: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/13.jpg)
Animação
Dar a impressão de que coisas se movem Pode significar mover um pixel ao longo da
tela mas, geralmente, significa uma mudança repetitiva da apresentação de algo para que dê a ideia de que se move.
Qual a técnica mais simples? limpamos a tela, desenhamos os objectos,
limpamos a tela novamente, desenhamos os objectos nas novas posições
![Page 14: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/14.jpg)
Animação
Qual o problema desta técnica?
Efeito Flicker - efeito de cintilação ou vibração de uma imagem na tela do computador
Instante 1 Instante 2: Limpar a tela Instante 3
![Page 15: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/15.jpg)
Animação Qual a solução? Double Buffering
Instante 2: Limpar a telaInstante 1 Instante 3
Buffer
Instante 1 Instante 3
Tela
Instante 2
![Page 16: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/16.jpg)
Periféricos de Entrada - Teclado
Teclado install_keyboard()
/* Para inicializar
as rotinas do teclado */
KEY_ALTGRAlt Direito
KEY_ALTAlt esquerdo
KEY_RCONTROLControl Direito
KEY_LCONTROLControl Esquerdo
KEY_RSHIFTShift Direito
KEY_LSHIFTShitf Esquerdo
KEY_PRTSCRPrint Screen
KEY_SPACEBarra de Espaço
KEY_PAUSEPause
KEY_DOWNSeta para Baixo
KEY_UPSeta para Cima
KEY_LEFTSeta para a Esquerda
KEY_RIGHTSeta para a Direita
KEY_ENTEREnter
KEY_ESCEsc
KEY_0 ... KEY_9Teclado Normal 0 a 9
KEY_0_PAD ... KEY_9_PADTeclado Numérico 0 a 9
KEY_A, KEY_B...KEY_ZA, B ... Z
Código na ArrayTecla
Váriável global int key[]permite ver quais teclas
estão pressionadas.constantes definidas para
identificar cada tecla
![Page 17: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/17.jpg)
Mover coisas na tela:
void processa_teclado(int* x, int* y) { if (key[KEY_UP]) {
*y = *y - 1; } else if (key[KEY_DOWN]){
*y = *y + 1; } else if (key[KEY_RIGHT]){
*x = *x + 1; } else if (key[KEY_LEFT]){
*x = *x - 1; } }
Periféricos de Entrada - Teclado
![Page 18: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/18.jpg)
install_mouse() /* Para inicializar as rotinas do mouse */
Retorna -1 em caso de falha ou o número de botões que o mouse tem em caso de sucesso
Periféricos de Entrada - Mouse
Usa-se a função Usa-se a função show_mouseshow_mouse para que o cursor do mouse para que o cursor do mouse seja mostrado no bitmap especificadoseja mostrado no bitmap especificado
Passando Passando NULLNULL como parâmetro esconde o cursor do mouse como parâmetro esconde o cursor do mouse Deve-se ter cuidado ao desenhar algo na tela pois o cursor Deve-se ter cuidado ao desenhar algo na tela pois o cursor
do mouse pode passar por cima e estragar o desenho, por do mouse pode passar por cima e estragar o desenho, por isso é sempre bom escondê-lo antes de desenhar qualquer isso é sempre bom escondê-lo antes de desenhar qualquer coisacoisashow_mouse(screen); /* mostra o mouse na tela */show_mouse(NULL); /* esconde o mouse */
![Page 19: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/19.jpg)
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.
Periféricos de Entrada - Mouse
![Page 20: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/20.jpg)
Som Som digital: WAV. 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; /* 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 */musica = load_midi(“arquivo.mid”); /* para arquivos mid */
Ponteiro nulo -> arquivo não encontrado.
![Page 21: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/21.jpg)
Som – MIDI’s
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_midi().
![Page 22: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/22.jpg)
Som - Samples
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 frequê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 */
![Page 23: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/23.jpg)
Timming no Allegro
Executar pedaço de código em velocidades diferentes Para isso, colocar cada um dos trechos de código numa função
diferente Allegro só permite o uso de 16 timers int install_int(void (*proc)(), int speed) /* cria timer */ install_timer(); /*inicializa timer, opcional */ void remove_int(void (*proc)()) /* remove função da lista
*/
Notas: Todas variáveis globais acessadas nos timers devem ser trancadas com
a macro LOCK_VARIABLE() speed representa milésimos de segundo
![Page 24: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/24.jpg)
Timming no Allegro
Notas: Todas variáveis globais acessadas nos timers devem ser
trancadas com a macro LOCK_VARIABLE() Todas as funções de "timer" devem ser trancadas com
LOCK_FUNCTION() speed representa milésimos de segundo
![Page 25: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/25.jpg)
Exemplo de Jogos
Swear
![Page 26: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/26.jpg)
Exemplo de Jogos
Icy Tower
![Page 27: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/27.jpg)
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.
![Page 28: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/28.jpg)
Instalando Allegro
Devc++
• Clique no botão Install e selecione o caminho onde você salvou o pacote de instalação do Allegro:
![Page 29: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/29.jpg)
Usando Allegro no Devc++
Crie um Novo Projeto no DevC++, Selecione a aba MultiMedia, e clique em Allegro Application(static):
![Page 30: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/30.jpg)
Bibliografia
Site principal do Allegro http://alleg.sourceforge.net
Site principal de aplicações (games) em allegro http://www.allegro.cc
Tutorial allegro vivace http://www.grandgent.com/gfoot/vivace/vivace.html
![Page 31: Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)](https://reader035.vdocuments.com.br/reader035/viewer/2022062315/568151a6550346895dbfd566/html5/thumbnails/31.jpg)
Exercício
Ex1: Construa um Círculo Trigonométrico a partir das primitivas (reta, retângulo, círculo) do Allegro.
Ex2: Faça o joginho de Surf, para tal, utiliza as imagens surf.bmp e teahupoo.bmp