You are on page 1of 8

Allegro: Biblioteca de Programação para Jogos

Juliano da Costa Medeiros e Rodrigo Machado Hahn


Universidade do Vale do Rio dos Sinos
jcm.voy@terra.com.br - dormento@ig.com.br

Resumo 3. Funções

Na área da informática, a área de jogos é muito 3.1. Funções Gráficas:


importante, pois o desenvolvimento dos jogos exige
muito conhecimento na qual é visto no curso de Ciência • Desenhos vetoriais: pixels, linhas, retângulos,
da Computação. Incrivelmente essa área é pouco círculos, elipses, arcos, splines Bezier
difundida nas universidades, mesmo sendo evidente a preenchimento de shape, com ou sem padrão
sua importância acadêmica e por ser uma fonte polígonos: planos, Gouraud, com textura com
inesgotável de pesquisa. translúcido;
• Sprites: máscara, compactada e cópias, rotação,
1. Introdução redimensionamento, canal alfa, suporte para
arquivos: BMP, LBM, PCX e TGA (outros
Uma importante área da computação é o suportados com plugins);
desenvolvimento de jogos. Esta área é de grande • Paletas de Cores: manipulação da paleta de
importância durante o desenvolvimento dos jogos, pois cores (lendo, escrevendo, convertendo)
são utilizados diversos recursos computacionais, de baixo conversão de formato de cores RGB para HSV e
a alto nível, nos processos de desenvolvimento. vice-versa;
Conseqüentemente, este ramo da computação é • Textos: saída de texto em formato (mascarado,
abrangente e muito explorado. colorido, alinhado);
• Outras: desenho diretamente na tela em um
2. A Biblioteca Allegro bitmap de memória de algum tamanho crolling e
funções de animação par ao formato FLI/FLC.
Allegro Low Level Game Routines (Allegro) é uma [1]
biblioteca de programação de jogos para programadores
C/C++. Originalmente foi desenvolvida por Shawn 3.1.2. Drivers Gráficos:
Hargreaves e atualmente mantida por muitos
programadores. • Dos: modo VGA, SVGA em 8, 15, 16,24 e
Allegro é uma biblioteca Open Source, podendo ser 32 bits por pixel;
modificada por qualquer programador e distribuída • Unix: X Windows, DGA, fbcon, SVGAlib,
gratuitamente. Esta biblioteca oferece muitas funções VBE/AF, mode-X, VGA;
para gráficos, sons, dispositivos de entrada (teclado, • Windows: DirectX (normal ou full-screen)
mouse e joystick), funções matemáticas de ponto fixo e GDI;
flutuante, funções 3D, além de funções de gerenciamento • BeOS: BwindowsScreen Bdirect Window.[1]
de arquivo, arquivo compactado, uma GUI e
temporizadores.
4. Funções de Som
2.1. Plataformas suportadas:
• Midi: suporte nativo de música no formato
• DOS (DJGPP, Watcom);
MIDI (com 64 efeitos simultâneos)
• UNIX (Linux, FreeBSD, Irix, Solaris, Darvin); controle/resposta dinâmico para música como
• Windows (MSVC, MinGW, Cygwin, Borland); ligar, desligar, volume principal, pitch bend, e
• BeOS, QNX;
• MacOSX [1].

1
escolha de programa. Pode ler diretamente DJGPP/GCC possa utiliza-lo. Após o make deve-se
arquivos MIDI; verificar se os arquivos allegro.h e liballeg.a estão nos
• Wave: Suporte nativo para arquivos .wav e .voc, respectivos diretórios: c:\DJGPP\Include e C:\DJGPP\Lin.
com opções de volume, pitch, etc, durante a Caso não esteja deve-se copiar manualmente.
execução. [1]
7. Principais Rotinas
4.1. Drivers de Som
7.1. Rotinas básicas
• Dos: Adlib, SB Pro, SB16, AWE32 MPU-401
ESS AudioDrive Ensoniq Soundscape Windows As rotinas básicas são as de inicialização do Allegro:
Sound System;
• Unix: OSS ESD ALSA; • int allegro_init(); responsável pela inicialização
• Windows: DirectSound WaveOut drivers de da biblioteca Allegro e das variáveis globais e
sistema MIDI. [1] pela reserva de memória;
• void allegro_exit(); esta função encerra o
5. Outras utilidades Allegro. Quando chamada o programa retorna
para o modo texto, remove qualquer rotina de
• Funções matemáticas; mouse, teclado ou temporização que tenha sido
• Teclado, mouse e joystick; instalada;
• Manipulação de arquivos compactados no
formato LZSS; 7.2. Rotinas de vídeo
• Ferramenta para criação de arquivo de dados
(grabber); • void set_color_depth (int depth); Função
• GUI simples para diálogos e seleção de arquivo. responsável pela configuração do número de bit
[1] de cores que é determinado pelo parâmetro de
depth. Os valores que podem ser passados pelo
6. Instalação parâmetro depth são 8,15,16,24 e 32. Esta
função deve ser chamada antes da função
6.1. Utilizando o MinGw set_gfx_mode.
• Int set_gfx_mode (int card, int w,int h,int
Para instalar o compilador MinGw é necessário trazer v_w,int v_h); Esta função faz o Allegro mudar
a biblioteca Allegro. Há uma versão compactada em para o modo gráfico. O parâmetro card deve ser
binário para o compilador MinGw disponível no site um dos seguintes parâmetros: GFX_TEXT,
http://www.allegro.cc. Basta descompactar o arquivo no GFX_AUTO DETECT, GFX_VGA,
diretório aonde foi instalado o compilador MinGw e os GFX_MODEX, GFX_VESA1, GFX_VESA2B,
arquivos DLLs(all* /dll) da biblioteca devem ser copiados GFX_VESA2L, GFX_VESA3, GFX_VBEAF
para o diretório apropriado do Windows. ou GFX_XTENDED.
Os arquivos dll estarão armazenados no diretório
principal do MinGw. 7.3. Rotinas de Bitmaps

6.2. Utilizando o DJGPP Todos os gráficos carregados na tela ou na memória


são tratados pelo Allegro como Bitmaps. Os Bitmaps são
Para instalar o compilador DJGPP é necessário trazer matrizes de pixels em que cada valor indica uma cor.
a biblioteca Allegro. Caso exista algum arquivo de nome Estes estão definidos no arquivo Allegro.h como screen.
allxyz.zip entre os arquivos de instalação do Para a declaração de um bitmap usa-se:
DJGPP/GCC, não é necessário baixa-lo novamente. Em
seguida deve-se criar um diretório do DJGPP/GCC e BITMAP*nome_do_bitmap;
extrair os arquivos do arquivo.zip para o diretório. Extern BITMAP *screen;
O segundo passo é compilar os arquivos fonte, para
isto abra o Pront do MS-DOS, mude para o diretório do
Allegro e digite make. No término digite make install • BITMAP *create_bitmap (int width, int height);
para que o Allegro seja instalado, isto fará com que o Cria um bitmap na memória com largura width

2
e altura height. O retorno do valor é o endereço índices de um vetor onde cada elemento representa as
da área de memória aonde foi alocado; intensidades de uma certa cor. Este vetor chama-se
• BITMAP *load_bitmap (char *filename, paleta.
PALLETE pal); Destrói o bitmap apontado por Funções:
bitmap, liberando a memória ocupada;
• Int save_bitmap (char *filename, BITMAP • PALETTE nome_da_paleta; Inicializa a função;
*bmp, PALETTE pal); Salva o bitmap apontado • Extern PALETTE desktop_pallete; Paleta
por bmp, com a paleta apontada por pal no default;
arquivo de nome filename. A função retorna um • Void set_palette (PALETTE p); Função que
número diferente de zero caso ocorra algum seleciona a paleta especificada por p para ser
erro; utilizada;
• Void putpixel (BITMAP *bmp, int x, int y, int • Void set_palette_range (PALETTE p; int from,
color); Desenha um ponto na coordenada int to, int vsync); Esta função fornece o mesmo
especificada e de cor especificada.; resultado que a set_palette, diferenciando-as
• Void line (BITMAP *bmp, int x1, int y1, intx2, pelo fato de que apenas um trecho da paleta é
int y2, int color); Desenha uma linha na selecionado para o uso;
coordenada especificada, de (x1,y1) até (x2,y2); • Void get_palette (PALETTE p); Função
• Void hline (BITMAP *bmp, int x1, int y, int x2, responsável pelo armazenamento da paleta
int color); Desenha uma linha horizontal; utilizada em p;
• Void vline (BITMAP *bmp, int x, int y1, int y2, • Void get_palette_range (PALETTE p; int from,
int color); Desenha uma linha vertical; int to); Armazena uma parte da paleta;
• Void triangle (BITMAP *bmp, int x1, int y1, int • Void fade_in (PALETTE p, int speed); Função
x2, int y2, int x3, int y3, int color); Desenha um que altera gradualmente as cores da paleta,
triângulo; desde a black_palette até a paleta p. Speed
• Void rect (BITMAP *bmp, int x1, int y1, int x2, controla a velocidade da alteração;
int y2, int color); Desenha um retângulo; • Void fade_out (int speed); Função que altera
• Void rectfill (BITMAP *bmp, int x1, inty1, int gradualmente as cores da paleta até atingir a
x2, in y2, int color); Desenha um retângulo; black_palette com velocidade speed;
• Void polygon (BITMAP *bmp, int vertices, int • Void fade_in_range (PALETTE p, int speed, int
*points, int color); Desenha um polígono com from, int to); Função que altera gradualmente as
vertices especificados pelo vetor points. O vetor cores da paleta, desde a black_palette até a
é um par de coordenadas (x,y); paleta p, com velocidade speed;
• Void circle (BITMAP *bmp, int x, int y, int • Void fade_from (PALETTE source, PALETTE
radius, int color); Desenha uma circunferência dest, int speed); Função que altera
de centro (x, y); gradualmente as cores da paleta, desde a paleta
• Void circlefill (BITMAP *bmp (BITMAP *bmp, source até a paleta dest, com velocidade speed.
int x, int y, int radius, int color); Desenha um
círculo); 7.5. Rotinas de Fontes
• Void blit (BITMAP *source, BITMAP *dest, int
source_x, int source_y, int dest_x, int dest_y, int O Allegro define um tipo Font, que contém as
width, int height); Copia uma area retangular descrições das fontes que podem vir a ser desenhadas na
para a coordenada (dest_x, dest_y) do bitmap tela.
apontado por dest; Declaração da função: FONT *nome_da_fonte;
• Void draw_sprite (BITMAP *bmp, BITMAP Funções:
*sprite, int x, int y); Copia o bitmap inteiro,
apontado por sprite, do bitmap apontado por • Extern FONT *font; Fonte padrão para algumas
bmp. tarefas do Allegro. Esta pode ser alterada para
que o Allegro utilize na fonte;
7.4. Rotinas de Paletas • Extern FONT *font; fonte padrão para algumas
tarefas do Allegro. Pode ser alterada;
No Allegro todas as funções de desenho utilizam • Void text_mode (int mode); Altera o modo de
parâmetros inteiros para representar as cores. No modo desenho do texto. Caso mode for zero ou
256 cores, por exemplo, esses valores representam os positivo, o fundo dos caracteres terá a cor do

3
código mode.Caso seja negativo, o fundo será • Midi *.Load_midi (char *filename); Carrega um
transparente. O padrão é zero; arquivo midi retornando um ponteiro para uma
• Void textout (BITMAP *bmp,FONT *f,unsigned estrutura midi;
char *s, int x,int y,int color ); Esta função • Int play_midi (MIDI *midi, int loop); Executa o
escreve a string s, na coordenada (x,y) apontado arquivo midi especificado por midi;
por bmp, utilizando a fonte de f e a cor color. Se • Void stop_midi(); Interrompe qualquer midi que
o valor de color for -1 a cor utilizada será a cor esteja sendo tocado;
original do bitmap da fonte; • SAMPLE *load_sample (char *filename); Um
• Void textout_center (BITMAP *bmp, FONT *f, arquivo sample é carregado, retornando um
unsigned char *s,int x,int y,int color); Imprime ponteiro para uma estrutura sample;
a string s centralizada na coordenada (x,y); • Int play_sample (SAMPLE *spl, int vol, int
• Void textprintf (BITMAP *bmp, FONT *f,int x, pam, int freq, int loop); Inicializa o sample
int y,int color,char *fmt ... ); Escreve um texto especificado por spl utilizando os argumentos
formatado no bitmap; vol, pan, freq e loop;
• Void textprintf_center (BITMAP *bmp, FONT • Void stop_sample (Sample *sql); Faz parar de
*f,int x,int y,int color,char *fmt,... ); Imprime o tocar o sample especificado por spl.
texto centralizado na coordenada especificada.
7.8. Rotinas de Mouse
7.6. Rotinas de Teclado
• Int install_mouse(); Inicializa o mouse para ser
Funções: usado pelo Allegro;
• Void remove_mouse(); Interrompe o controle do
• Int install_keyboard (); Inicializa a função; Allegro sobre o mouse;
• Void remove_exit(); Libera o teclado para a • Extern volatile int mouse_x; extern volatile int
BIOS; Geralmente usada quando deseja-se mouse_y; Estas duas funções guardam a posição
encerrar a função install_keyboard; x e y do cursor do mouse;
• Void clear_keyboard (); Limpa o buffer do • Extern volatile int mouse_b; Guarda o estado
teclado. Esta limpeza garante que qualquer atual do pressionamento dos botões do mouse;
tecla que tenha sido pressionada e não lida • Void set_mouse_range (int x1, int y1, int x2, int
pela função readkey seja apagada; y2); Esta função define qual a dimensão de
• Int keypressed (); Retorna verdadeiro caso deslocamento que o ponteiro do mouse pode ter
alguma tecla tenha sido pressionada e que na tela.
esteja no buffer a espera da leitura;
• Int readkey(); Retorna o próximo buffer do 7.9. Rotinas de Timer
teclado. Caso o buffer esteja vazio, a função
aguarda até que alguma tecla seja Funções:
pressionada;
• Extern volatile char key [Key_Max]; • Int install_timer; Esta função é a mais
Verifica se alguma tecla está sendo importante, pois deve ser chamada antes de se
pressionada. usar qualquer função de timer, antes de mostrar
o ponteiro do mouse e tocar uma midi;
7.7. Rotinas de Som • Void remove_timer(); Remove o temporizador
do Allegro;
A configuração do som exige apenas o uso de uma • Int install_int (void (*proc)(),int speed);
função. Esta função inicializa os dispositivos digitais e os Inicializa um temporizador para ser utilizado a
do tipo MIDI. cada intervalo de speed;
• Void remove_int (void (*proc)()); Remove o
Funções: temporizador usado pela função proc;
• Install_sound (int digi_card, int midi_card, char • Lock_variable(variavel); lock_function(função);
*cfg_path); Inicializa a função; End_of_function(funcao); Quando utiliza-se
• Void remove_soud(); Remove a função de som; temporizadores, são necessários utilizar esses
três macros;

4
• Void rest(long time); O programa é get_config_float(const char *section, const char
interrompido (pause) por time milisegundos. *name, float def ); Estas três funções lêem
respectivamente: um inteiro, um hexadecimal e
7.10. Rotinas de DataFile um ponto flutuante do arquivo de configuração.

DataFile: É um arquivo com extensão .dat. Este 8. Técnicas de Programação


arquivo é capaz de armazenar diversos arquivos, de
extensões diferentes, que podem ser carregados durante a
8.1. Double Buffering
execução do programa.
Para gerar um arquivo DataFile pode-se utilizar um
Quando uma animação é feita usando o Allegro,
utilitário chamado Grabber, que está armazenado no
surgem alguns problemas relacionados aos vários
diretório tools do Allegro.
métodos que podem ser utilizados.
A forma mais simples de animação é aquela em que a
Para acessar um arquivo DataFile:
tela é limpa. Em seguida desenham-se os objetos, limpa-
se novamente, e desenham-se os objetos novamente, mas
DATAFILE *dat + a função load datafile;
em posições diferentes formando uma seqüência
DATAFILE *load_datafile(const char *filename);
animada. Este método não funciona corretamente, pois a
Um arquivo chamado filename é aberto como um
tela pisca a cada limpeza. Para corrigir este problema
arquivo datafile. Se algum erro ocorrer, a função retorna
usa-se a técnica chamada Double Buffering.
Null.
8.2. Scrolling
7.11. Rotinas de Arquivos de Configuração
Uma das principais técnicas utilizadas em jogos é o
Funções: scrolling. O scrolling consiste em movimentar o fundo do
cenário e, normalmente, deixar o personagem controlado
• Void set_config_file (const char *filename); parado, o que causa uma sensação de movimento. O
Esta função faz o Allegro utilizar o arquivo scrolling pode ser horizontal, vertical ou em ambas as
filename para futuras chamadas a outras funções direções.
de arquivos de configuração; Um tipo especial de scrolling que é muito utilizado é o
• Void set_config_string (const char *section, parallax scrolling. Ele consiste num scrolling em que
const char *name, const char *val); Uma string vários fundos se movimentam em velocidades diferentes,
é escrita no arquivo de configuração na chave causando uma sensação de profundidade.
name da seção section;
• Void set_config_id (const char *section, const 8.3. Sprites
char *name, int val); Escreve um ID no arquivo Sprite é o conjunto de dados que definem determinado
ao invés de uma string; objeto ou personagem num jogo.
• Void set_config_int (const char *section, const Para uma pessoa, por exemplo, pode-se ter um sprite
char *name, int val ); void set_config_hex(const que contenha as posições vertical e horizontal dela no
char *section, const char *name, int val ); void mundo, a direção para onde ela está virada e os bitmaps
set_config_float(const char *section, const char que podem representa-la durante o jogo.
*name, float val ); As três funções escrevem
respectivamente: números inteiros, 8.4. Detecção de Colisões
hexadecimais e de ponto flutuante;
• Const char *get_config_string (const char Em inúmeras ocasiões é necessário verificar se dois
*section, const char *name, const char *def); sprites estão sobrepostos ou não. Para isso, existem vários
Função que lê um arquivo de configuração atual métodos de detecção de possíveis colisões. A mais
da chave name da seção section; simples envolve apenas alguns testes lógicos e
• Int get_config_id (const char *section, const matemáticos, as complexas envolvem vários testes e
char *name, int def); Esta função lê uma ID do cálculos.
arquivo de configuração; As rotinas de colisões são muito usadas nos jogos além
• Int get_config_int (const char *section, const de serem fundamentais, pois praticamente todo jogo que
char *name, int def); int get_config_hex (const envolva ações possui essas rotinas.
char *section, const char *name, int def ); int

5
8.4.1. Detecção baseada em retângulos: A detecção 6. BITMAP *plano[2];
baseada em retângulos é comum em jogos 2D, pois 7. int main(void); //Função principal
muitas vezes são utilizados os próprios sprites do jogo 8. void draw_lab(void); //desenha labirinto
para fazer os testes. O teste consiste basicamente em 9. void draw_bkd(void); //desenha fundo
efetuar quatro testes que referem aos lados dos 10. int main(void)
retângulos. 11. {
12. //Imprime menu
8.4.2. Detecção baseada em círculos: A detecção 13. printf("\nEste programa desenhara o básico de um
baseada em círculos é menos comum do que a colisões labirinto 3D e um fundo");
em retângulos. Porém a de círculos é mais simples e 14. printf("\nNada Será' implementado por enquanto,
basicamente efetua cálculos matemáticos. alem dos gráficos.\n");
15. getch(); //Aguarda uma tecla ser pressionada
9. Jogos 16. allegro_init();
17. install_keyboard();
18. set_color_depth(8);
9.1. Estrutura de um Jogo
19. if
(set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,
Um jogo pode ser estruturado desta forma:
MAXX, MAXY, 0, 0) < 0) {
20. printf("%s\n", allegro_error);
1. Inicialização: um jogo é configurado de uma
21. exit(1);
forma que comece num estado padrão, com suas
22. }
variáveis devidamente inicializadas e os drivers
23. plano[0] = create_bitmap_ex(8,MAXX,MAXY);
de vídeo e som funcionando; [2]
24. plano[1] = create_bitmap_ex(8,MAXX,MAXY);
2. Loop principal: O jogo em si, onde será feito
25. draw_lab();
todo o processamento até que o jogador termine
26. draw_bkd();
o jogo de alguma forma, morrendo, terminando
27. blit(plano[1], screen, 0, 0, 0, 0, MAXX, MAXY);
ou desistindo. Durante esse loop, três partes são
28. masked_blit(plano[0], screen, 0, 0, 0, 0, MAXX,
distintas:
MAXY);
- Entrada: os valores são lidos do teclado,
29. readkey();
mouse ou joystick;
30. allegro_exit();
- Processamento: mover os objetos, de
31. return 0;
acordo com a entrada;
32. }
- Visualização: mostrar ao jogador o que
33. END_OF_MAIN()
ocorreu de acordo com seus comandos. [2]
34. void draw_lab(void)
3. Finalização: Devem ser fornecidas ao jogador,
35. {
informações do que aconteceu, atualizar alguma
36. clear_to_color(plano[0],0);
tabela de escores, mostrar alguma animação de
37. line(plano[0], 0, 0, 639, 479, 2);
encerramento. [2]
38. line(plano[0], 639, 0, 0, 479, 2);
39. line(plano[0], 0, 0, 639, 0, 2);
Para fazer com que o jogo execute mais de uma vez,
40. line(plano[0], 639, 0, 639, 479, 2);
sem haver a necessidade de retornar ao sistema
41. line(plano[0], 639, 479, 0, 479, 2);
operacional, muitos jogos possuem o loop principal
42. line(plano[0], 0, 479, 0, 0, 2);
contido em um outro loop.
43. line(plano[0], 0, 68, 90, 68, 2);
44. line(plano[0], 90, 105, 140,105, 2);
10. Exemplo comentado 45. line(plano[0], 140, 135, 180,135, 2);
46. line(plano[0], 180, 158, 210,158, 2);
Este exemplo cria um labirinto e uma lua. Este 47. line(plano[0], 210, 180, 240,180, 2);
labirinto aparenta ser 3D, mas não é. 48. line(plano[0], 240, 195, 260,195, 2);
49. line(plano[0], 260, 210, 280,210, 2);
1. include <stdio.h> 50. line(plano[0], 280, 218, 290,218, 2);
2. include <conio.h> 51. line(plano[0], 90, 68, 90, 412, 2);
3. include <allegro.h> 52. line(plano[0], 140, 105, 140, 375, 2);
4. #define MAXX 640 53. line(plano[0], 180, 135, 180, 345, 2);
5. #define MAXY 480 54. line(plano[0], 210, 158, 210, 322, 2);

6
55. line(plano[0], 240, 180, 240, 300, 2); Linhas 7, 8 e 9: Protótipos;
56. line(plano[0], 260, 195, 260, 285, 2); Linhas 13, 14 e 15: Imprime o menu;
57. line(plano[0], 280, 210, 280, 270, 2); Linha 16: Inicia o Allegro;
58. line(plano[0], 290, 218, 290, 262, 2); Linha 17: Inicia o teclado;
59. line(plano[0], 300, 225, 300, 255, 2); Linha 18: Inicializa modo gráfico com profundidade
60. hline(plano[0], 0, 412, 90, 2); de cor em 8 bits;
61. hline(plano[0], 90, 375, 140, 2); Linhas 19..22: Inicia modo gráfico. Se não for
62. hline(plano[0], 140, 345, 180, 2); possível, mostra uma mensagem de erro e sai do
63. hline(plano[0], 180, 322, 210, 2); programa;
64. hline(plano[0], 210, 300, 240, 2); Linhas 23 e 24: Cria os planos na mesma resolução da
65. hline(plano[0], 240, 285, 260, 2); tela;
66. hline(plano[0], 260, 270, 280, 2); Linhas 25 e 26: Chamam as funções e desenham as
67. hline(plano[0], 280, 262, 290, 2); imagens;
68. hline(plano[0],550 ,68 ,639, 2); Linhas 27 e 28: Mostram a tela com transparência;
69. hline(plano[0],500 ,105 ,550, 2); Linha 29: Espera uma tecla ser pressionada;
70. hline(plano[0],460 ,135 ,500, 2); Linha 30: Finaliza o Allegro;
71. hline(plano[0],430 ,158 ,460, 2); Linha 31,32 e 33: Sai do programa;
72. hline(plano[0],400 ,180 ,430, 2); Linha 34: Funcao que desenha o labirinto;
73. hline(plano[0],380 ,195 ,400, 2); Linha 36: Pinta o BITMAP para a cor
74. hline(plano[0],360 ,210 ,380, 2); zero(transparente);
75. hline(plano[0],350 ,218 ,360, 2); Linhas 37 e 38: Desenham figuras no primeiro plano.
76. vline(plano[0], 550, 68, 412, 2); Linhas diagonais;
77. vline(plano[0], 500, 105, 375, 2); Linhas 39.. 42: Desenham um quadrado em volta da
78. vline(plano[0], 460, 135, 345, 2); tela;
79. vline(plano[0], 430, 158, 322, 2); Linhas 43.. 50: Desenha as linhas horizontais de
80. vline(plano[0], 400, 180, 300, 2); corredores a esquerda;
81. vline(plano[0], 380, 195, 285, 2); Linhas 51.. 59: Desenham as linhas verticais da
82. vline(plano[0], 360, 210, 270, 2); esquerda;
83. vline(plano[0], 350, 218, 262, 2); Linhas 60.. 67: Desenham as linhas horizontais de
84. vline(plano[0], 340, 225, 255, 2); corredores a esquerda - parte de baixo;
85. line(plano[0], 550 ,412 ,639, 412,2); Linhas 68..75: Desenham as linhas horizontais de
86. line(plano[0], 500 ,375 ,550, 375,2); corredores a direita;
87. line(plano[0], 460 ,345 ,500, 345,2); Linhas 76..84: Desenham as linhas verticais da direita;
88. line(plano[0], 430 ,322 ,460, 322,2); Linhas 85..92: Desenham as linhas horizontais de
89. line(plano[0], 400 ,300 ,430, 300,2); corredores a direita - parte de baixo;
90. line(plano[0], 380 ,285 ,400, 285,2); Linhas 93 e94: Desenham a linha do corredor do
91. line(plano[0], 360 ,270 ,380, 270,2); fundo;
92. line(plano[0], 350 ,262 ,360, 262,2); Linha 96: Desenha o fundo;
93. hline(plano[0], 290, 225, 350, 2); Linha 98: Pinta o fundo do plano 2. Plano 2 = plano[1]
94. hline(plano[0], 290, 255, 350, 2); Linha 99: Desenha um circulo cheio, na cor branca;
95. } Linha 100: Faz um contorno preto na Lua;
96. void draw_bkd(void) Linha 101: Desenha a linha que separa a parte
97. { iluminada da parte escura da lua;
98. floodfill(plano[1], 10, 10, 16); Linha 102: Pinta a parte escura da lua; [3]
99. circlefill(plano[1], 200, 100, 50, 15);
100.circle(plano[1], 200, 100, 50, 16); 11. Licença
101.arc (plano[1], 250, 100, itofix (96), itofix (160), 70,
7); "Allegro is gift-ware. It was created by a number of
102. floodfill(plano[1], 170,100,7); people working in cooperation, and is given to you freely
103. } as a gift. You may use, modify, redistribute, and
generally hack it about in any way you like, and you do
Linhas 1,2 e 3: Declarações das bibliotecas utilizadas; not have to give us anything in return.
Linhas 4 e 5: São definições;
Linha 6: Variável Global;

7
However, if you like this product you are encouraged [3] XuTi Game Development.
to thank us by making a return gift to the Allegro http://www.xuti.net/
community. This could be by writing an add-on package,
providing a useful bug report, making an improvement to
the library, or perhaps just releasing the sources of your
program so that other people can learn from them. If you
redistribute parts of this code or make a game using it, it
would be nice if you mentioned Allegro somewhere in
the credits, but you are not required to do this. We trust
you not to abuse our generosity." [1]
Cabeçalho exigido no código fonte do programa, caso
algum programador utilize a biblioteca gráfica Allegro:

Há outras restrições que devem ser consultadas na


documentação do Allegro.

12. Conclusões

Concluímos ao término deste artigo que a


programação de jogos e a utilização da biblioteca gráfica
Allegro são ferramentas indispensáveis no meio
acadêmico, pois exercita a lógica e a programação do
estudante. O Allegro é uma biblioteca extremamente
simples e fácil de se entender, tornando-se uma
ferramenta muito utilizada por estudantes iniciantes na
área de programação de jogos. Assim como a linguagem
Pascal que é utilizada por muitas universidades como
uma ferramenta didática para os iniciantes em
programação, a biblioteca Allegro deve ser utilizada
também didaticamente.

13. Referências

[1] Allegro, a game programming library.


http://www.talula.demon.co.uk/allegro
[2] Allegro: Biblioteca de programação para Jogos.
http://www.inf.unisinos.br/~barbosa/linguagens/consipro
2/allegro/allegro.pdf

You might also like