Allegro é uma biblioteca de funções para jogos 2D feita em C. Apesar de ter algumas funções para jogos 3D ela não é indicada para isso sendo no lugar dela uma API3d como OpenGL ou DirectX, por exemplo.
Table of Contents
|
O que é o Allegro
Conforme as palavras (traduzidas) do arquivo readme do Allegro
Allegro é uma biblioteca livre de plataforma projetada para uso em jogos de computador e outros tipo de programação multimídia. Ela foi inicialmente concebida no atari ST, mas aquela plataforma tristemente morreu durante o nascimento da criança. Depois de uma breve estadia com Borland C, ela foi adotada pelo fantástico compilador djgpp, onde ela cresceu para maturidade. Na plenitude do tempo ela deu nascimento ã criância de si própria, quem viveu em locais muito exóticos como DirectX e o Servidor X, mas a família inteira está nocamente junta, vivendo em harmonia como uma única entidade portável. Que tal isto para uma mistura de metáforas? :-)
Uma ampla gama de pacotes de extensão e módulos aditivos (add-on) estão também disponíveis, os quais podem ser achados na seção "Extensões da Biblioteca" no website Allegro.cc, http://www.allegro.cc/.
De acordo com a Companhia Oxford de Música (Oxford Companion to Music), Allegro é o italiano para "rápido, vivo e brilhante". Ele também é um acrônimo recursivo que representa "Allegro Low Level Game Routines" ("Rotinas de jogo de baixo nível Allegro") .
Por que usar o Allegro
Porque é uma API fácil, prática e ideal para novatos, sendo feita especialmente para jogos 2D
Como começar com Allegro
O jeito fácil é pegar uma distribuição compilada e com tudo já prontinho e só ajustar as bibs, includes nas opções de projeto que a IDE/compilador oferecem. Porém o jeito mais fácil na minha opinião é baixar o Dev-Cpp e depois de instalado clicar na opção para baixar dev-pack e escolhar o do Allegro, um dos mais recentes da lista. Daí é só instalá-lo no final do download.
Para ver se tudo está funcionando selecione a opção para criar um novo projeto e vá para a aba multinmídia e clique em Allegro Application (qualquer uma das duas versões, com biblioteca dinâmica ou estática) e daí salve o programa que aparecer e aperte para compilar (F9) ou project -> Compile and Run project.
Um hello World em allegro
#include <allegro.h>
int main(){
if( allegro_init() != 0 ) return 1;
allegro_message( "Funcionou" );
allegro_exit();
return 0;
}
END_OF_MAIN()
Exemplo de animacao em Alegro
#include <allegro.h>
#include <stdlib.h>
#include <math.h>
void setup();
void saida();
typedef struct Circle{
int x, y, raio;
} Circle;
void animCircle(){
static Circle *circ=NULL; // static age como uma var global acessivel
// somente em dado local, neste caso a func animCircle
if( !circ ){
circ = malloc( sizeof(Circle));
circ->x = circ->y = 300;
circ->raio = 10;
} else{
rectfill( screen, circ->x - circ->raio, circ->y - circ->raio, circ->x + circ->raio, circ->y + circ->raio, makecol( 0, 0, 0 ));
circ->x += rand() % 40 - 20;
circ->y += rand() % 40 - 20;
}
circle( screen, circ->x, circ->y, circ->raio, makecol( 0, 0, 255 ) );
}
int main(){
atexit( saida );
setup();
install_int( animCircle, 50 );
while( !key[KEY_ESC] ){
// verificar movimento do jogador
// verificar movimento dos oponentes
// outras coisas
rest(50);
}
exit( 0 );
return 0;
}
void setup(){
allegro_init();
// instala subsistemas
install_keyboard();
install_mouse();
install_timer();
//install_joystick();
srand( time(0) );
// configura a tela
set_color_depth( 16 ); // o padrao e 8
// presar bem atenco a armadilha da mudanca do modo grafico
set_gfx_mode( GFX_AUTODETECT_FULLSCREEN, 800, 600, 0, 0 );
}
void saida(){
allegro_exit();
}
Musica em allegro
Detecćão de colisão simples com allegro
#include <allegro.h> /* Adiciona as funções do Allegro */
#include <allegro/alcompat.h>
#include <stdio.h>
volatile int a = 0; /* variável global */
void func() {
a++;
}
END_OF_FUNCTION();
int main() {
int x=275,y=75,x2=340,y2=140;
allegro_init();
install_timer();
install_mouse();
install_keyboard();
LOCK_VARIABLE(a);
LOCK_FUNCTION(func);
install_int(func,100);
set_color_depth(32);
set_gfx_mode(GFX_AUTODETECT_FULLSCREEN,640,480,0,0);
BITMAP *img = create_bitmap(640,480); /* Cria o BITMAP */
//while(!key[KEY_ESC]) {
//clear_bitmap(img);
//line(img,10,10, 200,200, makecol(0,0,255) ); /* Define dimensão e cor da linha */
//circle(img,300,300,100, makecol(255,0,0 ) );
//rect(img,400,400,200,200, makecol(0,255,0 ) );
//rectfill(img, 399,399,201,201, makecol(0,0,255));
//triangle(img,400,400,400,200,200,200, makecol(255,0,0 ) );
//vline(img, 10,10,100, makecol(255,0,0 ) );
//hline(img, 10,10,100, makecol(255,0,0 ) );
//blit(img,screen,0,0,0,0,640,480); /* Imprime a linha */
/*if(key[KEY_RIGHT]) {
x++;
clear_bitmap(img);
circlefill(img,x,y,100,makecol(255,255,255));
blit(img,screen,0,0,0,0,640,480);
}*/
//};
char txt[40];
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(255,0,0));
rectfill(img,x,y,x2,y2,makecol(0,0,255)); /* Retângulo Manupulável Azul */
rectfill(img,260,190,360,290,makecol(255,0,0)); /* Retângulo Estático Vermelho */
blit(img,screen,0,0,0,0,640,480);
while(!key[KEY_ESC]) {
show_mouse(img);
/* Movimentação por setas do teclado: Início */
if(key[KEY_RIGHT]) {
clear_bitmap(img);
x++;x2++;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(255,0,0));
}
if(key[KEY_LEFT]) {
clear_bitmap(img);
x--;x2--;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(255,0,0));
}
if(key[KEY_UP]) {
clear_bitmap(img);
y--;y2--;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(255,0,0));
}
if(key[KEY_DOWN]) {
clear_bitmap(img);
y++;y2++;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(255,0,0));
}
/* Fim da movimentação com Teclado e início das verificações de posicionamento */
if((x >= 259) && (x <= 360)) {
if((y2 >= 190) && (y2 <= 354)) {
clear_bitmap(img);
x++;x2++;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
textout(screen,font,"colisao detectada",250,1,makecol(255,255,0));
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(0,255,0));
}
}
if((x2 >= 259) && (x2 <= 360)) {
if((y >= 125) && (y <= 285)) {
clear_bitmap(img);
x--;x2--;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
textout(screen,font,"colisao detectada",250,1,makecol(255,255,0));
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(0,255,0));
}
}
if((y >= 190) && (y <= 290)) {
if((x >= 194) && (x <= 359)) {
clear_bitmap(img);
y++;y2++;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
textout(screen,font,"colisao detectada",250,1,makecol(255,255,0));
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(0,255,0));
}
}
if((y2 >= 190) && (y2 <= 290)) {
if((x >= 196) && (x <= 359)) {
clear_bitmap(img);
y--;y2--;
rectfill(img,x,y,x2,y2,makecol(0,0,255));
rectfill(img,260,190,360,290,makecol(255,0,0));
blit(img,screen,0,0,0,0,640,480);
textout(screen,font,"colisao detectada",250,1,makecol(255,255,0));
sprintf(txt,"X: %d Y: %d", x, y);
textout(screen,font,txt,5,5,makecol(0,255,0));
}
}
};
return 0;
}
END_OF_MAIN();
Detecção de colisão e movimento de personagem
Bibliotecas auxiliares
Bibliotecas auxiliares são aquelas relacionadas com o Allegro, mas que não vem com a API, entretanto, elas adicionam alguma funcionalidade que a API não tem, sendo por vezes muito úteis. Desse modo elas tem como pré-requisito a instalação prévia do allegro para funcionar e representam opções de linha de comando adicionais para compilar o teu programa.
alogg: Adiciona suporte de som ogg ao allegro
alpng: Adiciona suporte ao carregamento de imagens PNG pelo Allegro
links para mais informações de bibliotecas auxiiares
Allegro GUI Seção do wiki do Allegro para bibliotecas que auxiliam na construção de uma GUI
Mais links para o allegro
Uma coleção de materiais sobre allegro reunidos pelo usuário saaulx da Unidev
Wiki sobre allegro em português
Site oficial do Allegro
Página exclusiva sobre Allegro contando com jogos, tutoriais, downloads, etc...
Wiki com muita informação sobre o allegro com materiais para os diversos tipos de usuários que usam o allegro