Relatório Técnico Biblioteca Gráfica Allegro C++

Tipo de documento:Relatório

Área de estudo:Lingua Portuguesa

Documento 1

edu. br, rangeldequeiroz@gmail. com Equipe Caio Mychel Porto Nascimento Eudes Medeiros Maria Augusta Pyêttra Feitosa Bezerra Galdino {caio. nascimento,, eudes. medeiros, maria. Primitivas Gráficas. Bitmap. Sprite. Cores. Eventos. Introdução Com o advento da tecnologia nos dias atuais é comum observarmos uma constante interação entre homem e máquina. Um dos principais interlocutores entre ambos são as linguagens de programação, que permitem ao homem comandar as máquinas de tal forma que elas possam realizar diversas atividades. As linguagens de programação podem ser as mais variadas possíveis, podendo ser classificadas de alto e baixo nível, onde as de alto nível estão mais próximas da linguagem do usuário e as de baixo nível mais próximas da máquina.

Dentro dessas linguagens existe um grande número de bibliotecas que ajudam na implementação de funções, utilização de expressões matemáticas e como será tratado ao longo deste relatório, as bibliotecas gráficas. Aqui trataremos especificamente da biblioteca Allegro15. Seu código fonte é uma mistura de C, C++, Objective-C e Assembly. Allegro é uma palavra italiana que, no âmbito da Música, representa um andamento musical (grau de velocidade do compasso) “vivo, rápido, bilhante”, sendo mais rápido que o allegretto e mais lento que o presto. O allegro costuma situar-se entre 120 e 134 batidas por minuto, correspondendo usualmente ao primeiro e/ou ao último movimento das sonatas, sinfonias e concertos. A biblioteca Allegro é conhecida pela facilidade de permitir a entrada de dados via teclado, mouse, temporizadores, áudio e ainda tem uma pluralidade de sistemas operacionais que a suportam, a exemplo de Windows, Mac OS e Linux.

Tutorial de Instalação Inicialmente, para que seja possível a utilização da biblioteca Allegro é preciso instalá-la, diante disso a IDE (Integrated Development Environment) Microsoft Visual Studio foi escolhida. – Tutorial de instalação da biblioteca Allegro (3/12). Fonte: Próprios autores. Neste caso, o Gerenciador de Soluções encontra-se à direita, clica-se com o botão direito do mouse sobre o nome do projeto que foi definido na Figura 2 e o será obtida as informações presentes na Figura 4. Fig. – Tutorial de instalação da biblioteca Allegro (4/12). Em seguida, deve-se clicar em Instalar, após alguns instantes o conteúdo da Figura 7 será mostrado. Fig. – Tutorial de instalação da biblioteca Allegro (7/12). Fonte: Próprios autores. Basta clicar em OK e aguardar que a instalação da biblioteca aconteça. Fig.

– Tutorial de instalação da biblioteca Allegro (10/12). Fonte: Próprios autores. Novamente clicando no botão direito sobre o menu Gerenciador de Soluções, agora deve-se passar o mouse sobre a opção Adicionar e em seguida clicar em Novo Item. As opções seguintes podem ser vistas na Figura 11. Mensagens Nativas A biblioteca gráfica Allegro tem disponível ferramentas dos mais variados tipos que são conhecidos como add-on e um deles é o allegro_native_dialog. h, este pode ser utilizado em projetos de modo que exista a criação de mensagens de diálogo nativas da biblioteca. A sintaxe de inserção deste add-on é: #include <allegro5/alegro_native_dialog. h Uma das principais funções deste add-on é a al_show_native_message_box, que exibe janelas de diálogo simples como mostra a Figura 13 e que é descrita pelo Fragmento de Código 1.

Fragmento de Código 1 – Caixa de diálogo. A função flags também nos permite a inserção de ícones como os que podemos ver a seguir: ALLEGRO_MESSAGEBOX_WARN Ícone de aviso. ALLEGRO_MESSAGEBOX_ERROR Ícone de erro. ALLEGRO_MESSAGEBOX_QUESTION Ícone de interrogação. NULL Ícone genérico. Recursos Gráficos A quinta versão da biblioteca gráfica Allegro tem uma boa lista de recursos, nesta seção será apresentada alguns deles na subseções a seguir: Displays, Primitivas Gráficas, Bitmaps e Sprites. janela = al_create_display(640, 480); al_clear_to_color(al_map_rgb(255, 0, 255)); al_rest(10. al_destroy_display(janela); return 0; } Fonte: Compilado pelos próprios autores. No Fragmento de Código 2 é possível observar que a função al_create_display recebe dois parâmetros, largura e altura, e é responsável pelas dimensões da janela, já a função seguinte, al_clear_to_color recebe al_map_rgb com os três parâmetro de variação de cores utilizando o sistema RGB, dessa forma foi escolhido o caso (255, 0, 255) que é a cor magenta, como pode-se ver na Figura 14.

O código segue melhor descrito no Apêndicie B. Fig. Quadro 5 – Utilização da função al_set_window_position Função Tipo de Retorno Parâmetro Exemplo al_set_window_position void ALLEGRO_DISPLAY *display, int x, int y al_set_window_position(display1, 0, 0); Fonte: Compilado pelos próprios autores. Posiciona o display nas coordenadas (x, y) desejadas. Quadro 6 – Utilização da função al_set_window_tittle Função Tipo de Retorno Parâmetro Exemplo al_set_window_title void ALLEGRO_DISPLAY *display, const char *title al_set_window_title(display1, “Este é o display1”); Fonte: Compilado pelos próprios autores. Intitula o display com o título que lhe foi passado. Quadro 7 – Utilização da função al_destroy_display Função Tipo de Retorno Parâmetro Exemplo al_destroy_display void ALLEGRO_DISPLAY *display al_destroy_display(display); Fonte: Compilado pelos próprios autores.

Reprodução: Fig. – Triângulo utilizando comandos da Allegro Fonte: Próprios autores. A seguir os parâmetros passados para a função: x1 – Componente em X no primeiro ponto; y1 – Componente em Y no primeiro ponto; x2 – Componente em X no segundo ponto; y2 – Componente em Y no segundo ponto; x3 - Componente em X no terceiro ponto; y3 – Componente em Y no terceiro ponto; cor – Cor do triângulo; Quadro 109 – Utilização da função al_draw_circle Função Tipo de Retorno Parâmetro Exemplo al_draw_circle void float cx, float cy, float r, ALLEGRO_COLOR cor, float espessura al_draw_circle(100,100,40, al_map_rgb(2,255,25),6); Fonte: Compilado pelos próprios autores. Reprodução: Fig. – Circulo utilizando funções em Allegro Fonte: Próprios autores. jpg) que vem do inglês Joint Photographic Format; GIF (.

gif) que é a abreviação de Graphics Interchange Format; E por último o BMP (. bmp) que é abreviação de Bitmap. Abaixo encontram-se protótipos de algumas funções que manipulam bitmap: Quadro 110 – Utilização da função al_create_bitmap Função Tipo de Retorno Parâmetro Exemplo al_create_bitmap ALLEGRO_BITMAP* int largura, int altura bitmap1 = al_create_bitmap(640, 480); Fonte: Compilado pelos próprios autores. É criado um bitmap com largura e altura informados. Em geral são carregados no código como sendo imagens no formato. png. Como um Sprite permite vários estados, é comum unir as variações necessárias em apenas um bitmap, evitando que seja preciso o carregamento de muitos bitmap. No Fragmento de Código 3, é possível observar duas funções que chamam dois bitmap que pelo nome ao qual estão salvos e seu formato pois estão na mesma página que o projeto, na main essas funções vão se interligar para que formem um Sprite como mostra a Figura 14, podendo ser melhor visualizado com o código completo existente no Apêndicie C.

Fragmento de Código 3 – Sprite. Cores A biblioteca Allegro possui alguns sistemas de cores, um dos mais utilizados é o RGB, que fornece mais de dezesseis milhões de cores diferentes. A estrutura ALLEGRO_COLOR descreve as cores de forma independente utilizando as funções al_map_rgb() e al_unmap_rbg(). O sistema RGB é responsável por tratudir uma cor para uma struct ALLEGRO_COLOR, em outras palavras é uma forma de combinar as três cores primárias do sistema, vermelho (red), verde (green) e azul (blue), para obter uma outra. Quadro 154 – Utilização da função al_map_rgb Função Tipo de Retorno Parâmetro Exemplo al_map_rgb ALLEGRO_COLOR unsigned char r, unsigned char g, unsigned char b al_map_rgb(255,255,255); Fonte: Compilado pelos próprios autores.

Eventos São ações que ocorrem no software, desde cliques e movimentos de mouse até teclas serem acionadas, temporizadores disparou, etc. Libera o espaço de memória que havia sido reservado para a fila de eventos. Eventos de display São eventos que captam mudanças relacionadas à alguma janela, dessa forma uma das sintaxes usadas é a ALLEGRO_EVENT_DISPLAY_*, sendo o asterisco o identificador que determina qual tipo de evento o display está exposto. Uma das mudanças devido aos eventos no display pode ser observada em relação à Figura 1, onde temos somente uma janela em branco, já na Figura 5, temos uma imagem sendo exibida na janela. Fragmento de Código 4 – Imagem em Janela int main (){. janela = al_create_display(640, 426); imagem = al_load_bitmap("DaTpuRdWAAMJcBd. type, como por exemplo: if(evento.

type == ALLEGRO_EVENT_DISPLAY_CLOSE) std::cout << “A janela foi fechada” << std::endl; 3. Eventos de mouse Ocorrem quando o mouse interage com as janelas do software e para que a utilização desse recurso seja possível, é preciso que ocorra a chamada da função al_install_mouse. Quadro 210 – Utilização da função al_install_mouse Função Tipo de Retorno Parâmetro Exemplo al_install_mouse bool void al_install_mouse(); Fonte: Compilado pelos próprios autores. Permite a instalação do driver do mouse, retornando true caso a ação seja bem-sucedida e false caso não consiga ser executada. Ao utilizar o mouse dentro de uma janela específica, a função aplica um cursor a ele, caso a tarefa seja bem-sucedida a função retorna true, caso não, false.

Quadro 254 – Tipos de cursor de mouse Principais tipos de cursor ALLEGRO_SYSTEM_MOUSE_CURSOR_DEFAULT ALLEGRO_SYSTEM_MOUSE_CURSOR_PRECISION ALLEGRO_SYSTEM_MOUSE_CURSOR_ARROW Fonte: Compilado pelos próprios autores. Para utilizar qualquer um dos cursores citados no Quadro 232 é preciso utilizar a função al_set_system_mouse_cursor, e cada um deles representa um tipo de cursor de mouse diferentes. Quadro 265 – Utilização da função al_grab_mouse Função Tipo de Retorno Parâmetro Exemplo al_grab_mouse bBool ALLEGRO_DISPLAY* display al_grab_mouse(janela); Fonte: Compilado pelos próprios autores. Esta função faz com que o mouse fique preso à uma única janela, caso seja bem-sucedida a função retorna true, caso não, retorna false. ALLEGRO_KEY_9 Teclas de 1 até 9 ALLEGRO_KEY_F1. ALLEGRO_KEY_F12 Teclas de F1 até F12 ALLEGRO_KEY_UP Tecla de seta para cima ALLEGRO_KEY_DOWN Tecla de seta para baixo ALLEGRO_KEY_RIGHT Tecla de seta para a direita ALLEGRO_KEY_LEFT Tecla de seta para a esquerda Fonte: Compilado pelos próprios autores 3.

Temporizador De todos os elementos já citados que estão contidos na biblioteca Allegro, este talvez seja o mais utilizado devido à possibilidade de realizar comando em instantes de tempo pré-determinados. Uma aplicação para esta funcionalidade poderia ser uma tela variando as cores a cada dois segundos. Em alguns softwares é necessário que haja a utilização de uma função de repetição que, no caso de jogos, é importante dependendo de qual estrutura é desejada. Esta, por sua vez, finaliza o temporizador. Quadro 321 – Macros e suas atividade Sintaxe Definição #define ALLEGRO_USECS_TO_SECS(x) ((x) / 1000000. Converte microssegundos em segundos #define ALLEGRO_MSECS_TO_SECS(x) ((x) / 1000. Converte milissegundos em segundos #define ALLEGRO_BPS_TO_SECS(x) (1. x)) Converte batidas por segundo em segundos #define ALLEGRO_BPM_TO_SECS(x) (60.

Fragmento de Código 5 – Áudio. som_verm = al_load_sample("wololo. ogg"); som_azul = al_load_sample("aiao. ogg"); musica = al_load_audio_stream("abertura-de-game-of-thrones. ogg", 4, 1024);. Quadro 354 – Utilização da função al_play_sample Função Tipo de Retorno Parâmetro Exemplo al_play_sample bool ALLEGRO_SAMPLE *spl, float gain, float pan, float speed, ALLEGRO_PLAYMODE loop, ALLEGRO_SAMPLE_ID al_play_sample(musica, int gain, int pan, int speed, ALLEGRO_PLAYMODE, NULL); Fonte: Compilado pelos próprios autores. Essa função executa o áudio inserido no progrma Quadro 365 – Utilização da função al_destroy_sample Função Tipo de Retorno Parâmetro Exemplo al_destroy_sample void ALLEGRO_SAMPLE *spl al_destroy_sample(musica) Fonte: Compilado pelos próprios autores. Por fim, essa função é responsável por destruir a variável, liberando espaço de memória.

Fontes Para utilizar textos e fontes, é preciso a inclusão do cabeçalho allegro5/alegro_font. h e allegro5/alegro_ttf. al_draw_text(fonte, al_map_rgb(255, 0, 0), 10, 10, ALLEGRO_ALIGN_LEFT, "Esquerda");. return 0; } No Fragmento de Código 6 é adicionada uma função para que possam ser utilizadas fontes no código, em seguida é passado para a função al_load_font o nome da fonte, o seu fomato e informações de tamanho de fonte e tabulação. Em seguida tem-se a função al_draw_text que tem como os parâmetro a fonte, cor das letras, tabulação, localização do texto e seu conteúdo. Quadro 376 – Utilização da função al_load_font Função Tipo de Retorno Parâmetro Exemplo al_load_font ALLEGRO_FONT *fonte char const *filename, int size, int flags al_load_font *fonte (“nome_arquivo.

formato”, int tamanho, int flags) Fonte: Compilado pelos próprios autores. Foi possível perceber também que por suas características a Allegro é muito utilizada em jogos devido à sua capacidade de produzir figuras em duas dimensões, mas não somente nestes a biblioteca é útil. Por fim, é interessante lembrar que o fato de ser uma biblioteca relativamente fácil de ser usada, a advento de ser multiplataformas, não necessitando que seja preciso alterações no código caso haja mudanças de sistemas operacionais, além de ter código aberto e não haver restrições para o seu uso, tornam a Allegro uma biblioteca interessante e confortável de se utilizar. Tendo como ponto negativo o fato de não suportar bem atividades em três dimensões.

Referências Bibliográficas ALMEIDA, J. VAN SINDEREN, M. TUTORIAL DE UTILIZAÇÃO DA BIBLIOTECA ALLEGRO PARA INICIANTES. Disponível em: <http://edcomjogos. dc. ufscar. br/tutoriais/tutorial_allegro. Game Programming All in One. a edição. Boston, Massachucets: Thomson, 2006. BETTIN, J. Model-driven software development. cc/manual/4/ http://liballeg. org/>. Acesso em: 24/10/2018. COL%20MDSD%20Frankel%20-%20Bettin%20-%20Cook. pdf>. BARZEL, R. AND SALESIN, D. H. Interactive pen-and-ink illustration. In: 21th Annual Conference on Computer Graphics and Interactive Techniques (SIGGRAPH 1994), Orlando (FL), USA, July 24 - 29, Proceedings, pp. h> #define FPS 60. define LARGURA_TELA 800 #define ALTURA_TELA 380 ALLEGRO_DISPLAY *janela = NULL; ALLEGRO_EVENT_QUEUE *fila_eventos = NULL; ALLEGRO_TIMER *timer = NULL; ALLEGRO_BITMAP *folha_sprite = NULL; ALLEGRO_BITMAP *fundo = NULL; void error_msg(const char *text) { al_show_native_message_box(janela, "ERRO", "Ocorreu o seguinte erro e o programa sera finalizado:", text, NULL, ALLEGRO_MESSAGEBOX_ERROR); } int inicializar() { if (!al_init()) { error_msg("Falha ao inicializar a Allegro"); return 0; } if (!al_init_image_addon()) { error_msg("Falha ao inicializar o addon de imagens"); return 0; } timer = al_create_timer(1.

FPS); if (!timer) { error_msg("Falha ao criar temporizador"); return 0; } janela = al_create_display(LARGURA_TELA, ALTURA_TELA); if (!janela) { error_msg("Falha ao criar janela"); al_destroy_timer(timer); return 0; } al_set_window_title(janela, "Sprites"); fila_eventos = al_create_event_queue(); if (!fila_eventos) { error_msg("Falha ao criar fila de eventos"); al_destroy_timer(timer); al_destroy_display(janela); return 0; } //carrega a folha de sprites na variavel folha_sprite = al_load_bitmap("run2. bmp"); if (!folha_sprite) { error_msg("Falha ao carregar sprites"); al_destroy_timer(timer); al_destroy_display(janela); al_destroy_event_queue(fila_eventos); return 0; } //usa a cor rosa como transparencia al_convert_mask_to_alpha(folha_sprite, al_map_rgb(255, 0, 255)); //carrega o fundo fundo = al_load_bitmap("background. png"); if (!fundo) { error_msg("Falha ao carregar fundo"); al_destroy_timer(timer); al_destroy_display(janela); al_destroy_event_queue(fila_eventos); al_destroy_bitmap(folha_sprite); return 0; } al_register_event_source(fila_eventos, al_get_display_event_source(janela)); al_register_event_source(fila_eventos, al_get_timer_event_source(timer)); al_start_timer(timer); return 1; } int main(void) { int desenha = 1; int sair = 0; //largura e altura de cada sprite dentro da folha int altura_sprite = 140, largura_sprite = 108; //quantos sprites tem em cada linha da folha, e a atualmente mostrada int colunas_folha = 4, coluna_atual = 0; //quantos sprites tem em cada coluna da folha, e a atualmente mostrada int linha_atual = 0, linhas_folha = 2; //posicoes X e Y da folha de sprites que serao mostradas na tela int regiao_x_folha = 0, regiao_y_folha = 0; //quantos frames devem se passar para atualizar para o proximo sprite int frames_sprite = 6, cont_frames = 0; //posicao X Y da janela em que sera mostrado o sprite int pos_x_sprite = 50, pos_y_sprite = 150; //velocidade X Y que o sprite ira se mover pela janela int vel_x_sprite = 4, vel_y_sprite = 0; if (!inicializar()) { return -1; } while (!sair) { ALLEGRO_EVENT evento; al_wait_for_event(fila_eventos, &evento); /* -- EVENTOS -- */ if (evento.

ttf", 48, 0); if (!fonte) { al_destroy_display(janela); error_msg("Falha ao carregar fonte"); return -1; } // Preenchemos a tela com a cor branca al_clear_to_color(al_map_rgb(255, 255, 255)); // Texto alinhado à esquerda al_draw_text(fonte, al_map_rgb(255, 0, 0), 10, 10, ALLEGRO_ALIGN_LEFT, "Esquerda"); // Texto alinhado à direita al_draw_text(fonte, al_map_rgb(0, 0, 255), LARGURA_TELA - 10, 50, ALLEGRO_ALIGN_RIGHT, "Direita"); // Texto centralizado al_draw_text(fonte, al_map_rgb(0, 255, 0), LARGURA_TELA / 2, 90, ALLEGRO_ALIGN_CENTRE, "Centro"); // Exemplo de impressão de valores variáveis int i = 4; char texto[50] = "formatado"; al_draw_textf(fonte, al_map_rgb(0, 0, 0), LARGURA_TELA / 2, 250, ALLEGRO_ALIGN_CENTRE, "Texto %d: %s", i, texto); // Atualizamos a tela al_flip_display(); // E aguardamos 10 segundos al_rest(10. Desalocação da fonte e da janela al_destroy_font(fonte); al_destroy_display(janela); return 0; }.

267 R$ para obter acesso e baixar trabalho pronto

Apenas no StudyBank

Modelo original

Para download