Ir para conteúdo
Fórum Script Brasil
  • 0

score para jogo pong em C, utilizando biblioteca allegro 5


joaovictorcaixeta

Pergunta

estou fazendo esse jogo para um trabalho da faculdade e gostaria de adicionar um placar a ele, mas não consigo pensar em alguma forma de fazer isso. tengo uma imagem de pokebola salva que seria para marcar os pontos, a cada ponto de alguém surge uma pokebola dessa no lado superior da tela do lado de quem marcou o ponto, é uma sugestão de como eu gostaria de fazer, mas não estou conseguindo pensar em como, caso alguém saiba como fazer isso ou so como instalar um score normal mesmo com números padrão seria de grande ajuda, segue o código do jogo funcionando até o momento

/* Copyright (C) 2016 Marcelo Serrano Zanetti - All Rights Reserved and Pedro Milano 2021

 * Licensed under the GNU GPL V3.0 license. All conditions apply.

 * Powered by Allegro: http://liballeg.org/license.html

 */



#include <stdio.h>
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_acodec.h>
#include <allegro5/allegro_audio.h>


const float FPS = 60;

const int SCREEN_W = 1024;

const int SCREEN_H = 546;

const int BOLA_TAMANHO = 32;

const int REBATEDOR_LARGURA = 32;

const int REBATEDOR_ALTURA = 32;

int main(int argc, char **argv)
{
   ALLEGRO_DISPLAY *display = NULL;

   ALLEGRO_EVENT_QUEUE *event_queue = NULL;

   ALLEGRO_TIMER *timer = NULL;

   ALLEGRO_BITMAP *treinador = NULL;

   ALLEGRO_BITMAP *pokemon = NULL;

   ALLEGRO_BITMAP *bola = NULL;

   ALLEGRO_BITMAP *background = NULL;

   ALLEGRO_SAMPLE *sample=NULL;

   ALLEGRO_SAMPLE *sample1=NULL;

   ALLEGRO_SAMPLE *sample2=NULL;

   ALLEGRO_SAMPLE *sample3=NULL;

   ALLEGRO_SAMPLE *sample4=NULL;


   bool redraw = true;
   bool doexit = false;


   if(!al_init())

    {

      fprintf(stderr, "failed to initialize allegro!\n");

      return -1;
    }

   if(!al_install_keyboard())

    {

      fprintf(stderr, "failed to initialize the keyboard!\n");

      return -1;
    }

   timer = al_create_timer(1.0 / FPS);

   if(!timer)

    {

      fprintf(stderr, "failed to create timer!\n");

      return -1;

   }

   if(!al_install_audio())

    {

      fprintf(stderr, "failed to initialize audio!\n");

      return -1;

   }


    else
        if (!al_reserve_samples(5))
        {
            fprintf(stderr, "Falha ao reservar samples!\n");
            return -1;
        }

   if(!al_init_acodec_addon())

    {

      fprintf(stderr, "failed to initialize audio codecs!\n");
      return -1;

   }

   if (!al_reserve_samples(1))

    {

      fprintf(stderr, "failed to reserve samples!\n");

      return -1;

   }

   sample = al_load_sample("audio/som.wav");

    if (!sample)

    {
        fprintf(stderr, "Falha ao carregar sample.\n");

        al_destroy_display(display);

        return false;

    }

       sample1 = al_load_sample("audio/intro.wav");

    if (!sample1)

    {
        fprintf(stderr, "Falha ao carregar sample1.\n");

        al_destroy_display(display);

        return false;

    }


        sample2 = al_load_sample("audio/treinador.wav");

    if (!sample2)

    {
        fprintf(stderr, "Falha ao carregar sample2.\n");

        al_destroy_display(display);

        return false;

    }

        sample3 = al_load_sample("audio/pokemon.wav");

    if (!sample3)

    {
        fprintf(stderr, "Falha ao carregar sample3.\n");

        al_destroy_display(display);

        return false;

    }

            sample4 = al_load_sample("audio/hit.wav");

    if (!sample4)

    {
        fprintf(stderr, "Falha ao carregar sample4.\n");

        al_destroy_display(display);

        return false;

    }

   al_set_new_display_flags(ALLEGRO_OPENGL | ALLEGRO_WINDOWED);

   display = al_create_display(SCREEN_W, SCREEN_H);

   if(!display)

    {
      fprintf(stderr, "failed to create display!\n");

      al_destroy_timer(timer);

      return -1;

   }

    al_init_image_addon();

    if(!al_init_image_addon())

    {

        fprintf(stderr, "failed to initialize the image addon!\n");

        return -1;

    }

   background = al_load_bitmap("imagens/fundo.png");

   if(!background)

    {

    fprintf(stderr, "falhou ao criar o background bitmap!\n");

      al_destroy_bitmap(treinador);
      al_destroy_bitmap(pokemon);
      al_destroy_display(display);
      al_destroy_timer(timer);

        return -1;


    al_set_target_bitmap(al_get_backbuffer(display));

    }

   treinador =  al_load_bitmap("imagens/treinador.png");


   if(!treinador)

    {

      fprintf(stderr, "failed to create treinador bitmap!\n");

      al_destroy_display(display);

      al_destroy_timer(timer);

      return -1;

   }

    pokemon = al_load_bitmap("imagens/pokemon.png");

      if(!pokemon)

        {

      fprintf(stderr, "failed to create pokemon bitmap!\n");

      al_destroy_display(display);

      al_destroy_timer(timer);

      return -1;

   }


    float bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0;

    float bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0;

    float bola_vx = -4;

    float bola_vy = -4;



    float treinador_pos_x = 0;

    float treinador_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0;

    float treinador_vy = 0;



    float pokemon_pos_x = SCREEN_W - REBATEDOR_LARGURA;

    float pokemon_pos_y = SCREEN_H / 2.0 - REBATEDOR_ALTURA / 2.0;

    float pokemon_vy = 0;



    int click=0;

    int savebvx;

    int savebvy;


    bola = al_load_bitmap("imagens/bola1.png");


        if(!bola)

    {

        fprintf(stderr, "falhou ao criar a bola bitmap!\n");

        al_destroy_display(display);

        al_destroy_timer(timer);

        return -1;

    }

   event_queue = al_create_event_queue();

   if(!event_queue)

    {

      fprintf(stderr, "failed to create event_queue!\n");

      al_destroy_bitmap(treinador);

      al_destroy_bitmap(pokemon);

      al_destroy_display(display);

      al_destroy_timer(timer);

      al_destroy_bitmap(background);

      return -1;

   }

    al_set_window_title(display, "PongMon - Pokémon Pong Version");
    al_set_target_bitmap(al_get_backbuffer(display));

    al_play_sample(sample1, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL);


    menu();


   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_clear_to_color(al_map_rgb(0,0,0));



   al_flip_display();



   al_start_timer(timer);



      while(1)

    {


        ALLEGRO_EVENT ev;

        al_wait_for_event(event_queue, &ev);

        al_play_sample(sample, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL);




        if(ev.type==ALLEGRO_EVENT_MOUSE_BUTTON_DOWN)

        {

            switch(ev.mouse.button)

            {

            case 1:

                printf("x:%d y:%d\n",ev.mouse.x, ev.mouse.y);

                if(click==0)

                {

                    savebvx=bola_vx;

                    savebvy=bola_vy;

                    bola_vx=0;

                    bola_vy=0;

                    click=1;


                }

                else

                {

                    bola_vx=savebvx;

                    bola_vy=savebvy;

                    click=0;

                }

                break;

            }

        }

        else if(ev.type == ALLEGRO_EVENT_TIMER)

        {

            if(bola_pos_y < 0 || bola_pos_y > SCREEN_H - BOLA_TAMANHO)

            {

                bola_vy = -bola_vy;

            //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // hitparede

            }



            if(bola_pos_x < 0 || bola_pos_x > SCREEN_W - BOLA_TAMANHO)

            {

                bola_pos_x = SCREEN_W / 2.0 - BOLA_TAMANHO / 2.0;

                bola_pos_y = SCREEN_H / 2.0 - BOLA_TAMANHO / 2.0;

                bola_vx = -4, bola_vy = -4;

            //al_play_sample(sample4, 1.0, 0.0,1.0,ALLEGRO_PLAYMODE_ONCE,NULL); // ponto


            }



            if(bola_pos_x <= treinador_pos_x + REBATEDOR_LARGURA)

                if(bola_pos_y+BOLA_TAMANHO>=treinador_pos_y)

                    if(bola_pos_y-BOLA_TAMANHO<=treinador_pos_y+REBATEDOR_ALTURA)


                        bola_vx = -bola_vx;



            if(bola_pos_x + BOLA_TAMANHO >= pokemon_pos_x )

                if(bola_pos_y+BOLA_TAMANHO>=pokemon_pos_y)

                    if(bola_pos_y-BOLA_TAMANHO<=pokemon_pos_y+REBATEDOR_ALTURA)

                        bola_vx = -bola_vx;



            bola_pos_x              += bola_vx;

            bola_pos_y              += bola_vy;

            treinador_pos_y += treinador_vy;

            if (treinador_pos_y < 0) treinador_pos_y = 0;

            if (treinador_pos_y >  SCREEN_H-REBATEDOR_ALTURA) treinador_pos_y = SCREEN_H-REBATEDOR_ALTURA;

            pokemon_pos_y  += pokemon_vy;

            if (pokemon_pos_y < 0) pokemon_pos_y = 0;

            if (pokemon_pos_y > SCREEN_H) pokemon_pos_y = SCREEN_H;

            redraw = true;







        }

        else if(ev.type == ALLEGRO_EVENT_KEY_DOWN)

        {

            switch(ev.keyboard.keycode)

            {

            case ALLEGRO_KEY_UP:

                pokemon=al_load_bitmap("imagens/pu1.png");

                 pokemon_vy=-4;

                break;



            case ALLEGRO_KEY_DOWN:

                pokemon=al_load_bitmap("imagens/pd1.png");

                pokemon_vy=4;

                break;



            case ALLEGRO_KEY_W:

                treinador=al_load_bitmap("imagens/u1.png");

                treinador_vy=-4;

                break;

            case ALLEGRO_KEY_S:

                treinador=al_load_bitmap("imagens/d1.png");

                treinador_vy=4;

                break;


            case ALLEGRO_KEY_ESCAPE:

                return 0;

                break;

            }

        }

        else if(ev.type == ALLEGRO_EVENT_KEY_UP)

        {

            switch(ev.keyboard.keycode)

            {

            case ALLEGRO_KEY_UP:

            pokemon=al_load_bitmap("imagens/pl1.png");

            case ALLEGRO_KEY_DOWN:

            pokemon=al_load_bitmap("imagens/pl1.png");

                pokemon_vy=0;

                break;



            case ALLEGRO_KEY_W:

            treinador=al_load_bitmap("imagens/r1.png");

            case ALLEGRO_KEY_S:

            treinador=al_load_bitmap("imagens/r1.png");

                treinador_vy=0;

                break;

            }

        }

        else if(ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE)

        {

            break;

        }



        if(redraw && al_is_event_queue_empty(event_queue))

        {

            redraw = false;



            al_clear_to_color(al_map_rgb(0,100,0));



            al_draw_bitmap(background, 0, 0, 0);

            al_draw_bitmap(treinador,treinador_pos_x, treinador_pos_y, 0);

            al_draw_bitmap(pokemon,pokemon_pos_x, pokemon_pos_y, 0);

            al_draw_bitmap(bola, bola_pos_x, bola_pos_y, 0);



            al_flip_display();

        }

    }


   al_destroy_bitmap(treinador);
   al_destroy_bitmap(pokemon);
   al_destroy_timer(timer);
   al_destroy_display(display);
   al_destroy_event_queue(event_queue);
   al_destroy_sample(sample);
   al_destroy_sample(sample1);
   al_destroy_sample(sample2);
   al_destroy_sample(sample3);
   al_destroy_sample(sample4);

   return 0;
}



void menu()
{
   ALLEGRO_BITMAP *menu=NULL;

   menu= al_load_bitmap("imagens/intro.png");
    if(!menu)
        {
        fprintf(stderr, "Falha ao carregar bitmap menu!\n");
        return -1;
    }

    al_draw_bitmap(menu, 0, 0, 0);
    al_flip_display();
    al_rest(8);



}

 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...