1 / 18

Introdução à Programação

Introdução à Programação. Aula Prática Biblioteca Allegro Monitoria 2013.1. O que é?. Allegro é uma biblioteca gráfica Open Source escrita em C e voltada para o desenvolvimento de jogos 2D em C/C++

montana
Download Presentation

Introdução à Programação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Introdução à Programação Aula Prática Biblioteca Allegro Monitoria 2013.1

  2. O que é? • Allegro é uma biblioteca gráfica Open Source escrita em C e voltada para o desenvolvimento de jogos 2D em C/C++ • Fornece rotinas básicas necessárias ao programador como funções de input, gráficas, som, texto, temporizadores, etc.

  3. Sites para aprender mais • Site oficial do Allegro: www.allegro.cc • Tutoriais: http://cinacademy.wikia.com/wiki/Allegro http://www.dcc.ufrj.br/~abdalla/allegro.html http://www.geocities.ws/weissengeist/allegro.html

  4. Esquema básico de um Jogo Antes do jogo começar devem ser feitas algumas inicializações da biblioteca bem como o carregamento das mídias do jogo e outras variáveis A parte principal está no game loop onde acontece a atualização do estado do jogo e o desenho dos frames Quando acaba o jogo o programa sai do loop e geralmente precisa liberar alguma memória utilizada e/ou executar alguma rotina de finalização

  5. Double Buffering Desenhar diretamente na tela do jogo geralmente não é uma técnica eficaz. Uma alternativa é utilizar a técnica de doublebuffering Usa-se uma tela auxiliar para montar todo o frame e quando ele está pronto Desenha-se a tela auxiliar na tela do jogo e depois limpa-se a tela auxiliar para recomeçar o processo

  6. O eixo Y invertido...

  7. COR As cores são valores inteiros e são representadas no formato RGB, podendo ser obtidas através da função intmakecol(int r, int g, int b). • Ex: intcor_amarela = makecol(255, 255, 0); O rosa puro (255, 0, 255) é utilizado como cor transparente no allegro. Ao ser desenhado um BITMAP, todos os pixels que estiverem nessa cor não serão desenhados.

  8. Inicializando a biblioteca

  9. BITMAPS O allegro possui o tipo estruturado BITMAP que serve para manipular imagens. • Para criar um BITMAP se usa a função: BITMAP* create_bitmap(intwidth, intheight); Ex:BITMAP* buffer = create_bitmap(800, 600); • Para carregar uma imagem externa se usa: BITMAP* load_bitmap(constchar *filename, RGB *pal); Ex:BITMAP* imagem = load_bitmap(“imagem.bmp”, NULL); • Para liberar um BITMAP se utiliza: void destroy_bitmap(BITMAP* bitmap); Ex:destroy_bitmap(imagem);

  10. DESENHANDO BITMAPS Há várias funções para desenhar BITMAPS. Eis as principais: • voiddraw_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y); • voidblit(BITMAP *source, BITMAP *dest, intsource_x, intsource_y, intdest_x, intdest_y, intwidth, intheight); • void draw_trans_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y); * • voidrotate_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, fixedangle); • void pivot_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int cx, int cy, fixed angle); • void stretch_sprite(BITMAP *bmp, BITMAP *sprite, int x, int y, int w, int h);

  11. DESENHANDO FIGURAS PRIMITIVAS Além de BITMAPS é possível desenhar várias figuras geométricas diferentes. Estas são algumas delas: • void putpixel(BITMAP *bmp, int x, int y, int color); • void line(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); • voidtriangle(BITMAP *bmp, int x1, y1, x2, y2, x3, y3, int color); • void rect(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); • void rectfill(BITMAP *bmp, int x1, int y1, int x2, int y2, int color); • void circle(BITMAP *bmp, int x, int y, int radius, int color); • void circlefill(BITMAP *bmp, int x, int y, int radius, int color); • void ellipse(BITMAP *bmp, int x, int y, intrx, intry, int color); • void ellipsefill(BITMAP *bmp, int x, int y, intrx, intry, int color); • void arc(BITMAP *bmp, int x, y, fixed ang1, ang2, int r, int color);

  12. TECLADO O Allegro possui um array de teclas que atualiza constantemente. Cada posição representa o estado de uma tecla (TRUE/FALSE) • key[MAXKEY]; Para acessar uma tecla específica existem defines para cada tecla: Ex: if( key[KEY_ENTER] ) faz_algo(); if( key[KEY_A] && !key[KEY_B] ) //Se pressionar A mas sem pressionar B faz_outra_coisa(); Para utilizar teclas especiais usa-se a variável global ‘key_shifts’ juntamente com algumas flags próprias para essas teclas fazendo um AND bit-a-bit: Ex: if (key[KEY_W]) { if (key_shifts & KB_SHIFT_FLAG) /* Usuárioestápressionandoshift + W. */ else /* Apenastecla W estásendopressionada*/ }

  13. TEXTO Para desenhar textos há duas funções principais: voidtextout_ex(BITMAP *bmp, const FONT *f, const char *s, int x, inty, intcolor, intbg); voidtextprintf_ex(BITMAP *bmp, const FONT *f, int x, int y, int color, intbg, const char *fmt, ...); No parâmetro de fonte pode-se utilizar a variável da fonte padrão do allegro ‘font’ ou carregar suas próprias fontes formato PCX usando as funções: FONT *load_font(const char *filename, RGB *pal, void *param); voiddestroy_font(FONT *f); No parâmetro ‘bg’ você escolhe a cor do fundo do texto. Para um fundo transparente se utiliza o valor -1 Ex: imprimindo uma string azul com a fonte padrão textprintf_ex(buffer, font, 10, 20, makecol(0,0,255), -1, “Seu nome eh: %s”, nome);

  14. SOM - MIDI O Allegro 4 usa MIDI como formato padrão de música de fundo. Apenas 1 midi pode ser tocado por vez. Há o tipo estruturado MIDI para a manipulação dessas músicas. Para carregar arquivos .mid usa-se a função MIDI* load_midi(constchar *filename); Ex: MIDI* musica = load_midi(“musica.mid”); Para liberar os midis alocados usa-se a função void destroy_midi(MIDI* midi); Ex: destroy_midi(musica); Para tocar, pausar, resumir ou parar um midi usa-se as funções: intplay_midi(MIDI* midi, int loop); void midi_pause(); void midi_resume(); void stop_midi(); A variável global ‘midi_pos’ indica a posição sendo tocada no momento e é um valor negativo quando não há midis tocando A variável global ‘midi_time’ indica a o tempo transcorrido em segundos do midi sendo tocado (possui valor zero quando não há midis tocando).

  15. SOM - SAMPLE O Allegro 4 usa WAV como formato padrão de efeitos sonoros. Vários efeitos podem ser tocados simultaneamente. Há o tipo estruturado SAMPLE para a manipulação desses efeitos. Para carregar arquivos .wavusa-se a função: SAMPLE* load_sample(constchar *filename); Ex: SAMPLE* efeito = load_sample(“efeito.wav”); Para liberar os samples carregados usa-se a função: voiddestroy_sample(SAMPLE *spl); Ex: destroy_sample(efeito); Para tocar um sample usa-se a função: intplay_sample(constSAMPLE* spl, intvol, int pan, intfreq, int loop);

  16. Dúvidas?

  17. Exercício Escreva um jogo simples de pegar objetos. O jogador controla um boneco através das setas direcionais e deve pegar uma bola que começará em uma posição aleatória da tela. Quando isso ocorrer deve-se incrementar um score mostrado em tela e mover a bola para outra posição aleatória. O jogo acaba quando o usuário pressionar a tecla ESC. Você também deve usar os sons fornecidos ou outros de sua preferência para colocar uma música de fundo no jogo e um efeito sonoro ao capturar a bola.

  18. Exercício Para detectar a colisão entre o personagem e a bola você pode usar a função: intbounding_box_collision(int x1, int y1, int w1, int h1, intx2, int y2, int w2, int h2) { if( (x1 > x2 + w2) || (y1 > y2 + h2) || (x2 > x1 + w1) || (y2 > y1 + h1) ) return FALSE; else return TRUE; } Os parâmetros representam a posição (x, y), a largura e altura dos dois objetos a que se quer testar uma possível colisão

More Related