#include <stdio.h>
#include <stdlib.h>
#include <allegro5/allegro5.h>
#include <allegro5/allegro_font.h>
#include <allegro5/allegro_image.h>
#include <allegro5/allegro_audio.h> // biblioteca de som
#include <allegro5/allegro_acodec.h>
#include <allegro5/allegro_primitives.h> // permite colocar formas simples, linhas, pontos, etc. (formas primitivas)
#include <allegro5/allegro_ttf.h> //NEED FOR TTF FONTS

//HERE ARE THE GAME STATES, WE NEED TO KNOW WHAT "STATE" THE GAME IS IN...
#define STATE_START 1
#define STATE_PRESSED_BURACO 2
#define STATE_PRESSED_PULA_BURACO 3
#define STATE_PRESSED_CAI_BURACO 4
#define STATE_PRESSED_MACHUCADO_DESCANSA_OU_CORRE 5
#define STATE_PRESSED_SONO_DESCANSA_OU_CORRE 6
#define STATE_PRESSED_MACHUCADO_CORRE 7
#define STATE_PRESSED_MACHUCADO_DESCANSA 8
#define STATE_PRESSED_GAME_OVER 9
#define STATE_PRESSED_SONO_CORRE 10
#define STATE_PRESSED_SONO_DESCANSA 11
#define STATE_PRESSED_CAI_BURACO_AJUDA 12
#define STATE_PRESSED_CAI_BURACO_CORRE 13
#define STATE_PRESSED_CAI_BURACO_CORRE_RAPIDO 14
#define STATE_PRESSED_CAI_BURACO_CAVANDO 15
#define STATE_PRESSED_CAI_BURACO_CAVANDO_CORRE 16
#define STATE_PRESSED_CAI_BURACO_CAVANDO_AGUA 17
#define STATE_CORRE 18
#define STATE_ABRIGO 19

int gameState = STATE_START; //HERE IS OUR STARTING STATE, WE CAN CHANGE THIS TO USE IN OUR "IF"

ALLEGRO_FONT* font;
ALLEGRO_FONT* font1;
ALLEGRO_FONT* font2;

ALLEGRO_BITMAP* apresentacao;


char text[255] = "PRESSIONE ENTER PARA COMEÇAR O JOGO";
char text1[255] = " ";
char text2[255] = "@ TODOS DIREITOS RESERVADOS AO DINO PESCOÇUDO @";

void drawGame(int currentGameState); //HERE WE DEFINE A FUNCTION

void must_init(bool test, const char *description){
    if(test) return;

    printf("couldn't initialize %s\n", description);
    exit(1);
}

int main(){
    must_init(al_init(), "allegro"); // auxilia o must_init(), evitar de colocar instruções a mais par averificar erros.
    must_init(al_install_keyboard(), "keyboard");
    must_init(al_install_mouse(), "mouse"); // instalando o mouse

    ALLEGRO_TIMER* timer = al_create_timer(1.0 / 30.0);
    must_init(timer, "timer");

    ALLEGRO_TIMER* gameOverTimer = al_create_timer(3); //Game Over timer will last 3 seconds
    must_init(gameOverTimer, "gameOverTimer");

    ALLEGRO_EVENT_QUEUE* queue = al_create_event_queue();
    must_init(queue, "queue");

     // Permite que as formas e linhas tenham maior definição, deixar mais suave
    al_set_new_display_option(ALLEGRO_SAMPLE_BUFFERS, 1, ALLEGRO_SUGGEST); // imagem suave
    al_set_new_display_option(ALLEGRO_SAMPLES, 8, ALLEGRO_SUGGEST); // imagem suave
    al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR | ALLEGRO_MAG_LINEAR); // imagem suave

    ALLEGRO_DISPLAY* disp = al_create_display(1200, 800);
    must_init(disp, "display");


    //ALLEGRO_FONT* font = al_create_builtin_font();
    must_init(al_init_font_addon(), "font"); //WE NEED TO INIT FONT FIRST!
    must_init(al_init_ttf_addon(), "ttf font"); //THEN WE NEED TO INIT TTF FONTS
    font = al_load_ttf_font("Antonio-Bold.ttf", 14, ALLEGRO_ALIGN_LEFT); //NOW WE CAN CHOOSE SIZE
    font1 = al_load_ttf_font("Antonio-Bold.ttf", 14, ALLEGRO_ALIGN_LEFT);
    font2 = al_load_ttf_font("Antonio-Bold.ttf", 14, ALLEGRO_ALIGN_LEFT);


    must_init(al_init_primitives_addon(), "primitives"); // Para inserir linhas, formas e pontos no código

    al_start_timer(timer);
    al_register_event_source(queue, al_get_keyboard_event_source());
    al_register_event_source(queue, al_get_display_event_source(disp));
    al_register_event_source(queue, al_get_timer_event_source(timer));
    al_register_event_source(queue, al_get_mouse_event_source());  // adicionado para o mouse funcionar

    // imagens
    must_init(al_init_image_addon(), "image addon");
    apresentacao = al_load_bitmap("apresentacao.png");
    must_init(apresentacao, "apresentacao");

    // adicionando o audio ao jogo
    must_init(al_install_audio(), "audio");
    must_init(al_init_acodec_addon(), "audio codecs");
    must_init(al_reserve_samples(16), "reserve samples");

    // para música longa

    ALLEGRO_AUDIO_STREAM* music = al_load_audio_stream("music.opus", 2, 2048); // os números são referentes as áreas da memoria onde a musica sera armazenada. não mudar
    must_init(music, "music");
    al_set_audio_stream_playmode(music, ALLEGRO_PLAYMODE_LOOP); // música em loop
    al_attach_audio_stream_to_mixer(music, al_get_default_mixer()); // linha para o som sair, senão tem sai

    bool done = false;
    bool redraw = false;
    ALLEGRO_EVENT event;

    #define KEY_SEEN     1
    #define KEY_RELEASED 2

    unsigned char key[ALLEGRO_KEY_MAX];
    memset(key, 0, sizeof(key));
    al_hide_mouse_cursor(disp);



    while(1){
        al_wait_for_event(queue, &event);

        switch(event.type)
        {
            case ALLEGRO_EVENT_TIMER:
            {
                redraw = true;

                if(gameState == STATE_PRESSED_GAME_OVER && al_get_timer_count(gameOverTimer) > 0) //IF STATE IS GAME OVER AND TIMER HAS TICKED AT LEAST ONCE...
                {
                    sprintf(text, "%s", "RECOMEÇANDO O JOGO");
                    gameState = STATE_START; //...WE CHANGE GO BACK TO STATE "START"

                    //RESET THE GAME OVER TIMER!
                    al_stop_timer(gameOverTimer);
                    al_set_timer_count(gameOverTimer, 0);
                }

                break;
            }

            case ALLEGRO_EVENT_KEY_CHAR:
            {
                if(event.keyboard.keycode == ALLEGRO_KEY_ENTER && gameState == STATE_START) //IF WE PRESS ENTER WHEN STATE IS "START"....
                {
                    gameState = STATE_PRESSED_BURACO; //...NOW WE CHANGE STATE TO "PRESSED ENTER"

                }
                // PULA BURACO
                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_BURACO)
                {
                    gameState = STATE_PRESSED_PULA_BURACO;
                }

                // DINO PULA BURACO E CORRE
                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_PULA_BURACO)
                {
                    gameState = STATE_PRESSED_MACHUCADO_DESCANSA_OU_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_MACHUCADO_DESCANSA_OU_CORRE)
                {
                    sprintf(text, "%s", "DINO CONTINUOU CORRENDO, MAS SUA VELOCIDADE AINDA É BAIXA. DESSA FORMA, O METEORO ESTÁ CADA VEZ MAIS PRÓXIMO!");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_MACHUCADO_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_MACHUCADO_DESCANSA_OU_CORRE)
                {
                    sprintf(text, "%s", "DINO PAROU PARA DESCANSAR, MAS PERDEU MUITO TEMPO E O METEORO ESTÁ PRÓXIMO!");
                    sprintf(text1, "%s", "DINO DEVE CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_MACHUCADO_DESCANSA;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_MACHUCADO_CORRE)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_MACHUCADO_CORRE)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_MACHUCADO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRERENDO DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_MACHUCADO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_CORRE)
                {
                    sprintf(text, "%s", "VOCÊ MATOU O DINO!");
                    sprintf(text1, "%s", "GAME OVER! JOGAR NOVAMENTE (S)?");
                    gameState = STATE_PRESSED_GAME_OVER;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_S && gameState == STATE_PRESSED_GAME_OVER)
                {
                    sprintf(text, "%s", "RECOMEÇA");
                    sprintf(text1, "%s", "ENTER");
                    gameState = STATE_START;
                }


                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_CORRE)
                {
                    sprintf(text, "%s", "VOCÊ MATOU O DINO!.");
                    sprintf(text1, "%s", "GAME OVER! JOGAR NOVAMENTE?");
                    gameState = STATE_PRESSED_GAME_OVER;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_ABRIGO)
                {
                    sprintf(text, "%s", "VOCÊ MATOU O DINO!");
                    sprintf(text1, "%s", "GAME OVER! JOGAR NOVAMENTE (S)?");
                    gameState = STATE_PRESSED_GAME_OVER;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_ABRIGO)
                {
                    sprintf(text, "%s", "VOCÊ MATOU O DINO!");
                    sprintf(text1, "%s", "GAME OVER! JOGAR NOVAMENTE (S)?");
                    gameState = STATE_PRESSED_GAME_OVER;
                }

                //DINO PULA O BURACO E COME A PLANTA
                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_PULA_BURACO)
                {
                    sprintf(text, "%s", "DINO PAROU PARA COMER UMA PLANTA, E A DOR PASSOU. ENTRETANTO, A PLANTA DEIXOU DINO FICOU COM SONO.");
                    sprintf(text1, "%s", "DINO DEVE COMEÇAR A CORRER (A) OU PARAR PARA DESCANSAR (B)?");
                    gameState = STATE_PRESSED_SONO_DESCANSA_OU_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_SONO_DESCANSA_OU_CORRE)
                {
                    sprintf(text, "%s", "DINO COMEÇAR A CORRER MESMO SONOLENTO, E FICA BEM DEVAGAR. ASSIM, PERDEU MUITO TEMPO E O COMETA ESTÁ PRÓXIMO");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_SONO_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_SONO_DESCANSA_OU_CORRE)
                {
                    sprintf(text, "%s", "DINO PAROU PARA DESCANSAR, MAS PERDEU MUITO TEMPO. O METEORO ESTÁ PRÓXIMO.");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_SONO_DESCANSA;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_SONO_CORRE)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_SONO_CORRE)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }


                // CAI NO BURACO
                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_BURACO)
                {
                    sprintf(text, "%s", "DINO NÃO PULOU, E CAIU NO BURACO. DINO DEVE PEDIR AJUDA (A) OU SAIR DO BURACO CAVANDO (B)?");
                    sprintf(text1, "%s", " ");
                    gameState = STATE_PRESSED_CAI_BURACO;
                }

                // CAI BURACO SAI COM AJUDA
                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO)
                {
                    sprintf(text, "%s", "DINO PEDIU AJUDA, MAS DEMOROU MUITO PARA AJUDA-LO, E PERDEU MUITO TEMPO. ");
                    sprintf(text1, "%s", "DINO DEVE CORRER NORMALMENTE (A) OU CORRER O MAIS RÁPIDO POSSIVEL (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_AJUDA;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_AJUDA)
                {
                    sprintf(text, "%s", "DINO NÃO ESTÁ CORRENDO RÁPIDO O SUFICIENTE, E O METEORO ESTÁ SE APROXIMANDO. ");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO COMETA (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_CORRE)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_CORRE)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_AJUDA)
                {
                    sprintf(text, "%s", "DINO ESTAVA CORRENDO MUITO RÁPIDO, E ACABOU TROPEÇANDO E CAINDO. COM ISSO, O METEORO ESTÁ CADA VEZ MAIS PRÓXIMO ");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRENDO DO COMETA (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_CORRE_RAPIDO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_CORRE_RAPIDO)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_CORRE_RAPIDO)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_SONO_DESCANSA)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                // CAI BURACO SAI CAVANDO
                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO)
                {
                    sprintf(text, "%s", "DINO SAIU DO BURACO CAVANDO, MAS AGORA ESTÁ COM SEDE.");
                    sprintf(text1, "%s", "DINO DEVE IGNORAR A SEDE E COMEÇAR A CORRER (A) OU BEBER ÁGUA (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_CAVANDO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO)
                {
                    sprintf(text, "%s", "DINO COMEÇAR A CORRER COM SEDE, E ISSO O DEIXA MUITO LENTO. DESSA FORMA, O METEORO ESTÁ CADA VEZ MAIS PERTO.");
                    sprintf(text1, "%s", "DINO DEVE CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_CAVANDO_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO)
                {
                    sprintf(text, "%s", "DINO VAI BEBER ÁGUA, MAS PERDE MUITO TEMPO. DESSA FORMA, O METEORO ESTÁ CADA VEZ MAIS PERTO.");
                    sprintf(text1, "%s", "DINO DEVE CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_PRESSED_CAI_BURACO_CAVANDO_AGUA;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO_CORRE)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO_CORRE)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_A && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO_AGUA)
                {
                    sprintf(text, "%s", "DINO CONTINUAR CORRENDO, E O METEORO CADA VEZ MAIS PRÓXIMO! (IMAGEM CORRENDO)");
                    sprintf(text1, "%s", "DINO DEVE CONTINUAR CORRER DO METEORO (A) OU PROCURAR ABRIGO (B)?");
                    gameState = STATE_CORRE;
                }

                else if(event.keyboard.keycode == ALLEGRO_KEY_B && gameState == STATE_PRESSED_CAI_BURACO_CAVANDO_AGUA)
                {
                    sprintf(text, "%s", "DINO ESTÁ NO ABRIGO, E O METEORO ESTÁ CHEGANDO! (IMAGEM ABRIGO)");
                    sprintf(text1, "%s", "DINO DEVE VOLTAR A CORRER DO METEORO (A) OU CONTINUAR NO ABRIGO (B)?");
                    gameState = STATE_ABRIGO;
                }

                if(event.keyboard.keycode != ALLEGRO_KEY_ESCAPE)
                {
                    break;
                }
            }

            case ALLEGRO_EVENT_DISPLAY_CLOSE:
            {
                done = true;
                break;
            }
        }

        if(done)
            break;

        if(redraw && al_is_event_queue_empty(queue))
        {
            al_clear_to_color(al_map_rgb(0, 0, 0));

            drawGame(gameState); //CALL OUR FUNCTION

            al_flip_display();

            redraw = false;
        }

    }

    al_destroy_bitmap(apresentacao);
    al_destroy_font(font);
    al_destroy_display(disp);
    al_destroy_audio_stream(music);
    al_destroy_timer(timer);
    al_destroy_event_queue(queue);

    return 0;
}


void drawGame(int currentGameState) //NOW WE CAN DRAW THE TEXT DIRECTLY, WITH DIFFERENT POSITIONS/COLOURS
{
    if(gameState == STATE_START)
    {
        al_draw_bitmap(apresentacao, 70, 100, 0);
        al_draw_text(font, al_map_rgb(255, 255, 255), 200, 500, 0, "PRESSIONE ENTER PARA COMEÇAR O JOGO");
        al_draw_text(font, al_map_rgb(155, 255, 155), 200, 550, 0, "@ TODOS DIREITOS RESERVADOS AO DINO PESCOÇUDO @");
    }
    else if(gameState == STATE_PRESSED_BURACO)
    {
        al_draw_text(font, al_map_rgb(255, 255, 255), 200, 500, 0, "DINO PERCEBE UM METEORO VINDO EM SUA DIREÇÃO E COMEÇA A FUGIR. LOGO A SUA FRENTE, DINO VÊ UM BURACO!");
        al_draw_text(font, al_map_rgb(255, 255, 55), 200, 550, 0, "DINO PULAR O BURACO (A) OU IGNORAR O BURACO (B)?");
    }
    else if(gameState == STATE_PRESSED_PULA_BURACO)
    {
        al_draw_text(font, al_map_rgb(255, 255, 255), 200, 500, 0, "DINO PULOU O BURACO, MAS MACHUCOU A PATINHA!!! ");
        al_draw_text(font, al_map_rgb(255, 255, 55), 200, 550, 0, "DINO DEVE CONTINUAR CORRENDO (A), MESMO MACHUCADO, OU COMER UMA PLANTA MEDICINAL (B)?");
    }
    else if(gameState == STATE_PRESSED_MACHUCADO_DESCANSA_OU_CORRE)
    {
        al_draw_text(font, al_map_rgb(255, 255, 255), 200, 500, 0, "DINO, MESMO MACHUCADO, CONTINUOU CORRENDO. ENTRETANTO, ESTÁ CORRENDO MUITO DEVAGAR!");
        al_draw_text(font, al_map_rgb(255, 255, 55), 200, 550, 0, "DINO DEVE CONTINUAR CORRENDO MACHUCADO (A) OU DESCANSAR PARA SARAR A PATINHA (B)?");
    }


}
