Jump to content

[C] Allegro - Programando Jogos - Parte II


[AM]Higor
 Share

Recommended Posts

[AM]Higor

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]

Marianna *TE AMO*Não! Não irei arrumar o seu computador...

Link to comment
Share on other 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 ?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.