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 flipmartinz13
      Alguém pode me ajudar nessa questão de C++? não estou conseguindo construir o algorítmo corretamente.

      5.92)    Faça um algoritmo que leia a matrícula, nome, sexo e três notas dos alunos de uma escola e obtenha os seguintes resultados:
      a) A matrícula da aluna que obteve a maior média.
      b) A matrícula do aluno que obteve a menor média.
      c) O percentual de mulheres na turma.
      d) Quantos alunos foram aprovados, independente do sexo.
      e) O percentual de alunas aprovadas.
      Obs.: o flag é uma matrícula igual a 0 (zero).
    • By flipmartinz13
      Estou tentando fazer esse exercício de introdução a programação em C++, e estou tendo dificuldades para criar os algoritmos. Alguém poderia me ajudar?


      Uma agência de turismo quer fazer um levantamento das praias da cidade para um programação turística de verão, sabendo-se que cada praia tem um nome e uma distância (em Km) do hotel. Criar um algoritmo que forneça os seguintes dados:
      18

       Porcentagem de turistas nas praias próprias do hotel
       A praia mais adiante
       Nome e distancia das praias não-próprias com distancia do hotel maior que 10 km.
      O algoritmo acaba quando se digita @ para nome da praia.
    • By danisj
      #include<iostream>
      using namespace std;
      int BuscaBin (int lista[], int baixo, int alto, int chave)
      {
          int central;
          int valorcentral;
          while (baixo <= alto)
          {
              central = (baixo + alto)/2;
              valorcentral = lista[central];
              if (chave == valorcentral)
                  return central;
              else if (chave < valorcentral)
                  alto = central -1;
              else
                  baixo = central + 1;
          }
      }
      int main()
      {
          int a[10];
          int chave, pos;
          cout << "Introduza uma lista de 10 inteiros:";
          for (pos = 0; pos < 10; pos++)
              cin >> a[pos];
          cout << "Introduza chave a buscar:";
          cin >> chave;
          pos = 0;
          while ((pos = BuscaBin(a, 0, 9, chave))!= -1)
          {
              pos++;
          }
          cout << chave << " está na lista "  << " vezes na lista " << endl;
      }
          
      O objetivo é inserir uma lista e resultar  numa busca binária e ele retornar a chave, não posso alterar a função BuscaBin
    • By Matex5
      Sua tarefa é implementar uma árvore de busca binária que armazene strings. A ordem de inserção deverá ser alfabética crescente, ou seja, se o valor do elemento da raiz for “iguana”, então a palavra “beterraba” deverá ser inserida na subárvore da esquerda, enquanto a palavra “pagode” deverá ser inserida na subárvore da direita.
      Devem ser declaradas a struct e implementadas as seguintes funções da árvore:
      • criar(): inicialização da árvore.
      • buscar(): busca de um elemento na árvore.
      • inserir(): inserção de um elemento na árvore.
      • remover(): remove um elemento da lista.
      • estaVazia(): retorna um booleano indicando se a árvore está vazia.
      • ehEstritamenteBinaria(): retorna um booleano indicando se a árvore é estritamente binária.
      • ehQuaseCompleta(): retorna um booleano indicando se a árvore é quase completa.
      • ehCompletaCheia(): retorna um booleano indicando se a árvore é completa (cheia).
      • preOrdem(): visita e imprime os elementos da árvore em PRÉ-ORDEM (“RED”).
      • emOrdem(): visita e imprime os elementos da árvore EM-ORDEM (“ERD”).
      • posOrdem(): visita e imprime os elementos da árvore em PÓS-ORDEM (“EDR”). Após implementar a estrutura de dados, escreva um programa em C/C++ que permita ao usuário executar as funções acima

    • By FineMustache
      Fiz um programa que calcula o reajuste de salário de 5 funcionários armazenando seus nomes e salários em vetores, porém o salário já reajustado aparece com o mesmo valor do salário original.
      /* Armazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela */ #include <iostream> #include <locale.h> #include <string> #include <string> #include <stdlib.h> #include <cstdlib> using namespace std; int main() { setlocale(0, "Portuguese"); system("color 0a"); system("MODE CON COLS=150 LINES=40"); string nomefunc[5]; double slfunc[5], slnovo[5]; int reaj, i; cout << "\n\tArmazenar o nome e o salário de 5 funcionários. Após o cadastro destas informações, deverá ser digitado o índice de reajuste salarial para todos os funcionários. O programa deverá calcular o novo salário e exibir todos os dados na tela"; cout << "\n\n\tDigite a porcentagem do reajuste (sem o sinal %): "; cin >> reaj; for (i=0; i<5; i++){ cout << "\n\n\tDigite o nome do funcionário: "; cin >> nomefunc[i]; cout << "\n\n\tDigite o salário de " << nomefunc[i] <<": "; cin >> slfunc[i]; slnovo[i] = slfunc[i] - slfunc[i] * (reaj / 100); } cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[0] << ") era de R$" << slfunc[0] << " e passará a ser de R$" << slnovo[0] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do segundo funcionário (" << nomefunc[1] << ") era de R$" << slfunc[1] << " e passará a ser de R$" << slnovo[1] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[2] << ") era de R$" << slfunc[2] << " e passará a ser de R$" << slnovo[2] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[3] << ") era de R$" << slfunc[3] << " e passará a ser de R$" << slnovo[3] << " com o reajuste de " << reaj << "%."; cout << "\n\n\tO salário do primeiro funcionário (" << nomefunc[4] << ") era de R$" << slfunc[4] << " e passará a ser de R$" << slnovo[4] << " com o reajuste de " << reaj << "%."; system ("PAUSE>NULL"); }  
×

Important Information

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