Ir para conteúdo
Entre para seguir isso  
Pablo Goulart

Como fazer colisão do personagem com o cenário ?

Recommended Posts

#include <allegro5\allegro.h>

#include <allegro5\allegro_native_dialog.h>

#include <allegro5\allegro_image.h>


const float FPS = 60;

const int SCREEN_W = 850;

const int SCREEN_H = 640;

const int BLUE = 64;


enum TECLADO { CIMA, BAIXO, DIREITA, ESQUERDA, END };


int main()

{

//_______VARIAVEIS DO JOGO________

ALLEGRO_DISPLAY *display = NULL;

ALLEGRO_BITMAP *blue = NULL;

ALLEGRO_BITMAP *Cenario = NULL;

ALLEGRO_EVENT_QUEUE *event_queue = NULL;

ALLEGRO_TIMER *timer = NULL;


float bouncer_x = SCREEN_W / 2.0 - BLUE / 2.0;

float bouncer_y = SCREEN_H / 2.0 - BLUE / 2.0;

bool key[] = { false, false, false, false };

bool redraw = true;

bool doexit = false;

bool desenha = true;

bool fim = false;


//________INICIALIZAÇÃO DO ALLEGRO 5__________

if (!al_init()) {

al_show_native_message_box(display, "Error", "Error", "Failed to initialize allegro!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

return 0;

}


if (!al_init_image_addon()) {

al_show_native_message_box(display, "Error", "Error", "Failed to initialize al_init_image_addon!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

return 0;

}

//al_set_new_display_flags(ALLEGRO_FULLSCREEN);

display = al_create_display(800, 600);


if (!display) {

al_show_native_message_box(display, "Error", "Error", "Failed to initialize display!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

return 0;

}

blue = al_load_bitmap("Blue.bmp");


Cenario = al_load_bitmap("Cubo.bmp");


if (!Cenario) {

al_show_native_message_box(display, "Error", "Error", "Failed to load image!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

al_destroy_display(display);

return 0;

}


event_queue = al_create_event_queue();


if (!event_queue) {

al_show_native_message_box(display, "Error", "Error", "Failed to create event_queue!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

al_destroy_display(display);

return 0;

}


timer = al_create_timer(1.0 / FPS);


if (!timer) {

al_show_native_message_box(display, "Error", "Error", "failed to create timer!",

NULL, ALLEGRO_MESSAGEBOX_ERROR);

al_destroy_display(display);

return 0;

}


al_set_target_bitmap(al_get_backbuffer(display));


//______INSTALAÇÃO________

al_install_keyboard();

//________REGISTRO___________

al_register_event_source(event_queue, al_get_display_event_source(display));


al_register_event_source(event_queue, al_get_timer_event_source(timer));


al_register_event_source(event_queue, al_get_keyboard_event_source());


al_flip_display();


al_start_timer(timer);


//_________LOOP PRINCIPAL__________

while (!doexit)

{

ALLEGRO_EVENT ev;

al_wait_for_event(event_queue, &ev);


if (ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)

{

fim = true;

}

if (ev.type == ALLEGRO_EVENT_TIMER) {


desenha = false;


if (key[CIMA] && bouncer_y >= 4.0) {

bouncer_y -= 4.0;

}


if (key[bAIXO] && bouncer_y <= SCREEN_H - BLUE - 4.0) {

bouncer_y += 4.0;

}


if (key[ESQUERDA] && bouncer_x >= 4.0) {

bouncer_x -= 4.0;

}


if (key[DIREITA] && bouncer_x <= SCREEN_W - BLUE - 4.0) {

bouncer_x += 4.0;

}


if (key[END])

redraw = true;

}

else if (ev.type == ALLEGRO_EVENT_KEY_DOWN) {

switch (ev.keyboard.keycode) {

case ALLEGRO_KEY_W:

key[CIMA] = true;

break;


case ALLEGRO_KEY_S:

key[bAIXO] = true;

break;


case ALLEGRO_KEY_A:

key[ESQUERDA] = true;

break;


case ALLEGRO_KEY_D:

key[DIREITA] = true;

break;

}

}

else if (ev.type == ALLEGRO_EVENT_KEY_UP) {

switch (ev.keyboard.keycode) {

case ALLEGRO_KEY_W:

key[CIMA] = false;

break;


case ALLEGRO_KEY_S:

key[bAIXO] = false;

break;


case ALLEGRO_KEY_A:

key[ESQUERDA] = false;

break;


case ALLEGRO_KEY_D:

key[DIREITA] = false;

break;


case ALLEGRO_KEY_ESCAPE:

doexit = true;

break;

}

}

if (redraw && al_is_event_queue_empty(event_queue)) {

redraw = false;


al_clear_to_color(al_map_rgb(255, 255, 255));


al_draw_bitmap(Cenario, 80, 0, 0);


al_draw_bitmap(blue, bouncer_x, bouncer_y, 0);


al_flip_display();

}

}

while (1);


//________DESTRUIR_________

al_destroy_display(display);

//al_destroy_bitmap(Correndo);

al_destroy_bitmap(Cenario);

al_destroy_event_queue(event_queue);

al_destroy_timer(timer);

al_destroy_bitmap(blue);


return 0;



}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por thiagofdiniz
      Estou fazendo um curso técnico e estou com uma duvida sobre um exercício que me foi passado com a seguinte pergunta:
      Elabore um algoritmo que leia dois números, some cinco ao de menor valor, compare os dois valores e mostre o maior.
       
      Mas no meu código, ele está somando e mostrando o de menor valor, e não o de menor
      Será que alguém pode me ajudar não estou conseguindo enxergar o erro.. 
      x=int(input('Digite um número e aperte ENTER')) y=int(input('Digite um número e aperte ENTER')) if x>y: y=y+5 if x>y: print(x) else: print(y) else: x<y x=x+5 if x<y: print(y) else: print(x)  
    • Por Bruno Goedert Dalmolin
      Não consigo apresentar as palavras equivalentes conseguem me ajudar???
      O código é o seguinte: 
       
      #include <stdio.h>
      char equivale(int ddd){
          switch(ddd){
              case 61:
                  return "Brasilia";
                  break;
              case 71:
                  return "Salvador";
                  break;
              case 11:
                  return "Sao Palo";
                  break;
              case 21:
                  return "Rio de Janeiro";
                  break;
              case 32:
                  return "Juiz de Fora";
                  break;
              case 19:
                  return "Campinas";
                  break;
              case 27:
                  return "Vitoria";
                  break;
              case 31:
                  return "Belo Horizonte";
                  break;
          }
      }
      int main(){
          int ddd;
          scanf("%d",&ddd);
          equivale(ddd);
          printf("%d",equivale(ddd));
      }
    • Por Caio Mekacheski
      Beleza galera, nesse meu primeiro post, quero compartilhar esse video onde inicio um tutorial básico pra aprender a programar em c++, só que de maneira prática. Um programa simples que eu escrevi pra fazer o cálculo da metragem cúbica de peças de madeira que eu beneficio aqui na minha pequena marcenaria. Um programa simples que me ajuda a executar uma tarefa tediosa, e que apresenta um conhecimento básico na programação em c++. Então resolvi fazer dele um tutorial prático para iniciantes. Nesse primeiro video eu apresento um esboço inicial pra entender o que o programa vai fazer. Conforme for desenvolvendo o programa, vou apresentando novos conceitos gradativamente. Espero que gostem. 
       
      https://www.youtube.com/watch?v=Obr8Jrp7LGQ
    • Por darkskull10
      Numa cidade as crianças costumam brincar com um jogo (de dois jogadores) onde:
      um jogador A define uma sequência de 10 letras usando: G, R e B (exemplo: G – G – G – R – B – R – B – B – B – R)
      um jogador B pode ler a sequência quantas vezes quiser
      o jogador B também pode dizer uma das letras e obter em quais posições a letra dada se encontra na sequência
      o jogador B também pode dar uma posição e saber qual letra ocupa a posição na sequência
      para finalizar, o jogador B deve dizer a sequência de letras, obtendo um ponto para cada acerto.
       
      Só consegui pensar nisso por enquanto.
       
      //identificar que letra ocupa esta posição na sequência:
      do{
      scanf(“%d”,&Posicao);
      Posicao=Posicao-1;}
      while ((Posicao<0)||(Posicao>9));
      printf(“%c”,Sequencia[Posicao]);
       
      //exibir sequencia
      for (Cont=0; Cont<=9; Cont++)
      printf(“%c”,Sequencia[Cont]);
       
      //exibir posições
      for (Cont=0; Cont<=9; Cont++)
      printf(“%d%c”,Cont+1,Sequencia[Cont]);
    • Por JPMarte
      Olá, sou estudante iniciante de programação e estou desenvolvendo um código para uma aula, onde esse é o enunciado:
       
      "Faça um código que ajude a calcular a resposta para seus exercícios de Física.
      As questões consistem em calcular a força de atração elétrica entre duas cargas puntiformes,  a força é calculada de acordo com a seguinte fórmula:
       
      F=K×Q1×Q2/D^2
       
      Utilize o valor de 100 para K, Q1, Q2 e D serão fornecidos pelo usuário.

      Mostre o valor de F com duas casas decimais.
       
      Entrada
          Serão fornecidos ao seu programa três valores inteiros, Q1, Q2 e D, respectivamente.
      Saída
          Seu programa deve mostrar o resultado da conta com exatas 2 casas decimais, de acordo com o exemplo abaixo."
       
      Então eu fiz o código que tirei print aqui, mas alguns resultados saem incorretos e sem as casas decimais necessárias!
      Em setprecision, eu coloquei o limite de duas casas (2), mas o programa mostra dois dígitos...
      Quando utilizei setprecision (4) ele até funcionou com resultados como 22.22, mas com números maiores, como 3600, não se mostra uma solução viável.
      Se alguém puder me ajudar, agradeço muito! 

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.