Jump to content
Sign in to follow this  
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;



}


Share this post


Link to post
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
Sign in to follow this  

  • Similar Content

    • By picsartisticc
      Meu professor passou uma prova pra casa para entregar na sexta feira e eu ainda não tive tempo de fazer nada e ainda tenho mais outra prova no mesmo dia. E definitivamente icc não tá como prioridade.
      Alguém pode pelo amooor me ajudar? 
      porque assim, máximo respeito pelos programadores viu? É muita paciência que vocês tem!
      1. Ele pede pra implementar um programa que tenha funções de soma, subtração, multiplicação e divisão que opere 2 números e retorne a sua respectiva operação.
      2. Implementar uma função que receba a quantidade de faltas no trabalho e retorne o salario mensal de um funcionario, cuja diaria é 100,00 de acordo com o numero de dias trabalhados.
      Tem essa formula aqui:
      dias_trabalhados=30-falta_no_mes
      salario_mensal=dias_trabalhadosx100
      3. Implantar um procedimento que receba 3 números e exiba-os em ordem crescente.

      Desde já muita gratidão por todos que tirarem um tempinho do tempo pra me salvar. Att.
    • By Luis011
      Estou tentando fazer um programa para cadastro de clientes, para o aprendizado apenas, estou com um erro que nao consigo resolver, cadastro algumas pessoas mas na hora de fazer a pesquisa desses cadastros eu coloco o cpf de uma e aparece as informacoes da proxima pessoa na fila de arrays. E quando tento pesquisar alguma pessoa que nao esteja no array 0 cai no else CPF INVALIDO, 
      Ai vai o codigo: 
      #include <iostream>
      #include <cstdio>
      #include <cstdlib>
      #include <cstring>
      char nome[50] [50];
       char email[50] [50];
       int cpf[50];
       int op;
       int i = 0;
       int a;
      int cpfpesquisa;
      char emailpesquisa[50];
      using namespace std;
      void pesquisa ();
      void cadastro();
      int main()
      {
          do{
          cadastro();
          pesquisa();
          }while(op == 2);
      system ("PAUSE");
      return 0;
      }
      void cadastro() {
       do{cout << "-----CADASTRO-----" << endl << endl;
       cout << "NOME: " ;
       cin >> nome;
       cout << endl <<"EMAIL: ";
       cin >> email;
       cout << endl << "CPF: ";
       cin >> cpf;
       cout << endl << "PARA CONTINUAR CADASTRANDO DIGITE 1";
       cin >> op;
       i++;
       }while(op == 1);
      }
      void pesquisa () {
      do{
      cout << "DIGITE 1 PARA PESQUISAR POR CPF E 2 PRA PESQUISAR POR EMAIL ";
      cin >> op;
      switch(op)
      {
          case 1: cout << "DIGITE O CPF: ";
                  cin >> cpfpesquisa;
                  for(a=0;a<50;a++) {
                      if(cpfpesquisa == cpf[a])
                      {cout << "NOME: " << nome[a] << endl << "EMAIL: " << email[a] << endl;
                  break;}
                  else{
                      cout << "CPF INVALIDO!"; }break;}break;

          case 2: cout << "DIGITE O EMAIL: ";
                  cin >> emailpesquisa;
                  for(a=0;a<50;a++){
                          if (strcmp( emailpesquisa,email[a]))
                          {
                              cout << "NOME: " << nome[a] << endl << "CPF: " << cpf[a] << endl;
                          break;}
                  }

      }
      cout << endl << "PARA CONTINUAR A PESQUISAR DIGITE 1" << endl << "PARA VOLTAR A CADASTRAR DIGITE 2 ";
      cin >> op;
      }while (op ==1);
      }
       
    • By Alvaro Pacífico Serpa
      Olá pessoal, eu estava copiando um trecho de um código fonte usando o file_gets_contents
      $log=file_get_contents($url); $trechoInicial = "VideoUrl('"; $trechoFinal = "')"; $posicao1 = strpos($log, $trechoInicial); $posicao2 = strpos( $log, $trechoFinal, $posicao1 ); $trechoCopiado = substr( $log, $posicao1 + strlen( $trechoInicial ), $posicao2 - $posicao1 - strlen( $trechoInicial ) ); echo $trechoCopiado; Estava funcionando perfeitamente e do nada parou de funcionar, tem alguma outra forma de fazer isto que estou fazendo?
    • By christin cley
      Construir um algoritmo em C++ que preencha um matriz quadrada de tamanho 4 pelo usuário. Após o preenchimento pelo usuário, verifique na diagonal principal qual foi o maior valor digitado e exiba na tela o valor. Por fim,  exiba na tela toda matriz em forma de matriz na tela.
    • By vinicius.benedito98
      Faça um Programa em Linguagem C que receba o nome e a nota de 180 alunos de uma sala e armazene em vetor. Calcule e mostre: 
      - A média da sala; 
      - O nome do aluno com a maior nota; 
      - O nome do aluno com a menor nota; 
      - Os nomes dos alunos aprovados;

      O meu código é esse :

      #define N 180 
      int main() { 
      int i, ind_maior, ind_menor; 
      float nota[N], soma=0, media, min_aprov=7; 
      char nome[N][50]; 
      for (i=0; i printf("Informe o nome do %dº aluno: ", i+1); 
      gets(nome); 
      printf("Informe a nota do %dº aluno: ", i+1); 
      scanf(" %d ", &nota); 
      soma += nota; 

      media = soma / N; 
      printf("\nMédia da sal: %.2f\n", media); 
      ind_menor = ind_maior = 0; 
      for (i=1; i if (nota < nota[ind_menor]) 
      ind_menor = i; 
      if (nota > nota[ind_maior]) 
      ind_maior = i; 

      printf("Menor nota: %s com %.2f\n", nome[ind_menor], nota[ind_menor]); 
      printf("Maior nota: %s com %.2f\n", nome[ind_maior], nota[ind_maior]); 
      printf("Aprovados:"); 
      for (i=0; i if (nota >= min_aprov) 
      printf("\t%s com: %.2f\n", nome, nota); 

      return 0; 
      }


      Porém quando vou executa-lo, o programa pede para inserir o nome e nota do aluno apenas uma vez, e fica por isso, ele não exibe os resultados, alguém pode me ajudar ?
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.