• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

[AM]Higor

[C] Allegro - Programando Jogos - Parte II

8 mensagens neste tópico

Olá!

Seja bem-vindo à nossa segunda parte do tutorial sobre como programar jogos utilizando a biblioteca Allegro e C/C++. No último artigo tivemos uma pequena introdução à biblioteca, seguido de um pequeno código exemplo. Comentamos sobre como escrever uma mensagem na tela e também como imprimir uma imagem. Hoje falaremos sobre como desenhar retas, retângulos e círculos e utilizar sons. O Allegro utiliza o plano cartesiano para desenhar gráficos. Mas, com algumas diferenças do plano cartesiano que conhecemos usualmente. No que estamos acostumados as coordenadas (0,0) encontram-se na parte inferior esquerda, enquanto no Allegro encontram-se na parte superior esquerda. Entenderemos melhor após fazermos o exemplo.Vamos lá.

#include <allegro.h>

int main ()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0,0);
   while(!key[KEY_ESC])
   {
      line(screen, 0,0, 800,600, makecol(0,255,0 ));
      line(screen, 0,600, 800,0, makecol(0,255,0 ));
   }
   return 0;
}

END_OF_MAIN();

1- line(screen, 0,0, 800,600, makecol(0,255,0 )); /*Imprime uma linha verde nas coordenadas (0,0) até (800,600) no bitmap screen..*/

2- line(screen, 0,600, 800,0, makecol(0,0,0 ));/*Imprime uma linha vermelha nas coordenadas (0,600) até (800,0) no bitmap screen */

3- END_OF_MAIN(); /*Reforçando novamente. Finaliza a execução do programa. Após ter finalizado a função main, precisa desse comando para que o compilador link corretamente a biblioteca.*/

4- /* A função de desenho de linha tem a forma de line(bitmap,X1,Y1,X2,Y2,makecol(R,G,B));*/

Visualiação do exemplo:

dev_geral:allegro_tuto_exemplo_2.jpg

Após termos aprendido como se desenha uma reta, próximo passo é vermos como se desenha um retângulo. Antes de começarmos, cabe uma pequena citação. O Allegro não preenche os retângulos. Então, se quisermos utilizar um retângulo preenchido teremos que utilizar a função rectfill. Veremos agora.

#include <allegro.h>

int main ()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0,0);
   while(!key[KEY_ESC])
   {
      rect(screen, 50,100, 400,200, makecol(0,255,0 ));
      rectfill(screen, 51,101, 399,199, makecol(255,0,0 ));
      rectfill(screen, 200,300, 400,500, makecol(0,0,255));
   }
   return 0;
}

END_OF_MAIN();

1- rect(screen, 50,100, 400,200, makecol(0,255,0 )); /* Desenha um retângulo sem preenchimento nas coordenadas X1,Y1(50,100) até X2,Y2(400,200). Nestle Paso, memoriam um rectangular chem enfranchisement ed Jordan's Verde.*/

2- erectile(screen, 51,101, 399,199, makecol(255,0,0 ));/*Preenche ou desenha um retângulo sólido nas coordenadas X1,Y1(51,101) até X2,Y2(399,199). Aqui, estamos preenchendo o retângulo criado pela função anterior rect com a cor vermelha.*/

3- rectfill(screen, 200,300, 400,500, makecol(0,0,255));/*Aqui, demonstramos que podemos criar um retângulo solido qualquer. Da posição X1,Y1(200,300) até X2,Y2(400,500). Azul.

4- /* A função de desenho de retângulo tem a forma de rect(bitmap,X1,Y1,X2,Y2,Cor); A função de preenchimento de retângulo é semelhante*/

Visualização do exemplo:

dev_geral:allegro_tuto_exemplo_3.jpg

Agora, aprenderemos como desenhar um circulo na tela. Assim como o retângulo, o Allegro não desenha um circulo um solido. Então, da mesma forma que fizemos com o retângulo, utilizaremos uma outra função para preenchê-lo.

#include <allegro.h>

int main ()
{
   allegro_init();
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0,0);
   while(!key[KEY_ESC])
   {
      circle(screen, 400,300, 100, makecol(255,0,0));
      circlefill(screen, 400,300,98, makecol(255,255,255));
   }
   return 0;
}

END_OF_MAIN();

1- circle(screen, 400,300, 100, makecol(255,0,0)); /* Desenha um circulo com centro em X,Y(400,300) de Raio 100 e cor vermelha.*/

2- circlefill(screen, 400,300,98, makecol(255,255,255)); /*Preenche o circulo desenhado anteriormente de branco.*/

3- /*A função de desenho de circulo solido ou não tem a forma de: circle/circlefill(bitmap, X,Y, RAIO,Cor);

Visualização do exemplo:

dev_geral:allegro_tuto_exemplo_4.jpg

No próximo artigo estaremos aprendendo como movimentar essas figuras que criamos agora e como detectar colisões de forma simples. Por enquanto, veremos como utilizar sons.

Alem de uma boa jogabilidade, ótimo enredo e gráficos estonteantes, falta um quesito para considerarmos um jogo perfeito. O Som. Um jogo perfeito reúne todas essas qualidades aliada a uma ótima trilha sonora que envolve o jogador enquanto joga. Para musica de fundo o Allegro utiliza o formato MIDI. Para outros efeitos sonoros o formato mais usual é o do tipo WAV.

#include <allegro.h>

int main ()
{
   allegro_init();
   install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL);
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0,0);
   MIDI *Pantera;
   Pantera=load_midi("C:\\pantera.midi");
   play_midi(Pantera,TRUE);
   while(!key[KEY_ESC])
   {
      textout_ex(screen, font, "Ouvindo uma musica de fundo",0,0, makecol(0,255,0), -1);
   }
   stop_midi();
   return 0;
}

END_OF_MAIN();

1- install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL); /* Inicializa o modulo de som.Geralmente será passado como parametro DIGI_AUTODETECT e MIDI_AUTODETECT para assim deixar o Allegro escolher o driver de SOM e o driver de MIDI automaticamente. E passa NULL como parâmetro do cfg_path para assim manter a compatibilidade com versões antigas do Allegro*/

2-/* A função que inicializa o modulo de som tem o seguinte modelo: install_sound(digi_card,midi_card,cfg_path); */

DIGI_AUTODETECT : instrui o Allegro a escolher o driver de som

DIGI_NONE : sem som digital

DIGI_SB : auto-detecta placas do tipo Sound Blaster

DIGI_SB10 : Sound Blaster 1.0 (8 bit mono)

DIGI_SB15 : Sound Blaster 1.5 (8 bit mono)

DIGI_SB20 : Sound Blaster 2.0 (8 bit mono)

DIGI_SBPRO : Sound Blaster Pro (8 bit stereo)

DIGI_SB16 : Sound Blaster 16 (16 bit stereo)

DIGI_AUDIODRIVE : ESS AudioDrive

DIGI_SOUNDSCAPE : Ensoniq Soundscape

MIDI_ADLIB : auto-detecta sintetizadores do tipo Adlib ou Sound Blaster FM

MIDI_OPL2 : sintetizador OPL2 (mono, usado em Adlib e Sound Blaster)

MIDI_2XOPL2 : sintetizador OPL2 dual (stereo, usado em Sound Blaster Pro-I)

MIDI_OPL3 : sintetizador OPL3 (stereo, usado em Sound Blaster Pro-II e acima)

MIDI_SB_OUT : interface MIDI Sound Blaster

MIDI_MPU : interface MIDI MPU-401

MIDI_DIGMID : sample-based software wavetable player

MIDI_AWE32 : AWE32 (EMU8000 chip)

3- MIDI Pantera; /*Criação do ponteiro do tipo MIDI Pantera.*/

4- Pantera=load_midi("C:\\pantera.midi");/*Leitura do arquivo MIDI pantera do HD*/

5- play_midi(Pantera,1);/*Toca o arquivo MIDI Pantera, com repetição até que o programa termine. Caso o parametro fosse 0, tocaria apenas uma vez. */

6- stop_midi(); /* Para de tocar a MIDI */

Outro exemplo, agora usando SAMPLES

#include <allegro.h>

int main ()
{
   allegro_init();
   install_sound(DIGI_AUTODETECT,MIDI_AUTODETECT,NULL);
   install_keyboard();
   set_color_depth(32);
   set_gfx_mode(GFX_AUTODETECT_WINDOWED, 800,600,0,0);
   MIDI *Pantera;
   SAMPLE *Tada;
   Pantera=load_midi("C:\\pantera.midi");
   Tada=load_wav("C:\\WINDOWS\\Media\\ringin.wav");
   play_midi(Pantera,1);
   play_sample(Tada,255,90,1000,1);
   while(!key[KEY_ESC])
   {
      textout_ex(screen, font, "Ouvindo uma musica de fundo",0,0, makecol(0,255,0), -1);
      textout_ex(screen, font, "E o efeito TADA",0,10, makecol(255,255,0), -1);
   }
   stop_midi();
   stop_sample(Tada);
   return 0;
}

END_OF_MAIN();

1- SAMPLE *Tada; /*Cria o ponteiro para Sample Tada*/

2- Tada=load_wav("C:\\WINDOWS\\Media\\ringin.wav");/*Lê da pasta windows o arquivo ringin*/

3- play_sample(Tada,255,90,1000,1);/*Toca o sample Tada com volume 255, balanço 90 e frequência 1000, com repetição. */

4- /*A função play_sample possui os seguintes parâmetros play_sample(SAMPLE ,volume,balanço, frequência,loop); O volume e o balanço variam de 0 até 255. Na frequência 1000 representa a frequência com que o arquivo foi gravado e loop se terá ou não repetição.*/

E assim terminamos hoje mais uma parte do nosso tutorial sobre Allegro. No próximo artigo veremos sobre funções do mouse, funções do teclado, funções do tempo e sobre colisões. Espero que vocês gostem dessa parte.

Midi que foi usada no exemplo

www.nilvaniaranda.com.br/HIGOR/pantera.midi

Higor Henrique Aranda Cotta.

Higor@nilvaniaranda.com.br

[Artigo no Wiki]

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

MUITO bom seu tutorial.... To começando agora e gostei bastante...

Obrigado :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou à espera da continuação do tutorial. :thumbdown:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

To fazendo um joguinho tipo Mario para aprender a programar jogos, consegui colocarf som de fundo graças a este tutorial, mas quando sonorito o pulo por exemplo com outra muisica Midi ao pular a musica do fundo para para tocar a musica do pulo, mas quando a musica do pulo que é curta termina a trilha sonora do fundo nao continua, teria alguma dica? Ah qual é o link Allegro - Programando Jogos - Parte I ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

e ae...

muito bom esse tutorial... =)

aprendi varias coisas...

vo fica aguardando o terceiro pra aprende a movimentação... =D

valeu mesmo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito bom mesmo adorei foi o único tutorial em que consegui mesmo meter som a funcionar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora