Ir ao conteúdo

Posts recomendados

Postado

 

Pessoal, é minha primeira vez aqui no fórum, então não sei se estou postando no lugar certo, estou no primeiro semestre

de engenharia da computação(sou iniciante) e estou aprendendo C++, preciso fazer um joguinho no allegro. Já consegui montar um cenário e colocar um personagem

que se movimenta (até ai o joguinho esta funcionando muito bem) mas preciso de ajuda para fazer ele mexer as pernas quando andar, fazer ele pular e fazer o fundo do senário

mover...... alguém sabe como me ajudar?

 

Este é meu código:

 

#include <allegro.h>
int x = 400; 
//int y = 500;
volatile int milisegundos;
void msec_counter() { milisegundos++; }
END_OF_FUNCTION(msec_counter) 
int main()
 { 
    allegro_init(); // abre allegro
    set_color_depth(16);
    set_gfx_mode(GFX_AUTODETECT_WINDOWED,900,600,0,0); // abre janela grafica
    install_keyboard(); // libera teclado
    
    milisegundos = 0;
    LOCK_FUNCTION(msec_counter);
    LOCK_VARIABLE(milisegundos);
    install_int_ex(msec_counter, MSEC_TO_TIMER(1));
    
          //BITMAPS - Imagens do jogo
         
    BITMAP *sky=load_bitmap("BMP/sky.bmp", NULL);
    BITMAP *montanhas=load_bitmap("BMP/montanhas.bmp", NULL);
    BITMAP *arvores=load_bitmap("BMP/arvores.bmp", NULL);
    BITMAP *chao2=load_bitmap("BMP/chao2.bmp", NULL);
    BITMAP *terra=load_bitmap("BMP/terra.bmp", NULL); 
    
    BITMAP* personagem[3];
  personagem[0] = load_bitmap("BMP/personagem.bmp", NULL);
  personagem[1] = load_bitmap("BMP/personagem1.bmp", NULL);
  personagem[2] = load_bitmap("BMP/personagem2.bmp", NULL);
  
  ///Variáveis
  int num_frames = 3;
  int frame_atual;
  int tempo_troca = 50;
    
    //UPDATE
      frame_atual = (milisegundos / tempo_troca) % num_frames;
 
    BITMAP *buffer = create_bitmap(900,600); //cria buffer
    
    
    int mover=300,x=390;     
    while (!key[KEY_ESC]) { 
    
    
    if(key[KEY_RIGHT]){ 
    mover= x += 1; 
}    
    if(key[KEY_LEFT]){ 
    mover= x -= 1;
    
}    
  
      
        //DRAW - chama imagens
    draw_sprite(buffer,sky,0,0);
    draw_sprite(buffer,montanhas,-15,130);
    draw_sprite(buffer,arvores,0,325);
    draw_sprite(buffer,terra,0,470);
    draw_sprite(buffer,chao2,-55,465);
    draw_sprite(buffer,chao2,205,465);
    draw_sprite(buffer,chao2,450,465);
    draw_sprite(buffer,chao2,610,465);
    
    //draw_sprite(buffer, link_esq[frame_atual], 200, 300);
    draw_sprite(buffer,personagem[frame_atual],mover,437); 
    draw_sprite(screen,buffer,0,0);

  
    clear(buffer); //limpa o buffer
    

}

allegro_exit();
return 0;

}  
     END_OF_MAIN() // permite portabilidade


 

arvores.bmp

chao2.bmp

montanhas.bmp

personagem.bmp

personagem1.bmp

personagem2.bmp

sky.bmp

terra.bmp

Postado

Boa noite.

Você precisará utilizar Sprites, o qual cada imagem (ou frame de imagem) representa um movimento do personagem, nessa lógica, você só precisara identificar qual imagem representa a direção que o usuário apertar, mudando conforme as teclas de direção.

Exemplo:

#define DIR_CIMA 0
#define DIR_BAIXO 1
#define DIR_ESQ 2
#define DIR_DIR 3

class Jogador
{
	private:
	int direcao;
	public:
	void mover(int novaDirecao){
		direcao = novaDirecao;
		//Agora so limpar e atualizar a tela com a imagem da nova direcao
      	//DesenharJogador(direcao);
	}
};
/* Desenhar imagem do jogador */
void DesenharJogador(int direcao){
	switch(direcao){
		case DIR_CIMA:
		//Desenhar imagem com jogador pra cima
		break;
		case DIR_BAIXO:
		//Desenhar imagem com jogador pra baixo
		break;
		case DIR_ESQ:
		//Desenhar imagem com jogador pra esquerda
		break;
		case DIR_DIR:
		//Desenhar imagem com jogador pra direita
		break;
		default:
		break;
	}
}

Para desenhar o fundo, apenas pesquise por Tiles e mapas usando matriz ( se for um código simples ),

Para desenhar o pulo dele, basta mudar de sprite(de pulo no caso), e diminuir a coordenada y referente a imagem na janela.

  • 2 semanas depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!