Usando a Biblioteca Gráfica Allegro

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Autor: Pedro Demasi Visão Geral e Introdução à Biblioteca Allegro para Programação de Jogos Autor: Pedro Demasi
Marco Antonio Montebello Júnior
Programação II Estruturas de Dados
Algoritmos e Estrutura de Dados I
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
LINGUAGEM C.
Linguagem C LPG-I – Variáveis Estruturadas – Vetores
AULA – Linguagem C – Vetores, Ponteiros Estruturas
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Estruturas de Dados I Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Estruturas de Dados II Prof.: Sergio Pacheco Prof.: Sergio Pacheco 1 1.
Callback de Teclado // registro void glutKeyboardFuc(Teclado);
Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb)
Linguagem C Strings.
Ponteiros.
Tratamento de Ficheiros
Revisão da Linguagem C.
O Portal do Estudante de Computação
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
JAVA: Conceitos Iniciais
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Introdução à Programação
Biblioteca Allegro Monitoria de Introdução à computação – if669ec
Aula prática 6 Vetores e Matrizes
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Rodrigo de Toledo Luiz Fernando Estevão
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte IX
UNIVERSIDADE FEDERAL DE UBERLÂNDIA ENGENHARIA CIVIL INTRODUÇÃO À ALGORITMOS Professora: Fabíola Gonçalves.
Definição de Tipos Estruturas e Ponteiros
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
DAVID ANDERSON CARDOSO DANTAS
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Aula Prática 12 Operações com Arquivos Monitoria
Prof. Ricardo Santos PONTEIROS
Linguagem C : Ponteiros
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Estruturas de Dados Aula 2: Estruturas Estáticas 07/04/2014.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
3. Introdução à Linguagem C
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Joaquim José Hangalo  Podemos entender a memória do computador como um conjunto de células que armazenam informações.  Cada célula.
Operações com Arquivos Monitoria A estrutura FILE  É como um tipo de dado, mas não é um tipo propriamente dito  Definido no arquivo cabeçalho.
Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores
Aula Prática 11 Operações com Arquivos Monitoria
Programação de Computadores I – Arquivos
Ana Queiroga (aicmq) André Guedes (agl) Bruno Batista (bamb) Bruno Lins (bfol)
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
CES-10 INTRODUÇÃO À COMPUTAÇÃO
 2000 Prentice Hall, Inc. All rights reserved. 1 Capítulo 8 - Caracteres e Strings Sumário 8.1Introdução 8.2Conceitos Fundamentais de Strings e Caracteres.
Algoritmos e Programação MC102 Prof. Paulo Miranda IC-UNICAMP Aula 15 Ponteiros.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Profa. Maria Augusta Constante Puget
Ponteiros em C Prof. Kariston Pereira
Introdução à Linguagem C
Ponteiros. Programação II Professora: Mai-Ly vanessa horário: ter 9h-11h; sex 11h-13h Aula 1.
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
COMPILADORES 07 Prof. Marcos.
Programação em C Aula 9.
Programação de Computadores I – Arquivos Profa. Mercedes Gonzales Márquez.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Transcrição da apresentação:

Usando a Biblioteca Gráfica Allegro Monitoria de Introdução à Programação - EC Usando a Biblioteca Gráfica Allegro

Introdução Uma das mais populares ferramentas para confecção de jogos existentes, a biblioteca allegro fornece aos programadores de C/C++ rotinas de baixo nível necessárias para a programação de jogos, tais como manipulação de entradas, gráficos, efeitos sonoros, temporizadores. Ela é uma biblioteca multiplataforma (cross plataform), que pode ser trabalhada com diferentes compiladores em diferentes sistemas operacionais.

Criando um Programa

Hello World

Configurações Iniciais int allegro_init(); /*inicializa a biblioteca allegro*/ Todo programa que usa o Allegro deve ter, antes da chamada de qualquer outra função do Allegro, uma chamada a função allegro_init. Ela inicializa algumas variáveis e reserva memória para algumas operações do Allegro, deixando-o pronto para o uso.

Configurações Iniciais int install_timer(); int install_keyboard(); int install_mouse(); Após chamada a função allegro_init, são chamadas as funções install_keyboard, install_mouse e install_timer, que inicializam, respectivamente, o teclado, o mouse e os temporizadores.

Configurações Iniciais void allegro_exit(); Função utilizada ao final do programa para retirar os domínios do Allegro sobre o computador. Essa função não precisa obrigatoriamente ser chamada, pois a função allegro_init determina que ela seja chamada automaticamente quando o programa é encerrado.

Instalando o Modo Gráfico void set_color_depth(int depth); Função que determina o número de bits de cores a ser usado pelos gráficos (passado como argumento). O número de bits pode ser: 8 (256 cores) 15 (32768 cores) 16 (65536 cores) 24 (aproximadamente 32 milhões de cores) 32 (aproximadamente 4 bilhões de cores)

Instalando o Modo Gráfico int set_gfx_mode(int card, int w, int h, int v_w, int v_h); Deve ser chamada depois que for chamada a função set_color_deth. É responsável pela inicialização do modo gráfico. Parâmetros: int card - representa o driver gráfico a ser utilizado pelo Allegro, e que deve ser uma das constantes definidas pelo Allegro. Ex.: GFX_AUTODETECT. int w, int h - indicam, respectivamente, o tamanho horizontal e vertical da tela, em pixels. Ex.: 640, 480 int v_w, int v_h - indicam a resolução de uma possível tela virtual. Isto é utilizado em alguns jogos em que apenas uma parte (tela física) de um mapa (tela virtual), por exemplo, pode ser visualizada.

Bitmaps O Allegro trata todo gráfico que pode ser guardado na memória ou desenhado na tela como um bitmap, que nada mais é do que um modo de representar gráficos em formato binário. Para tal, o Allegro define um tipo BITMAP, com o qual o usuário pode manipular facilmente esses bitmaps. Bitmaps são, então, matrizes de pixels, em que cada valor indica uma cor. Declarando um bitmap: BITMAP *nome_do_bitmap;

Algumas Primitivas Gráficas void putpixel (BITMAP *bmp, int x, int y, int color); Desenha um ponto, no bitmap apontado por bmp, na coordenada (x, y), utilizando a cor especificada por color. void vline(BITMAP *bmp, int x, int y1, int y2, int color); Desenha uma linha vertical, no bitmap apontado por bmp, da coordenada (x, y1) até a coordenada (x, y2), utilizando a cor especificada por color. void hline(BITMAP *bmp, int x1, int y, int x2, int color); Desenha uma linha horizontal, no bitmap apontado por bmp, da coordenada (x1, y) até a coordenada (x2, y), utilizando a cor especificada por color. void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); Desenha uma linha, no bitmap apontado por bmp, da coordenada (x1, y1) até a coordenada (x2, y2), utilizando a cor especificada por color. void triangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color); Desenha um triângulo, no bitmap apontado por bmp, com vértices (x1, y1), (x2, y2) e (x3, y3).

Algumas Primitivas Gráficas void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); Desenha a borda de um retângulo, no bitmap apontado por bmp, da coordenada (x1, y1) até a coordenada (x2, y2), utilizando a cor especificada por color. void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); Desenha um retângulo, no bitmap apontado por bmp, da coordenada (x1, y1) até a coordenada (x2, y2), utilizando a cor especificada por color. void circle(BITMAP *bmp, int x, int y, int radius, int color); Desenha uma circunferência, no bitmap apontado por bmp, com centro (x, y) e raio radius, utilizando a cor especificada por color. void circlefill(BITMAP *bmp, int x, int y, int radius, int color); Desenha um círculo, no bitmap apontado por bmp, com centro (x, y) e raio radius, utilizando a cor especificada por color.

Exemplos putpixel(), hline(), vline(), line() : int main() { init(); #include <allegro.h> int main() { init(); int x; while (!key[KEY_ESC]) putpixel(screen, 100, 100, 2); hline(screen, 200, 100, 500, 3); vline(screen, 100, 200, 300, 4); line(screen, 200, 200, 500, 300, 5); } deinit(); return 0; END_OF_MAIN()

Exemplos rect(), rectfill(), circle(), circlefill() : #include <allegro.h> int main() { init(); while (!key[KEY_ESC]) rect(screen, 100, 100, 200, 200, 6); rectfill(screen, 100, 400, 200, 500, 7); circle(screen, 400, 150, 50, 8); circlefill(screen, 400, 450, 50, 9); } deinit(); return 0; END_OF_MAIN()

Funções de Bitmaps Criando um bitmap: Antes de usar um bitmap é necessário criá-lo. Para isso, usamos a seguinte função: BITMAP* create_bitmap(int widht, int height); Cria um bitmap na memória com largura width e altura height. O valor retornado é o do endereço da área de memória onde foi alocado o espaço; assim, caso a função retorne NULL, significa que não foi possível alocar a memória necessária para armazenar o bitmap com as dimensões requisitadas.

Funções de Bitmaps Limpando um bitmap: void clear_bitmap(BITMAP *bitmap); Limpa o bitmap apontado por bitmap para a cor 0 (zero). void clear_to_color(BITMAP *bitmap, int color); Limpa o bitmap apontado por bitmap para a cor especificada por color.

Funções de Bitmaps Desalocando espaço na memória: void destroy_bitmap(BITMAP *bitmap); Destrói o bitmap apontado por bitmap, liberando a memória ocupada por este. Colocando o bitmap na tela: void blit(BITMAP *source, BITMAP *dest, int source_x, int source_y, int dest_x, int dest_y, int width, int height); Copia uma área retangular, de largura width e altura height, da coordenada (source_x, source_y) do bitmap apontado por source para a coordenada (dest_x, dest_y) do bitmap apontado por dest. void draw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y); Copia inteiramente o bitmap apontado por sprite na coordenada (x, y) do bitmap apontado por bmp. Equivalente a blit(sprite, bmp, 0, 0, x, y, sprite->w, sprite->h).

Obs: A variável screen, pré-definida pelo allegro, é do tipo BITMAP, e corresponde a uma forma de representação da tela.

Paletas Vetor de 256 posições, no qual cada posição corresponde a um código de cor. Declaração: PALETTE nome_da_paleta; Funções relacionadas: void set_palette(PALETTE p); Seleciona a paleta especificada por p como a paleta a ser utilizada. BITMAP *load_bitmap ( char *filename, PALETTE pal); Carrega um bitmap de um arquivo, cujo nome é filename, e carrega a paleta por ele usada no endereço apontado por pal. O tipo do arquivo (BMP, LBM, PCX, TGA) é informado através da extensão do mesmo. Deve-se destruir o bitmap após o uso com a função destroy_bitmap. A função retorna NULL se houver algum erro no carregamento do arquivo.

Textos Assim como para os bitmaps e paletas, o Allegro define um tipo FONT, que contém a descrição de fontes que podem ser desenhadas na tela. Declaração: FONT *nome_da_fonte; Funções relacionadas: void textout(BITMAP *bmp, FONT *f, unsigned char *s, int x, int y, int color); Escreve a string s, na coordenada (x, y) do bitmap apontado por bmp, utilizando a fonte apontada por f e a cor color. Se o valor de color for -1, a cor utilizada será a cor original do bitmap da fonte. void textout_centre(BITMAP *bmp, FONT *f, unsigned char *s, int x, int y, int color); Semelhante a função textout, porém, imprime a string s centralizada na coordenada especificada. void textprintf(BITMAP *bmp, FONT *f, int x, int y, int color, char *fmt, ...); Escreve um texto formatado (no mesmo estilo da função printf) no bitmap apontado por bmp, na coordenada (x, y), utilizando a fonte apontada por f e a cor color. void textprintf_centre(BITMAP *bmp, FONT *f, int x, int y, int color, char *fmt, ...); Semelhante a função textprintf, porém, imprime o texto formatado centralizado na coordenada especificada.

Teclado A bilioteca allegro possui um vetor, o vetor key[], que vai de 0 a 127, e cujos elementos representam as teclas. Existem constantes definidas para auxiliar a verificar a tecla desejada.

Teclado Tecla Código na Array A, B ... Z KEY_A, KEY_B...KEY_Z Teclado Numérico 0 a 9 KEY_0_PAD ... KEY_9_PAD Teclado Normal 0 a 9 KEY_0 ... KEY_9 Esc KEY_ESC Enter KEY_ENTER Seta para a Direita KEY_RIGHT Seta para a Esquerda KEY_LEFT Seta para Cima KEY_UP Seta para Baixo KEY_DOWN Pause KEY_PAUSE Barra de Espaço KEY_SPACE Print Screen KEY_PRTSCR Shitf Esquerdo KEY_LSHIFT Shift Direito KEY_RSHIFT Control Esquerdo KEY_LCONTROL Control Direito KEY_RCONTROL Alt esquerdo KEY_ALT Alt Direito KEY_ALTGR

Double Buffering Técnica utilizada para evitar que a tela fique piscando sempre que a limpamos e desenhamos novamente sobre ela. Consiste em termos um bitmap auxiliar (chamado de buffer) que, normalmente, possui o tamanho da tela (ou o tamanho da região onde ocorre a animação), e em vez de desenharmos diretamente na tela, desenhamos nesse buffer, e em seguida desenhamos o buffer na tela.

Exemplos Animação sem Double Buffering: int main() { init(); int x; while (!key[KEY_ESC]) for (x = 200; x < 600; x += PASSO) clear(screen); circlefill(screen, x, 300, 100, 9); } for ( ; x > 200; x -= PASSO) deinit(); return 0; END_OF_MAIN()

Exemplos Animação com Double Buffering: int main() { init(); BITMAP *tela; int x; tela = create_bitmap(800, 600); while (!key[KEY_ESC]) for (x = 200; x < 600; x += PASSO) clear(tela); circlefill(tela, x, 300, 100, 9); blit(tela, screen, 0, 0, 0, 0, 800, 600); } for ( ; x > 200; x -= PASSO) deinit(); return 0; END_OF_MAIN()

Links Úteis http://www.allegro.cc http://equipe.nce.ufrj.br/adriano/c/apostila/allegro/docs/allegro.html