You are on page 1of 7

Departamento de Engenharia Electrotécnica e de Computadores Programação

Instituto Superior Técnico

Programação 2010/2011
MEAer - LEE

Exemplos de programas que utilizam a biblioteca gráfica Allegro

1 - Introdução
A biblioteca gráfica allegro foi desenvolvida com o objectivo de ser utilizada no desenvolvimento
de jogos e também que podesse funcionar em diversas plataformas. Mais informações sobre a sua
utilização assim como o acesso aos manuais pode ser obtida em http://alleg.sourceforge.net/

Neste documento pretende-se apresentar exemplos de programas simples que devem ser
analisados e testados e que servem de auxílio ao desenvolvimento do trabalho final da cadeira.

2 – Teste da instalação da biblioteca

O programa seguinte permite testar se a biblioteca está instalada, e também permite obter a versão da
biblioteca.

#include <stdio.h>
#include <allegro.h> /* Para usar funções da biblioteca allegro */

int main()
{
printf("Exemplo I: Teste da biblioteca allegro \n");

allegro_init();
printf("----------------------------------------------\n");
printf("Versão da biblioteca Allegro = %s \n", allegro_id);
printf("----------------------------------------------\n");

allegro_exit();

return 0;
}

/* Isto é obrigatório */
END_OF_MAIN()

Para compilar o programa deve utilizar o gcc com as opções seguintes

> gcc -ansi -Wall -pedantic exemplo1_allegro.c -o oo `allegro-


config --libs`

Tenha em atenção o nome do ficheiro fonte, o nome do ficheiro executável e os símbolos questão
a delimiter a sequência de caracteres allegro-config –libs . Esta última sequência permite obter
uma lista de opções que é passada para o compilar gcc. Para ver a lista de opções pode executar
na linha de commando

1/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

> allegro-config –libs

E obterá algum semelhante a

-L/usr/lib -Wl,-Bsymbolic-functions -lalleg-4.2.2

Comece por analisar o código do programa fonte anterior, compile-o e execute.

3 – Teste de algumas funções da biblioteca

#include <stdio.h>
#include <allegro.h>

int main()
{
printf("<<< Teste da biblioteca Allegro >>>\n");

allegro_init();
allegro_message("1 - Welcome To Allegro!");

printf("<<< Segunda mensagem >>>\n");


allegro_message("2 - Bye Bye!");

allegro_exit();

printf("<<< Fim do programa! >>>\n");

return 0;
}

END_OF_MAIN()

4 – Teste de funções gráficas da biblioteca

#include <stdio.h>
#include <allegro.h>

#define LARGURA_JANELA 640


#define ALTURA_JANELA 480

int main()
{
int ret;
int x, y;
int cor; /* Pode assumir valor de 0, 1, ..., 15 */
/* Ou pode ser gerado com makecol(255,255, 255)
usando a técnica de RBG (Red, Blue, Green) */

2/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

printf("<<< Teste da biblioteca Allegro >>>\n");

/* Inicializa */
allegro_init();

/* Inicializa o teclado */
install_keyboard();

/* Inicializa o o video em modo 640x480 */


ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, LARGURA_JANELA,
ALTURA_JANELA, 0, 0);
if (ret != 0)
{
allegro_message("Graphic error- Exiting");
return 1;
}

/* mostra a resolucao do display */


/* Protótipo da função:
void textprintf_ex(BITMAP *bmp, const FONT *f,
int x, int y, int
color, int bg, const char *fmt, ...);
*/

/*
screen --- Global pointer to a bitmap, definida em allegro.h,
font -- Define o tipo de fonte para desenhar os caracteres
*/
/* Para posicionar o texto na janela */
/* Alterar os valores de x: 0 <= x < 640
y: 0 <= y < 480
para ver o que acontece.
*/
x = LARGURA_JANELA / 2;
y = ALTURA_JANELA / 3;
textprintf_ex(screen, font, x, y, makecol(255,255, 255), -1,
"%dx%d", SCREEN_W, SCREEN_H);

/* Para desenhar um pixel */


x = 12;
y = 20;
cor = 12;
putpixel(screen, x, y, cor);
putpixel(screen, x+1, y+1, makecol(200,200,200));

/* Para desenhar rectas horizontal */


hline (screen, 30, 100, 30+100, cor+1);
hline (screen, 30, 150, 30+100, cor+2);

/* Protótipo da função vline

3/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

void vline(BITMAP *bmp, int x, int y1, int y2, int color);
*/
/* Teste o resultado da função vline */

/* desenha um linha
void line(BITMAP *bmp, int x1, int y1,
int x2, int y2, int color);
*/
line(screen, 300, 50, 500, 120, 5);

/*
Qual é o reultado desta função?
void circle(BITMAP *bmp, int x, int y,
int radius, int color);
*/
circle(screen, 120, 130, 15, 7);
circle(screen, 120, 130, 20, 7);

/* Espera que a tecla de ESC seja pressionada */


while(!key[KEY_ESC]) {};

/* Termina */
allegro_exit();

return 0;
}

END_OF_MAIN()

5 – Uma aplicação mais interessante!

Analise o programa seguinte. Determine a acção de cada uma das funções que são apresentadas.
Determine qual é a tecla que ao ser pressionada permite parar o programa.
Depois compile o programa e execute-o.

#include <stdio.h>
#include <time.h> /* Para usar o time() */
#include <stdlib.h> /* Para usar a função srand() e rand()*/

#include <allegro.h>

#define LARGURA_JANELA 640


#define ALTURA_JANELA 480

/*------------------------------------------
Function:

4/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

Parametros:
Descrição:
Autor:
Data:
--------------------------------------------*/
int my_rand()
{
int r = rand();
int step;

if (r > RAND_MAX/2)
step = 1;
else
if (r == RAND_MAX/2)
step = 0;
else
step = -1;

return step;
}

/*------------------------------------------
Function:
Parametros:
Descrição:
Autor:
Data:
--------------------------------------------*/
int cria_cor(int x, int y)
{
/* Codigos de cor
0 - Black
1 - Drak Blue
2 - Dark Green
3 - Dark Cyan
4 - Dark Red
5 - Dark Mangenta
6 - Orange
7 - Gray
8 - Dark Gray
9 - Blue
10 - Green
11 - Cyan
12 - Red
13 - Magenta
14 - Yellow
15 - White
*/

return ((x+y) % 15);


}

5/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

/*------------------------------------------
Function:
Parametros:
Descrição:
Autor:
Data:
--------------------------------------------*/
int limita (int z, int Zmin, int Zmax)
{
if ( z < Zmin)
z = Zmin;
if ( z > Zmax)
z = Zmax;

return z;
}

/*------------------------------------------
Function:
Parametros:
Descrição:
Autor:
Data:
--------------------------------------------*/

void coordenadas_da_formiga(int *p_x, int *p_y, int Xmax, int


Ymax)
{

int dx, dy;

dx = my_rand();
dy = my_rand();

*p_x = limita (*p_x + dx, 0, Xmax);


*p_y = limita (*p_y + dy, 0, Ymax);

int main()
{
int ret;
int x, y;

printf("<<< Teste da biblioteca Allegro >>>\n");

/* Inicializa */
allegro_init();

/* Inicializa o teclado */
install_keyboard();

6/7
Departamento de Engenharia Electrotécnica e de Computadores Programação
Instituto Superior Técnico

/* Inicializa o gerador de números aleatórios */


srand(time(NULL));

/* Inicializa o o video em modo 640x480 */


ret = set_gfx_mode(GFX_AUTODETECT_WINDOWED, LARGURA_JANELA,
ALTURA_JANELA, 0, 0);
if (ret != 0)
{
allegro_message("Graphic error- Exiting");
return 1;
}

x = LARGURA_JANELA / 2;
y = ALTURA_JANELA / 3;
textprintf_ex(screen, font, x, y, makecol(255,255, 255), -1,
"FORMIGA ... %dx%d", SCREEN_W, SCREEN_H);

/* Espera que a tecla de ESC seja pressionada */


while(!key[KEY_ESC])
{
coordenadas_da_formiga(&x, &y,
LARGURA_JANELA-1, ALTURA_JANELA-1);
putpixel(screen, x, y, cria_cor(x,y));

/* circle(screen, 120, 130, 20, 7); */


textprintf_ex(screen, font, 0, 0, 6, -1,
"FORMIGA na posição (%d,%d)", x, y);
textprintf_ex(screen, font, 0, 0, 0, -1,
"FORMIGA na posição (%d,%d)", x, y);
}

/* Termina */
allegro_exit();

return 0;
}

END_OF_MAIN()

 Continuação de um bom trabalho!

7/7

You might also like