Ir ao conteúdo
  • Cadastre-se

Kevin Spiller

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por Kevin Spiller

  1. Olá pessoal estou com problema no seguinte código, eu consigo desenhar as primitivas para formar a nave porém nao consigo movimentá-las, ja usei printf para verificar se nao estou passando lixo na funçao q recebe a struct da main e esta td certo nisso. O código(nao irá funcionar pois os arquivos das músicas, imagem de plano de fundo, e as fontes das letras):

     

    #include <allegro5/allegro.h>
    #include <allegro5/allegro_audio.h>
    #include <allegro5/allegro_acodec.h>
    #include <allegro5/allegro_image.h>
    #include <allegro5/allegro_font.h>
    #include <allegro5/allegro_ttf.h>
    #include <allegro5/allegro_primitives.h>
    #include <stdio.h>
     
    const int LARGURA_TELA = 600;
    const int ALTURA_TELA = 640;
    const int FPS = 60;
     
    ALLEGRO_DISPLAY *janela = NULL;
    ALLEGRO_BITMAP *imagem = NULL;
    ALLEGRO_AUDIO_STREAM *musica = NULL;
    ALLEGRO_AUDIO_STREAM *musica2 = NULL;
    ALLEGRO_EVENT_QUEUE *fila_eventos = NULL;
    ALLEGRO_FONT *fonte = NULL;
    ALLEGRO_FONT *fonte2 = NULL;
    ALLEGRO_FONT *fonte3 = NULL;
    ALLEGRO_FONT *fonte4 = NULL;
    ALLEGRO_FONT *fonte5 = NULL;
    ALLEGRO_TIMER *timer = NULL;
     
    struct nave_espacial{
        int x;
        int y;
        int vidas;
        int velocidade;
        int borda_x;
        int borda_y;
        int pontos;
    };
     
    struct keys{
        int CIMA;
        int BAIXO;
        int DIREITA;
        int ESQUERDA;
        int SPACE;
    };
     
    void move_cima(struct nave_espacial nave){
        nave.y -= nave.velocidade;
        if(nave.y < 0)
            nave.y = 0;
    }
     
    void move_baixo(struct nave_espacial nave){
        nave.y += nave.velocidade;
     
        if(nave.y > ALTURA_TELA)
            nave.y = ALTURA_TELA;
    }
     
    void move_direita(struct nave_espacial nave){
        nave.x += nave.velocidade;
     
        if(nave.x > 310)
            nave.x = 310;
    }
     
    void move_esquerda(struct nave_espacial nave){
        nave.x -= nave.velocidade;
     
        if(nave.x < 0)
            nave.x = 0;
    }
     
    void desenha_nave(struct nave_espacial nave){
     
       imagem = al_load_bitmap("space.jpg");
     
        al_draw_bitmap(imagem,0,0,0);
     
        al_draw_filled_rectangle(nave.x-9,nave.y,nave.x-5,nave.y+29,al_map_rgb(255,255,0));
     
        al_draw_filled_rectangle(nave.x+9,nave.y,nave.x+5,nave.y+29,al_map_rgb(255,255,0));
     
         al_draw_filled_triangle(nave.x-18,nave.y+25,nave.x,nave.y-10,nave.x+18,nave.y+25,al_map_rgb(255,0,0));
     
         al_draw_filled_rectangle(nave.x-1.51,nave.y-11,nave.x+1.54,nave.y+25,al_map_rgb(0,0,0));
     
         al_flip_display();
     
    }
     
     
    void start(){
     
        imagem = al_load_bitmap("space.jpg");
     
        al_draw_bitmap(imagem, 0, 0, 0);
     
        al_draw_text(fonte2, al_map_rgb(0, 0, 0), LARGURA_TELA / 2, 150, ALLEGRO_ALIGN_CENTRE, "Instructions");
     
        al_draw_text(fonte5, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 300, ALLEGRO_ALIGN_CENTRE, "Your goals are simple:");
     
        al_draw_text(fonte5, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 370, ALLEGRO_ALIGN_CENTRE, "- Destroy the enemy ships to gather points");
     
        al_draw_text(fonte5, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 440, ALLEGRO_ALIGN_CENTRE, "- Defeat the boss and end the game");
     
        al_flip_display();
     
        al_rest(7);
     
        al_destroy_audio_stream(musica);
     
        musica2 = al_load_audio_stream("judas.ogg", 4, 1024);
     
        al_attach_audio_stream_to_mixer(musica2, al_get_default_mixer());
     
        al_flip_display();
     
        imagem=al_load_bitmap("space.jpg");
     
        al_draw_bitmap(imagem,0,0,0);
     
    }
     
    void menu(){
     
        al_attach_audio_stream_to_mixer(musica, al_get_default_mixer());
     
        al_set_audio_stream_playing(musica, true);
     
        imagem= al_load_bitmap("space.jpg");
     
        al_draw_bitmap(imagem, 0, 0, 0);
     
        al_destroy_audio_stream(musica2);
     
        al_draw_text(fonte2, al_map_rgb(0, 0, 0), LARGURA_TELA / 2, 150, ALLEGRO_ALIGN_CENTRE, "SPACE WAR");
     
        al_draw_text(fonte, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 300, ALLEGRO_ALIGN_CENTRE, "Enter -> Start");
     
        al_draw_text(fonte, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 370, ALLEGRO_ALIGN_CENTRE, "Esc -> Quit");
     
        al_draw_text(fonte4, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 440, ALLEGRO_ALIGN_CENTRE, "Controls:");
     
        al_draw_text(fonte3, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 500, ALLEGRO_ALIGN_CENTRE, "LEFT DOWN RIGHT UP ARROWS to move");
     
        al_draw_text(fonte3, al_map_rgb(255, 255, 255), LARGURA_TELA / 2, 540, ALLEGRO_ALIGN_CENTRE, "SPACE to shoot");
     
        al_flip_display();
     
    }
     
    bool inicializar()
    {
        if (!al_init())
        {
            fprintf(stderr,"Falha ao inicializar Allegro.\n");
            return 0;
        }
     
        if (!al_install_audio())
        {
            fprintf(stderr, "Falha ao inicializar áudio.\n");
            return 0;
        }
     
        if (!al_init_acodec_addon())
        {
            fprintf(stderr, "Falha ao inicializar codecs de áudio.\n");
            return 0;
        }
     
        if (!al_reserve_samples(1))
        {
            fprintf(stderr, "Falha ao alocar canais de áudio.\n");
            return 0;
        }
     
        if (!al_install_keyboard())
        {
            fprintf(stderr, "Falha ao inicializar teclado.\n");
            return 0;
        }
        if(!al_init_image_addon())
        {
            fprintf(stderr, "Falha ao alocar addons de imagem.\n");
            return 0;
        }
     
        janela = al_create_display(600, 660);
     
        al_init_font_addon();
     
        if (!al_init_ttf_addon())
        {
            fprintf(stderr, "Falha ao inicializar add-on allegro_ttf.\n");
            return -1;
        }
        if(!al_init_primitives_addon())
        {
            fprintf(stderr, "Falha ao inicializar add-on allegro_primitves.\n");
        }
     
        fonte = al_load_font("calibrib.TTF", 48, 0);
     
        fonte2 = al_load_font("impact.TTF", 70,0);
     
        fonte3 = al_load_font ("cambriab.TTF",20,0);
     
        fonte4 = al_load_font ("calibrib.TTF",40,0);
     
        fonte5 = al_load_font ("calibrib.TTF",30,0);
     
        if (!fonte)
        {
            al_destroy_display(janela);
            fprintf(stderr, "Falha ao carregar fonte.\n");
            return -1;
        }
        if (!fonte2)
        {
            al_destroy_display(janela);
            fprintf(stderr, "Falha ao carregar fonte.\n");
            return -1;
        }
        if (!fonte3)
        {
            al_destroy_display(janela);
            fprintf(stderr, "Falha ao carregar fonte.\n");
            return -1;
        }
     
        if (!janela)
        {
            fprintf(stderr, "Falha ao criar a janela.\n");
            return 0;
        }
        al_flip_display();
     
        musica2 = al_load_audio_stream("judas.ogg", 4, 1024);
     
        if (!musica2)
        {
            fprintf(stderr, "Falha ao carregar audio.\n");
            al_destroy_event_queue(fila_eventos);
            al_destroy_display(janela);
            return 0;
        }
     
        fila_eventos = al_create_event_queue();
        timer = al_create_timer(1.0/FPS);
        if (!fila_eventos)
        {
            fprintf(stderr, "Falha ao criar fila de eventos.\n");
            al_destroy_display(janela);
            return 0;
        }
     
        al_set_window_title(janela, "Space War");
     
        musica = al_load_audio_stream("brb.ogg", 4, 1024);
        if (!musica)
        {
            fprintf(stderr, "Falha ao carregar audio.\n");
            al_destroy_event_queue(fila_eventos);
            al_destroy_display(janela);
            return 0;
        }
        //al_start_timer(timer);
     
        al_register_event_source(fila_eventos, al_get_keyboard_event_source());
        al_register_event_source(fila_eventos, al_get_timer_event_source(timer));
        al_register_event_source(fila_eventos, al_get_display_event_source(janela));
     
        return 1;
    }
     
    int main()
    {
        bool sair = 0;
     
        bool desenha = 1;
     
        int tecla = 0;
     
        struct nave_espacial nave={310,627,6,7,7,3,0};
     
        struct keys atalhos={0,0,0,0,0};
     
        if (!inicializar())
        {
            return -1;
        }
     
        menu();
     
        al_start_timer(timer);
     
        while (!sair)
        {
               ALLEGRO_EVENT evento;
               al_wait_for_event(fila_eventos, &evento);
              if (evento.type == ALLEGRO_EVENT_DISPLAY_CLOSE)
              {
                    sair = true;
              }
     
              else if(desenha == 1 && al_is_event_queue_empty(fila_eventos))
              {
     
                if (evento.type == ALLEGRO_EVENT_KEY_DOWN)
                {
                    switch(evento.keyboard.keycode)
                    {
                    case ALLEGRO_KEY_ENTER:
                        tecla = 1;
                        break;
                    case ALLEGRO_KEY_ESCAPE:
                        tecla = 2;
                        break;
                    case ALLEGRO_KEY_UP:
                        atalhos.CIMA = 3;
                        break;
                    case ALLEGRO_KEY_DOWN:
                        atalhos.BAIXO = 4;
                        break;
                    case ALLEGRO_KEY_RIGHT:
                        atalhos.DIREITA = 5;
                        break;
                    case ALLEGRO_KEY_LEFT:
                        atalhos.ESQUERDA = 6;
                        break;
                    case ALLEGRO_KEY_SPACE:
                        atalhos.SPACE = true;
                        break;
                    }
                }
                else if(evento.type == ALLEGRO_EVENT_KEY_UP)
                {
                  switch(evento.keyboard.keycode)
                    {
                    case ALLEGRO_KEY_UP:
                        atalhos.CIMA = false;
                        break;
                    case ALLEGRO_KEY_DOWN:
                        atalhos.BAIXO = false;
                        break;
                    case ALLEGRO_KEY_RIGHT:
                        atalhos.DIREITA = false;
                        break;
                    case ALLEGRO_KEY_LEFT:
                        atalhos.ESQUERDA = false;
                        break;
                    case ALLEGRO_KEY_SPACE:
                        atalhos.SPACE = false;
                        break;
                    }
                }
              }
              if(evento.type == ALLEGRO_EVENT_TIMER)
              {
                desenha = 1;
                if(atalhos.CIMA)
                    move_cima(nave);
                if(atalhos.BAIXO)
                    move_baixo(nave);
                if(atalhos.DIREITA)
                    move_direita(nave);
                if(atalhos.ESQUERDA)
                    move_esquerda(nave);
              }
            if (tecla)
            {
                if (tecla)
                {
                    if (tecla == 1){
                        start();
                        desenha_nave(nave);
     
                    }
                    else if (tecla == 2){
                        return 0;
                    }
                }
     
                tecla = 0;
     
            }
     
            al_flip_display();
     
            }
     
        al_destroy_timer(timer);
        al_destroy_audio_stream(musica);
        al_destroy_event_queue(fila_eventos);
        al_destroy_display(janela);
        al_destroy_font(fonte);
     
        return 0;
    }
     
     
     
    Obrigado.

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!