Tutorial C++/ALLEGRO - Scrolling de estrelas.

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Tutorial C++/ALLEGRO - Scrolling de estrelas.

Mensagem por Da Galáxia em Sab 19 Fev 2011, 02:35

AULAS ANTERIORES.

Aula 1 - http://gmbr.forumeiros.com/t13494-aula-de-c-parte-1
Aula 2 - http://gmbr.forumeiros.com/t13639-aula-de-c-parte-2
Aula 3 - http://gmbr.forumeiros.com/t13638-aula-de-c-parte-3
Aula 4 - http://gmbr.forumeiros.com/t13641-aula-de-c-parte-4-calculadora-sem-interface-grafica
Aula 5 - http://gmbr.forumeiros.com/t13666-aula-de-c-parte-5-tipo-bool-estrutura-enun-e-operador-ternario
Aula 6 - http://gmbr.forumeiros.com/t14258-aula-de-c-parte-6-orientacao-a-objetos-criando-loja-em-modo-texto

Aqui estou usando a IDE DEV C++.

ATENÇÃO: não sei porque cargas d'agua pois mais que eu tenha tentado não aparece o comando kUTkIXEL quando fui postar. No comando que esta escrito
kutkixel(Buffer, Obj_estrela[i]->x, Obj_estrela[i]->y, makecol(255,255,255)); TROQUE AS LETRAS K POR p minusculos

Neste Primeiro tutorial de Allegro vou mostrar como criar um scrolling de estrelas, usando para isso uma classe com 3 atributos e um método.

C++ é a linguagem mais utilizada no mundo dos games, ela pode ser usada com enumeras bibliotecas gráficas como a Allegro e a OpenGL (esta é 3D), apenas para citar duas.

Para a programação Orientada a Objetos a classe é praticamente tudo. Neste tutorial vamos aprender a criar um scrolling de estrelas, e para isso vamos criar uma classe. Basicamente, uma classe tem os atributos, os métodos e um construtor, os atributos são as variáveis que o objeto que usa a classe pode ascender através de um ponto “.” , ou se o objeto for um apontador *, e vai ser instanciado, ele ascende aos atributos da classe usando uma flecha “->, da mesma forma o objeto ascende aos métodos. Qual a diferença entre atributos e métodos? Os atributos são informações, dados, enquanto que os métodos são ações, eventos. E o Constructor? O construtor é o que o nome diz, o que ele vai fazer é inicializar as variáveis da classe, que serão usadas como atributos dos objetos. No código que eu criei para o fórum, eu comentei as principais partes, vendo o código e seus comentários entenderas melhor. Esse programa funciona assim:

Ele possui uma classe com 3 atributos (x, y e vel), 1 metodo (checar).

Dentro de um laço for e usando o operador new, vão ser criadas 250 instancias do objeto estrela. Esse objeto instanciado terá seus atributos inicializados pelo construtor da classe, os atributos de posição (x e y) ocuparão toda a tela de modo aleatório, enquanto o atributo vel cuidara de mover as estrelas da direita para a esquerda. E o único método desta classe vai fazer uma checagem, para ver se as estrelas saíram pelo lado esquerdo da tela, se isso for verdade, o método joga as estrelas para fora da tela do lado direito e o ciclo continua. Então vamos lá.

Crie uma pasta com o nome C++Allegro1 ( ou o que quiser)

Com o dev C++ aberto vá em ARQUIVO – NOVO – PROJETO na tela que aparece, marque C++ (geralmente já é padrão), entre na aba MULTIMEDIA e escolha Allegro application static aperte OK ache e entre na pasta que criamos (C++Allegro1) e SALVE.
Aparecera uma tela com alguns códigos, eles são a inicialização da allegro. Mas para aprender, selecione todo o texto e apague.

Então vamos programar:

Digite isto:

Código:
/*
Programa scrolling de estrelas - C++/Allegro.
Por Sandro Alex Landim Fernandes - Da_Galaxia

comentários:
O programa consiste em uma classe com 3 atributos e 1 metodo, os atributos
são de posições e velocidade, enquanto que o metodo faz uma checagem na
posição horizontal(X) das estrelas. 
*/


//biblioteca
#include <allegro.h>

//<<constantes globais para a nossa tela>>
//para caso querermos mudar a resolução, basta mudar aqui.
const int MAX_X = 640; //tb poderia ser  #define MAX_X  640 //função do pré- 
const int MAX_Y = 480; //tb poderia ser  #define MAX_Y  480 //processador

//<<protótipos de fubções>>
void carregar();
void renderizar();
 
//<<classe>>
class Cestrelas{
      public:
           
            //constructor da classe, sempre com o nome da classe
            Cestrelas();//inicializa variaveis
            ~Cestrelas();//destructor, sintase como o constructor, mas com til
            //essas variaveis serão usadas para posicionamento e velocidade
            float x,y,vel;//atributos (propriedades) da classe   
            void checar();//metodo que vai checar se as estrelas sairam da tela

//abaixo, é o mosso objeto que vai usufluir da nossa classe , o asterisco (*)...
//indica que ele é um apontador, ou seja vamos instancia-lo usando o operador "new"
}*Obj_estrela[250];//serão criadas no maximo 250 estrelas


//apontador global para o nosso double buffer
BITMAP *Buffer;

//<<programa principal>>
int main(){
      //inicializações
      allegro_init();//inicia a allegro
     
      set_color_depth(32);//profundidade de cores (32 bits)
     
      set_gfx_mode (GFX_AUTODETECT_WINDOWED,MAX_X, MAX_Y,0,0);//placa de video
   
      install_timer();//instala temporizador
     
      srand(time(0));//randomização
     
      install_keyboard();//instala teclado
     
      install_mouse();//instala mouse
      //dentre outros

//chamando função. Esta, como vai construir as instancias do objeto estrela...     
//...deve ficar fora do laço.     
      carregar();

while(!key[KEY_ESC]){//laço, enquanto esc NÃO for pressionado
//chamando função. Esta, como vai desenhar as instancias do objeto estrela...                 
//...deve ficar dentro do laço.     
      renderizar();         
     
//joga o nosso buffer pra tela     
      blit(Buffer, screen, 0,0,0,0, MAX_X, MAX_Y);
//apaga a posição antiga dos objetos, para não borrar (tiri-a e veja o que acontece)     
      clear_bitmap(Buffer);         

}//fim laço
     
      //finalizações
      for(int i= 0; i< 250; i++)
            delete  Obj_estrela[i]; 
     
      destroy_bitmap(Buffer);
     
      allegro_exit();
     
      return 0;
}
END_OF_MAIN()

//<<criando constructor>>
//inicializa ou constroi as variaveis
Cestrelas::Cestrelas(){
      x = rand()% MAX_X;//distribuidas por toda a tela (640)
      y = rand()% MAX_Y;//distribuidas por toda a tela (480)
      vel = 0.5 + rand()%3;//velocidade 0.5 em 3 diferentes velocidades (mude-a)

//as variaveis acima estão randomizadas, ou seja, suas posições e velocidade
//serão aleatórias. Toda a vez que vc entrar no programa, as estrelas terão
//posições diferentes
}

//<<criando destructor>>
Cestrelas::~Cestrelas(){
      x = 0;
      y = 0;
      vel = 0;

}

//<<metodo checar>>
void Cestrelas::checar(){
      if(x > 0)
        x-= vel;
        else
              x = MAX_X + 10;//reinicia ciclo       

}//fim do metodo


//<<criando função carregar>>
void carregar(){
//criando buffer     
      Buffer = create_bitmap(MAX_X, MAX_Y);   
//criando as 250 instancias do objeto estrela     
      for(int i= 0; i< 250; i++)
            Obj_estrela[i] = new Cestrelas;     

//isso quer dizer que haverão 250 instancias do objeto estrela, cada uma,...
//independentemente, obedecendo o metodo da classe. Se criassemos 250...
//estrelas sem instancia-las, o que acontecesse com uma estrela, no mesmo...
//momento aconteceria tambem com as demais. Vamos fazer uma analogia: Vc...
//cria 5 inimigos, e faz um algoritimo de colisão, quando acertar um dos...
//inimigos este é destruído, o problema é que todos os outros tb seráo...
//destruídos. Mas, quando cria-se instancias do objeto o problema acaba.

}//fim função carregar 

void renderizar(){
             
//desenhando as 250 instancias do objeto estrela     
      for(int i= 0; i< 250; i++){
      //comando que desenha um pizel na tela (screen, pos. x, pos. y, cor branca)
      KutKixel(Buffer, Obj_estrela[i]->x, Obj_estrela[i]->y, makecol(255,255,255));
      //TROQUE OS 2 K DA PALAVRA ACIMA POR p minusculo
      Obj_estrela[i]->checar();//apontando as instancias para o metodo checar
      }

}//fim função renderiza
//FIM PROGRAMA==============


Precione F9 e salve dentro da pasta C++Allegro1 com o nome teste01 ( ou o que quiser)

VÁ EM EXECUTAR – COMPILAR & EXECUTAR
FIM DO TUTO.

Estou a disposição para qualquer pergunta.


Da Galáxia

Número de Mensagens : 348
Data de inscrição : 14/01/2010
Reputação : 1
Insignia 1 x 0 Insignia 2 x 0 Insignia 3 x 0
Prêmios
   : 0
   : 0
   : 0

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum