var visibilidade_jogo_pdf_jm = false;
var jogo_da_memoria_pdf_jm = document.querySelector(".jogo_da_memoria_pdf_jm");
var container_pdf_jm = document.getElementById("container_pdf_jm");
var som_ativado_pdf_jm = true;
var som_pdf_jm = document.querySelector(".som_pdf_jm");
var sucesso_pdf_jm = document.getElementById("sucesso_pdf_jm");
var erro_pdf_jm = document.getElementById("erro_pdf_jm");
var fim_de_jogo_pdf_jm = document.getElementById("fim_de_jogo_pdf_jm");
var tela_final_pdf_jm = document.querySelector(".tela_final_pdf_jm");
var virando_a_carta_pdf_jm = document.getElementById("virando_a_carta_pdf_jm");
var jogo_pdf_jm = "";
var vez_pdf_jm = null;
var proximo_pdf_jm = null;
var tentativa_pdf_jm = 0;
let carta_anterior_pdf_jm;
var jg1_pdf_jm = null;
var jg2_pdf_jm = null;
var cor_de_acerto_pdf_jm = {"1":"#4CAF50","-1":"#03A9F4"};
var cor_padrao_pdf_jm = "antiquewhite";
var pontuacoes_pdf_jm = {"1":0,"-1":0};
var jogador_el_pdf_jm = {

    "1": document.querySelector("#jogador1_pdf_jm"),
    "-1": document.querySelector("#jogador2_pdf_jm")

}
var pontuacao_el_pdf_jm = { 
    
    "1": document.querySelector("#jogador1_pdf_jm .pontuacao_pdf_jm"),

    "-1": document.querySelector("#jogador2_pdf_jm .pontuacao_pdf_jm") //"-1" é o segundo jogador, usei para facilitar a troca na seleção dos jogadores

};
var nome_el_pdf_jm = {

    "1": document.querySelector("#jogador1_pdf_jm .nome_pdf_jm:first-child"),

    "-1": document.querySelector("#jogador2_pdf_jm .nome_pdf_jm:first-child")

}



let questoes_pdf_jm = [

    {"enunciado" : "Laura comeu 1/6 de um bolo e João 1/3 desse mesmo bolo. Qual é a fração que representa a maior quantidade de bolo que foi comido?",
        "par" : 1
    },

    {"enunciado": "1/3 > 1/6, João comeu mais bolo.",
        "par" : 1
    },

    {"enunciado": "Represente o número decimal 0,2 em forma de fração. Em seguida, represente essa fração na forma irredutível.",
        "par" : 2
    },

    {"enunciado": "\\(\\frac{2}{10} = \\frac{1}{5}\\)",
        "par" : 2
    },

    {"enunciado": "No aniversário de Maria, foram encomendados 900 salgadinhos, sendo \\(\\frac{2}{5}\\) de coxinha. Quantas coxinhas foram encomendadas para o aniversário?",
        "par" : 3
    },
    
    {"enunciado": "360",
        "par" : 3
    },

    {"enunciado" : "Para ir à escola, João utiliza sua bicicleta. Quando já havia percorrido \\(\\frac{1}{5}\\) da distância, sua bicicleta estragou. A partir daí ele foi caminhando. Qual a distância restante que ele deverá caminhar até a escola?",
        "par" : 4
    },

    {"enunciado": "João caminhará \\(\\frac{4}{5}\\) do percurso restante até a escola.",
        "par" : 4
    },

    {"enunciado": "Maria e José estão comendo uma pizza de 18 fatias. Sabendo que Maria comeu \\(\\frac{1}{3}\\) e José comeu \\(\\frac{1}{6}\\), quantas fatias eles comeram no total?",
        "par" : 5
    },

    {"enunciado": "9 fatias",
        "par" : 5
    },

    {"enunciado": "Num centro de convivência com 260 alunos, foram ofertadas três atividades extraclasse: música, dança e artes marciais. Sabe-se que \\(\\frac{3}{13}\\) escolheu música e dança, \\(\\frac{2}{5}\\) escolheu somente música, \\(\\frac{1}{4}\\) escolheu artes marciais e o restante escolheu apenas dança. Quantos alunos escolheram apenas dança?",
        "par" : 6
    },
    
    {"enunciado": "31 alunos escolheram apenas dança.",
        "par" : 6
    },

    {"enunciado" : "Em uma corrida participaram 26 ciclistas. Desses ciclistas, \\(\\frac{4}{13}\\) abandonaram a corrida por problemas na bicicleta. Quantos ciclistas terminaram a corrida?",
        "par" : 7
    },

    {"enunciado": "18 ciclistas",
        "par" : 7
    },

    {"enunciado": "Uma piscina teve \\(\\frac{4}{3}\\) da sua capacidade preenchida. No entanto, ainda faltam 2700 litros para que ela seja enchida por completo. Qual é a capacidade total dessa piscina?",
        "par" : 8
    },

    {"enunciado": "10.800 litros",
        "par" : 8
    },

    {"enunciado": "Nicolau tinha previsto, no orçamento, um gasto de R$ 2100,00 para pintar sua casa. Mas devido a imprevistos na obra, o valor aumentou 30%. Calcule quantos reais ele gastou na pintura?",
        "par" : 9
    },
    
    {"enunciado": "R$ 2.730,00",
        "par" : 9
    },

    {"enunciado" : "João corre todo fim de tarde. Sabe-se que ontem, a distância percorrida foi dada pela fórmula \\(P(n) = 4^{\\frac{n}{2}}\\) com \\(n = 3\\). Quantos km ele correu ontem?",
        "par" : 10
    },

    {"enunciado": "8 km",
        "par" : 10
    },

    {"enunciado" : "Para efetuar a compra de uma tv no valor de R$ 1420,00, José recebeu um desconto de R$ 426,00 no pagamento à vista. Qual é a fração que representa a porcentagem de desconto?",
        "par" : 11
    },

    {"enunciado": "\\(\\frac{30}{100}\\)",
        "par" : 11
    },

    {"enunciado": "Manoela comeu a quantia equivalente a 0,4444... de fatias de uma torta. Mostre em forma de fração quantas fatias ela comeu.",
        "par" : 12
    },

    {"enunciado": "\\(\\frac{4}{9}\\)",
        "par" : 12
    },

    {"enunciado": "Considere os números a seguir: \\({(\\frac{1}{4})}^{\\frac{-1}{2}}\\)  e \\({(4)}^{\\frac{-3}{2}}\\). Indique qual representa o maior valor.",
        "par" : 13
    },
    
    {"enunciado": "\\({(\\frac{1}{4})}^{\\frac{-1}{2}}\\) = \\({(4)}^{\\frac{1}{2}} = \\sqrt{4} = 2\\)",
        "par" : 13
    },

    {"enunciado" : "Lançando um dado comum (valores de 1 a 6), não viciado, qual as chances de se obter um valor ímpar?",
        "par" : 14
    },

    {"enunciado": "\\(\\frac{3}{6}\\)",
        "par" : 14
    },

    {"enunciado": "Dentre os números \\(\\frac{7}{5}\\), \\(1,25\\) e \\(\\frac{9}{8}\\), qual representa o maior e menor valor, respectivamente?",
        "par" : 15
    },

    {"enunciado": "\\(\\frac{7}{5}\\) e \\(\\frac{9}{8}\\)",
        "par" : 15
    },

]

let embaralhado_pdf_jm = [];

let interior_cartas_pdf_jm = [];

function abrir_jogo_da_memoria_pdf_jm(){

    pegarnumJogadores_pdf_jm();

    atualizarCamponomeJogador2_pdf_jm();


    if(visibilidade_jogo_pdf_jm){

        jogo_da_memoria_pdf_jm.classList.remove("fechar_pdf_jm");

        jogo_da_memoria_pdf_jm.innerHTML = "Abrir Jogo da Memória";

        container_pdf_jm.style.display = "none";

        visibilidade_jogo_pdf_jm = false;

    } else {

        jogo_da_memoria_pdf_jm.classList.add("fechar_pdf_jm");

        jogo_da_memoria_pdf_jm.innerHTML = "Fechar Jogo da Memória";

        container_pdf_jm.style.display = "block";

        visibilidade_jogo_pdf_jm = true;

    }
    
}

function voltar_tela_inicial_pdf_jm(){

    document.querySelector("#info_pdf_jm").style.visibility = "hidden";
    document.querySelector("#info_pdf_jm").style.opacity = "0";
    document.querySelector("#container_cartas_pdf_jm").style.visibility = "hidden";
    document.querySelector("#container_cartas_pdf_jm").style.opacity = "0";
    document.querySelector(".tela_inicial_pdf_jm").style.display = "flex";

}

function toggle_som_pdf_jm() {
    
    if(som_ativado_pdf_jm){

        som_pdf_jm.classList.toggle("som_desativado_pdf_jm");

        som_ativado_pdf_jm = false;

    } else {

        som_pdf_jm.classList.toggle("som_desativado_pdf_jm");

        som_ativado_pdf_jm = true;

    }

}

var listeners_pdf_jm = {}

for(i = 0; i < questoes_pdf_jm.length; i++){

    listeners_pdf_jm[i] = null;

}



function gerenciar_apos_erro(param_pdf_jm, x_pdf_jm, carta) {

let id_pdf_jm = parseInt(carta.parentNode.id);
listeners_pdf_jm[id_pdf_jm] = (event) => {
    desvirar_apos_erro(event, param_pdf_jm, x_pdf_jm, carta, listeners_pdf_jm[id_pdf_jm]);
  };
  x_pdf_jm.addEventListener("click", listeners_pdf_jm[id_pdf_jm]);
}

function desvirar_apos_erro(event, param_pdf_jm, x_pdf_jm, carta, desvirar_apos_erro_callback) {
  event.stopPropagation();
  carta_anterior_pdf_jm.classList.toggle('virada_pdf_jm');
  carta_anterior_pdf_jm.classList.add('disponivel_pdf_jm');
  carta.classList.toggle('virada_pdf_jm'); 
  carta.classList.add('disponivel_pdf_jm');
  tentativa_pdf_jm = 1;
  x_pdf_jm.style.display = "none";
  disponibilizar_pdf_jm();
  x_pdf_jm.removeEventListener("click", desvirar_apos_erro_callback);
  if(param_pdf_jm == "com_2_jogadores"){ 
    jogador_el_pdf_jm[vez_pdf_jm].classList.remove('pulsar');
    jogador_el_pdf_jm[proximo_pdf_jm].classList.add('pulsar');
    vez_pdf_jm = proximo_pdf_jm;
    proximo_pdf_jm = (parseInt(vez_pdf_jm, 10)*(-1)).toString(); 
  }
}




function fechar_tela_final_pdf_jm() {
    tela_final_pdf_jm.style.display = "none";
}

function sanitizeInput(input) {
  return input.replace(/[^a-zA-Z0-9\sçáâéêíóôúãõ]/g, '');
}

function disponibilizar_pdf_jm(){

    for(i=0; i<embaralhado_pdf_jm.length; i++) {

        if (!interior_cartas_pdf_jm[i].classList.contains('finalizado_pdf_jm')) {

            interior_cartas_pdf_jm[i].classList.add('disponivel_pdf_jm');
            
        }
       
    }

}

function indisponibilizar_pdf_jm() {
    
    for(i=0; i<embaralhado_pdf_jm.length; i++) {
    
        interior_cartas_pdf_jm[i].classList.remove('disponivel_pdf_jm');
    
    }
    
}


// Função para pegar o número de jogadores selecionado
function pegarnumJogadores_pdf_jm() {

	let numJogadores_pdf_jm = document.querySelector('input[name="numJogadores_pdf_jm"]:checked').value;

	return parseInt(numJogadores_pdf_jm);

}


// Função para exibir ou ocultar o campo de nome do jogador 2, dependendo do número de jogadores selecionado
function atualizarCamponomeJogador2_pdf_jm() {
	
    var numJogadores_pdf_jm = pegarnumJogadores_pdf_jm();

	var nomeJogador2_pdf_jmContainer_pdf_jm = document.querySelector('#nomeJogador2_pdf_jmContainer_pdf_jm');

	if (numJogadores_pdf_jm === 2) {

				nomeJogador2_pdf_jmContainer_pdf_jm.style.display = 'block';

			} else {

				nomeJogador2_pdf_jmContainer_pdf_jm.style.display = 'none';

			}

}

// Adiciona um listener para atualizar o campo de nome do jogador 2 sempre que o número de jogadores selecionado mudar

	var radioInputs_pdf_jm = document.querySelectorAll('input[name="numJogadores_pdf_jm"]');

	for (var i = 0; i < radioInputs_pdf_jm.length; i++) {

		radioInputs_pdf_jm[i].addEventListener('change', atualizarCamponomeJogador2_pdf_jm);

	}


function chacoalharCarta(carta_pdf_jm){

// Define a quantidade de deslocamento em pixels
let deslocamento_pdf_jm = 5;

// Define o intervalo de tempo entre as mudanças de posição em milissegundos
let intervalo_pdf_jm = 50;

// Define o número de vezes que a div deve ser cacoalhada
let numVezes_pdf_jm = 10;

// Define uma variável para controlar o número de vezes que a div já foi cacoalhada
let contador_pdf_jm = 0;

carta_pdf_jm.style.left = "0";

// Define uma função para mover a div
function moverDiv_pdf_jm() {
  // Alterna a posição da div entre sua posição atual e uma posição deslocada
  if (contador_pdf_jm % 2 === 0) {
    carta_pdf_jm.style.left = (parseInt(carta_pdf_jm.style.left) - deslocamento_pdf_jm) + 'px';
  } else {
    carta_pdf_jm.style.left = (parseInt(carta_pdf_jm.style.left) + deslocamento_pdf_jm) + 'px';
  }
  
  // Incrementa o contador
  contador_pdf_jm++;
  
  // Se a div já foi cacoalhada o número de vezes desejado, para o intervalo
  if (contador_pdf_jm >= numVezes_pdf_jm) {
    clearInterval(intervaloID_pdf_jm);
    carta_pdf_jm.style.left = '0px'; // Restaura a posição original da div
  }
}

// Inicia o intervalo para cacoalhar a div
let intervaloID_pdf_jm = setInterval(moverDiv_pdf_jm, intervalo_pdf_jm);

}


const finalizar_jogada_pdf_jm = {

    "com_1_jogador": function(carta){

        if(embaralhado_pdf_jm[carta_anterior_pdf_jm.parentNode.id]["par"] == embaralhado_pdf_jm[carta.parentNode.id]["par"]){

            pontuacoes_pdf_jm[vez_pdf_jm] += 1;

            pontuacao_el_pdf_jm[vez_pdf_jm].innerHTML = " = "+pontuacoes_pdf_jm[vez_pdf_jm];

            console.log("Acertou!");

            setTimeout(() => {
                
                som_ativado_pdf_jm? sucesso_pdf_jm.play():null;

            }, 500);

            setTimeout(() => {

                if(pontuacoes_pdf_jm["1"] < (questoes_pdf_jm.length/2)){

                    carta_anterior_pdf_jm.classList.add("finalizado_pdf_jm");
                    carta.classList.add("finalizado_pdf_jm");
                    carta_anterior_pdf_jm.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    carta.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    tentativa_pdf_jm = 1;
                    disponibilizar_pdf_jm();

                } else {

                    carta_anterior_pdf_jm.classList.add("finalizado_pdf_jm");
                    carta.classList.add("finalizado_pdf_jm");
                    carta_anterior_pdf_jm.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    carta.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];

                    setTimeout(() => {
                
                        som_ativado_pdf_jm? fim_de_jogo_pdf_jm.play():null;
                
                        let txt_pdf_jm = `Você conseguiu, <strong> ${jg1_pdf_jm}!</strong> Parabéns!`;

                        tela_final_pdf_jm.children[0].innerHTML = txt_pdf_jm;

                        tela_final_pdf_jm.style.display = "flex";
                                

                    }, 1200);

                }

            }, 800);


        } else {

            console.log("Errou!");

            setTimeout(() => {
                
                som_ativado_pdf_jm? erro_pdf_jm.play():null;

                chacoalharCarta(carta_anterior_pdf_jm);

                chacoalharCarta(carta);

                let x_pdf_jm = carta.querySelector(".fechar_pdf_jm");

                x_pdf_jm.style.display = "block";

                gerenciar_apos_erro("com_1_jogador", x_pdf_jm, carta);

            }, 500);


        }

    },

    "com_2_jogadores": function(carta){



        if(embaralhado_pdf_jm[carta_anterior_pdf_jm.parentNode.id]["par"] == embaralhado_pdf_jm[carta.parentNode.id]["par"]){

            pontuacoes_pdf_jm[vez_pdf_jm] += 1;

            pontuacao_el_pdf_jm[vez_pdf_jm].innerHTML = " = "+pontuacoes_pdf_jm[vez_pdf_jm];
            
            console.log("Acertou!");

            setTimeout(() => {
                
                som_ativado_pdf_jm? sucesso_pdf_jm.play():null;

            }, 500);

            


            setTimeout(() => {

                if(pontuacoes_pdf_jm["1"]+pontuacoes_pdf_jm["-1"] < (questoes_pdf_jm.length/2)){

                    carta_anterior_pdf_jm.classList.add("finalizado_pdf_jm");
                    carta.classList.add("finalizado_pdf_jm");
                    carta_anterior_pdf_jm.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    carta.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    tentativa_pdf_jm = 1;
                    disponibilizar_pdf_jm();

                } else {

                    carta_anterior_pdf_jm.classList.add("finalizado_pdf_jm");
                    carta.classList.add("finalizado_pdf_jm");
                    carta_anterior_pdf_jm.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    carta.querySelector('.verso_pdf_jm').style.backgroundColor = cor_de_acerto_pdf_jm[vez_pdf_jm];
                    jogador_el_pdf_jm[vez_pdf_jm].classList.remove('pulsar');

                    

                    setTimeout(() => {
                
                        som_ativado_pdf_jm? fim_de_jogo_pdf_jm.play():null;

                        if(pontuacoes_pdf_jm["1"] > pontuacoes_pdf_jm["-1"]){
                        
                            let txt_pdf_jm = `<strong>${jg1_pdf_jm} ganhou!</strong> <br /><br />
                                        ${jg1_pdf_jm} = ${pontuacoes_pdf_jm["1"]} <strong>ponto(s)</strong> <br />
                                        ${jg2_pdf_jm} = ${pontuacoes_pdf_jm["-1"]} <strong>ponto(s)</strong>`;

                                        tela_final_pdf_jm.children[0].innerHTML = txt_pdf_jm;

                            tela_final_pdf_jm.style.display = "flex";
                                        
                    
                        } else if(pontuacoes_pdf_jm["1"] == pontuacoes_pdf_jm["-1"]){

                            let txt_pdf_jm = `<strong>O jogo empatou!</strong> <br /><br />
                                        ${jg1_pdf_jm} = ${pontuacoes_pdf_jm["1"]} <strong>ponto(s)</strong> <br />
                                        ${jg2_pdf_jm} = ${pontuacoes_pdf_jm["-1"]} <strong>ponto(s)</strong>`;

                                        tela_final_pdf_jm.children[0].innerHTML = txt_pdf_jm;

                            tela_final_pdf_jm.style.display = "flex";

                        } else {

                            let txt_pdf_jm = `<strong>${jg2_pdf_jm} ganhou!</strong> <br /><br />
                                        ${jg1_pdf_jm} = ${pontuacoes_pdf_jm["1"]} <strong>ponto(s)</strong> <br />
                                        ${jg2_pdf_jm} = ${pontuacoes_pdf_jm["-1"]} <strong>ponto(s)</strong>`;

                                        tela_final_pdf_jm.children[0].innerHTML = txt_pdf_jm;

                            tela_final_pdf_jm.style.display = "flex";

                        }

                    }, 1200);
                    

                }

            }, 800);


        } else {

            console.log("Errou!");

            setTimeout(() => {
                
                som_ativado_pdf_jm? erro_pdf_jm.play():null;

                chacoalharCarta(carta_anterior_pdf_jm);

                chacoalharCarta(carta);

                let x_pdf_jm = carta.querySelector(".fechar_pdf_jm");

                x_pdf_jm.style.display = "block";

                gerenciar_apos_erro("com_2_jogadores", x_pdf_jm, carta);


            }, 500);


        }



    }

}

function virarCarta(carta) {

    if(carta.classList.contains('disponivel_pdf_jm')){

        carta.classList.toggle('virada_pdf_jm');

        som_ativado_pdf_jm? virando_a_carta_pdf_jm.play():null;

        processar_jogada(carta);

    }
}


function embaralhar_pdf_jm(array) {
    for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  return array;
}

function processar_jogada(carta){
    
    carta.classList.remove('disponivel_pdf_jm');


    if(tentativa_pdf_jm == 1){

        carta_anterior_pdf_jm = carta;
        tentativa_pdf_jm = 2;

    } else if (tentativa_pdf_jm == 2){

        indisponibilizar_pdf_jm();

        finalizar_jogada_pdf_jm[jogo_pdf_jm](carta);

    } else {
        alert("O Jogo Já Acabou!");
    }

}

function iniciar_pdf_jm(){

    jogo_pdf_jm = "";
    vez_pdf_jm = null;
    proximo_pdf_jm = null;
    tentativa_pdf_jm = 0;
    jg1_pdf_jm = null;
    jg2_pdf_jm = null;
    pontuacoes_pdf_jm = {"1":0,"-1":0};
    nome_el_pdf_jm["1"].innerHTML = "";
    nome_el_pdf_jm["-1"].innerHTML = "";
    pontuacao_el_pdf_jm["1"].innerHTML = "";
    pontuacao_el_pdf_jm["-1"].innerHTML = "";

    tela_final_pdf_jm.style.display = "none";

    atualizarCamponomeJogador2_pdf_jm()

    embaralhado_pdf_jm = embaralhar_pdf_jm(questoes_pdf_jm);

    let numJogadores_pdf_jm = pegarnumJogadores_pdf_jm();

    for(i=0; i<embaralhado_pdf_jm.length; i++){

        let div = document.getElementById(i);

        let interior = div.querySelector('.carta_interior_pdf_jm');

        interior_cartas_pdf_jm.push(interior);

        let enunciado = interior.querySelector('.verso_pdf_jm span');

        enunciado.innerHTML = embaralhado_pdf_jm[i].enunciado;

        interior.classList.add('disponivel_pdf_jm');

        interior.classList.remove("finalizado_pdf_jm");

        interior.classList.remove("virada_pdf_jm");

        interior.querySelector('.verso_pdf_jm').style.backgroundColor = cor_padrao_pdf_jm;

        //apagar x de erro e remover os event listeners

        let xi_pdf_jm = interior.querySelector(".fechar_pdf_jm");

        xi_pdf_jm.style.display == "block"? xi_pdf_jm.style.display = "none":null;

        xi_pdf_jm.removeEventListener('click', listeners_pdf_jm[i]);

    }

    MathJax.typesetClear();
    MathJax.typeset();

    document.querySelector("#info_pdf_jm").style.visibility = "visible";
    document.querySelector("#info_pdf_jm").style.opacity = "1";
    document.querySelector("#container_cartas_pdf_jm").style.visibility = "visible";
    document.querySelector("#container_cartas_pdf_jm").style.opacity = "1";
    document.querySelector(".tela_inicial_pdf_jm").style.display = "none";

    jg1_pdf_jm = document.querySelector('#nomeJogador1_pdf_jm').value.trim() || null;
	jg2_pdf_jm = document.querySelector('#nomeJogador2_pdf_jm').value.trim() || null;
   
    if(numJogadores_pdf_jm == 1){

        jogo_pdf_jm = "com_1_jogador";

        if(jg1_pdf_jm){

            jg1_pdf_jm = sanitizeInput(jg1_pdf_jm);
            nome_el_pdf_jm["1"].innerHTML = jg1_pdf_jm;
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];

        } else {

            nome_el_pdf_jm["1"].innerHTML = "Pontuação";
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];
            jg1_pdf_jm = "Jogador";

        }

    } else {

        jogo_pdf_jm = "com_2_jogadores";

        if (jg1_pdf_jm && jg2_pdf_jm) {

            jg1_pdf_jm = sanitizeInput(jg1_pdf_jm);
            nome_el_pdf_jm["1"].innerHTML = jg1_pdf_jm;
            jg2_pdf_jm = sanitizeInput(jg2_pdf_jm);
            nome_el_pdf_jm["-1"].innerHTML = jg2_pdf_jm;
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];
            pontuacao_el_pdf_jm["-1"].innerHTML = " = "+pontuacoes_pdf_jm["-1"];

        } else if(jg1_pdf_jm) {

            jg1_pdf_jm = sanitizeInput(jg1_pdf_jm);
            nome_el_pdf_jm["1"].innerHTML = jg1_pdf_jm;
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];
            nome_el_pdf_jm["-1"].innerHTML = "Jogador 2";
            jg2_pdf_jm = "Jogador 2";
            pontuacao_el_pdf_jm["-1"].innerHTML = " = "+pontuacoes_pdf_jm["-1"];

        }else if(jg2_pdf_jm) {

            jg2_pdf_jm = sanitizeInput(jg2_pdf_jm);
            nome_el_pdf_jm["-1"].innerHTML = jg2_pdf_jm;
            pontuacao_el_pdf_jm["-1"].innerHTML = " = "+pontuacoes_pdf_jm["-1"];
            nome_el_pdf_jm["1"].innerHTML = "Jogador 1";
            jg1_pdf_jm = "Jogador 1";
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];

        } else {

            nome_el_pdf_jm["1"].innerHTML =  "Jogador 1";
            jg1_pdf_jm  =  "Jogador 1";
            pontuacao_el_pdf_jm["1"].innerHTML = " = "+pontuacoes_pdf_jm["1"];
            nome_el_pdf_jm["-1"].innerHTML = "Jogador 2";
            jg2_pdf_jm  =  "Jogador 2";
            pontuacao_el_pdf_jm["-1"].innerHTML = " = "+pontuacoes_pdf_jm["-1"];

        }


    }


    vez_pdf_jm = "1";
    proximo_pdf_jm = (parseInt(vez_pdf_jm, 10)*(-1)).toString();
    tentativa_pdf_jm = 1;
    jogo_pdf_jm == "com_2_jogadores"? jogador_el_pdf_jm["1"].classList.add('pulsar'):jogador_el_pdf_jm["1"].classList.remove('pulsar');

}





// +++++++++++++++++++++++++++++++++++++++++++++++++++ Jogo Percurso das Frações ++++++++++++++++++++++++++++++++++++++++++++++++++++

const duracao_movimento = 1000; // Duração da animação em milissegundos

let jogadores_pf = [];
let jogadores_ordenados_temp = [];
let chegada_pf = [];

class JogadorPF {

static id = 0;

constructor(nome, casa) {
    this.id = JogadorPF.id++;
    this.nome = nome;
    this.casa = casa;
}

avancar_casas(numeroCasas) {
    this.casa += numeroCasas;
    console.log(`${this.nome} avançou ${numeroCasas} casas.`);
    return this.casa;
}

}

const pecas = document.querySelectorAll(".peca_pf");
const casas_pf = document.querySelectorAll(".casa_pf");
const vez_el_pf = document.querySelector(".vez_el_pf");
const inicia_jogada_pf = document.querySelector(".inici_jogada_pf_pf");

let vez_pf;
let total_casas_pf = casas_pf.length;

const dado_pf = document.querySelector('.dado_pf');
const dado_pfFaces = document.querySelectorAll('.dado_pf-face');

let dado_resultado_pf = 0;

const info_pf = document.getElementById("info_pf");

let face_atual_pf;
let num_sorteado_anterior_pf;

let iteracaoAtual_pf = 0;




let som_ativado_pf = true;

let som_pf = document.querySelector(".som_pf");

const som_erro_pf = document.getElementById("erro_pf");
const som_movimento_pf = document.getElementById("movimento_pf");
const som_chegada_pf = document.getElementById("som_chegada_pf");
const som_acerto_pf = document.getElementById("mini_acerto_pf");
const som_dado_pf = document.getElementById("dado_curto_pf");
const som_voltar_pf = document.getElementById("retrocedendo_pf");
const som_finale_pf = document.getElementById("finale_pf");




let perguntas_pf = [

    {

        "enunciado":"Isabel fez a festa de aniversário de seu filho. Do total dos doces comprados, \\(\\frac{5}{20}\\) era de brigadeiro com granulado e \\(\\frac{6}{20}\\) de brigadeiro com leite ninho. Qual a fração da quantidade de brigadeiros que Isabel comprou para a festa?",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "11",

        "d": "20"

    },

    {

        "enunciado":"Em uma eleição, há 2 candidatos concorrendo para ocuparem a vaga de vereador. O Candidato A está com \\(\\frac{8}{12}\\) da intenção dos votos. O candidato B está com \\(\\frac{2}{6}\\) da intenção dos votos. Qual dos dois candidatos possui mais chances de ser eleito? Por quê? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["8","2"],

        "d": ["12","3"]

    },

    {

        "enunciado":"Pedro construiu uma piscina que tem a forma de um paralelepípedo retangular com as seguintes dimensões: 9,80 m de comprimento, 4,25 m de largura e 1,40 m de profundidade. A capacidade dessa piscina em litros é? Use somente números e vírgula. Letras serão ignoradas.",

        "fracao": false,

        "r": "58310"

    },

    {

        "enunciado":"Qual é o volume, em mililitros (ml), de uma caixa de bis que tem a forma de um paralelepípedo retangular com largura de 3 cm, comprimento de 6 cm e altura de 19 cm? Use somente números e vírgula. Letras serão ignoradas.",

        "fracao": false,

        "r": "342"

    },

    {

        "enunciado":"Estefani e Gisele trabalham de frentista em um posto de Combustível. Para chegar até o trabalho, Estefani percorre \\(\\frac{2}{9}\\) de quilômetro e Gisele \\(\\frac{2}{3}\\) de quilômetro. Que fração representa a quantidade de quilômetros que Estefani e Gisele percorrem juntas?",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "8",

        "d": "9"

    },

    {

        "enunciado":"Carla e Pietra trabalham em uma confeitaria. Em um determinado dia, Carla produziu \\(\\frac{8}{15}\\) da produção total de salgadinhos da confeitaria e Pietra \\(\\frac{3}{15}\\). Qual a fração que representa a quantidade de salgadinhos que Carla produziu a mais que Pietra?",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["5", "1"],

        "d": ["15", "3"]

    },

    {

        "enunciado":"Gustavo tem uma tira retangular que está dividida em 11 partes iguais. Nessa tira, ele pintou 5 partes iguais de verde, só que ele eliminou 3 partes dessa parte verde. Com isso, a parte verde que restou representa que fração da tira inicial?",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "2",

        "d": "11"

    },

    {
        
        "enunciado":"A família de Francisco o saiu de Cascavel em direção a Curitiba. No primeiro dia, percorreu \\(\\frac{1}{2}\\) da distância que separa as duas cidades e no segundo dia foi percorrido \\(\\frac{4}{16}\\) do percurso total. Qual dia eles percorreram o maior trajeto do percurso? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "1",

        "d": "2"

    },

    
    {
        
        "enunciado":"Em duas turmas com a mesma quantia de alunos do 9º ano, a professora de matemática quis comparar o desenvolvimento de seus alunos ao resolverem a mesma prova. O 9º D teve \\(\\frac{1}{3}\\) de suas provas gabaritadas, enquanto o 9º F teve \\(\\frac{6}{9}\\) de suas provas gabaritadas. Qual turma teve o maior número de provas gabaritadas? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["6","2"],

        "d": ["9","3"]

    },
    
    
    {
        
        "enunciado":"Rodolfo está vendendo duas casas de mesmo valor e recebeu duas propostas. Vanessa se interessou pela casa 1 e ofereceu \\(\\frac{2}{5}\\) do valor para pagamento à vista. Augusto, que se interessou pela casa 2, fez uma proposta de \\(\\frac{1}{3}\\) em cima do valor para pagamento à vista. Qual proposta é mais lucrativa para Rodolfo? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "2",

        "d": "5"

    },

       
    {
        
        "enunciado":"Dois grupos de ciclistas saíram de Foz do Iguaçu com destino a Medianeira. Sabe-se que o primeiro grupo já percorreu \\(\\frac{1}{3}\\) do percurso e o segundo grupo percorreu \\(\\frac{1}{4}\\) do percurso. Qual grupo percorreu a maior parte do percurso? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "2",

        "d": "5"

    },

    
    {

        "enunciado":"Ellen trabalha em uma empresa que possui uma regra para as reuniões: é preciso ter pelo menos \\(\\frac{2}{5}\\) dos funcionários da empresa presentes para que possam ser votadas algumas mudanças. Se no dia da reunião compareceram \\(\\frac{4}{7}\\) do total funcionários, uma votação poderá ter ocorrido? Se não poderá haver uma reunião, responda 0, caso contrário, responda 1.",

        "fracao": false,

        "r": "1"

    },

    
    
    {

        "enunciado":"Renato é professor de Educação Física de uma escola, onde o esporte preferido de seus alunos do 8º ano é o futebol. Então, o professor fez a seguinte proposta: ele os deixaria jogar futebol na segunda parte da aula se pelo menos \\(\\frac{2}{3}\\) da turma estiver a favor. Sabendo que o 8º ano possui 30 alunos e 15 queriam jogar futebol, qual a fração que representa os alunos que concordaram em jogar futebol? Eles irão jogar futebol nesta aula? Se eles não vão poder jogar futebol, responda 0, caso contrário, responda 1.",

        "fracao": false,

        "r": "0"

    },


        
    {
        
        "enunciado":"Gilberto leva \\(\\frac{12}{15}\\) de 1 hora para ir da sua casa até a universidade de ônibus e seu colega de sala, Lucas, leva  \\(\\frac{6}{12}\\) de 1 hora indo de carro. Quem leva menos tempo para chegar à universidade? Responda com a maior fração.",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["1","6"],

        "d": ["2","12"]

    },


          
    {
        
        "enunciado":"Sara comprou 5 pacotes de chicletes de morango e 7 de chicletes de uva. Qual é a razão do número de pacotes de chicletes de uva para o de morango?",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "7",

        "d": "5"

    },

    
            
    {
        
        "enunciado":"Beatriz foi ao mercado, comprou 6 refrigerantes e 4 sucos. Qual a razão de refrigerantes e sucos equivale que Beatriz comprou?",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["6","3"],

        "d": ["4","2"]

    },


               
    {
        
        "enunciado":"Pedro levou 100 salgadinhos para festa de sua sala e a professora dividiu em quantidades iguais para seus 20 alunos. Qual a razão estabelecida entre salgadinhos e alunos?",

        "fracao": true,

        "multiplas_respostas": true,

        "n": ["100","5"],

        "d": ["20","1"]

    },


        
    {

        "enunciado":"Roberta vende na feira a dúzia de Kiwi. Um de seus clientes pede apenas 2/6 de uma dúzia. Quantos kiwis Roberta terá que separar?",

        "fracao": false,

        "r": "4"

    },


            
    {

        "enunciado":"Um lavador de carro gasta \\(\\frac{4}{3}\\) de um litro de água para lavar cada carro. Quantos carros ele consegue lavar com 40 litros?",

        "fracao": false,

        "r": "30"

    },


    {
        
        "enunciado":"Qual é a fração geratriz da dízima periódica 0,4555...?",

        "fracao": true,

        "multiplas_respostas": false,

        "n": "41",

        "d": "90"

    }


];


let respondidas_certas_pf = [];

let respondidas_erradas_pf = [];

function sanitizeInput_pf(input) {
  return input.replace(/[^a-zA-Z0-9\sçáâéêíóôúãõ]/g, '');
}

function deixarSoNumerosVirgula_pf(input) {
  return input.replace(/[^0-9,]/g, '');
}

function abrir_pf(){

    vez_pf = 0;

    const container_jogo_pf = document.querySelector(".container_jogo_pf");

    const btn_pf = document.querySelector(".btn_pf");

    const tela_inicial_pf = document.getElementById("tela_inicial_pf");

    const tabuleiro_pf = document.querySelector(".tabuleiro_pf");

    const cores_pf = ["#c57fb5", "#ff3b91", "#04bdec", "#fcde02", "#5ab946", "#f78d35"];

    const total_cores_pf = cores_pf.length;

    for(i=0; i < casas_pf.length; i++){

        if(i == 0 || i == 34){continue};

        let r = i % total_cores_pf;

        casas_pf[i].style.backgroundColor = cores_pf[r];

        const classes = casas_pf[i].classList;

        for(let h = 0; h < classes.length; h++){
            
            const classe = classes[h];

            if(classe.startsWith("cs_")){
                casas_pf[i].classList.remove(classe);
            }
        }

        const id = casas_pf[i].id;

        const num_array = id.split("_");

        const numero_da_casa = num_array[1];

        casas_pf[i].querySelector("span").innerHTML = numero_da_casa;

    }



    if(btn_pf.classList.contains("jogo_ativo_pf")){ // ---------------- Encerrando o jogo percurso das fracoes ----------

        vez_pf = 0;

        chegada_pf.length = 0;

        jogadores_pf.length = 0;

        const casa_inicial = document.getElementById("c_0_pf");

        for(i=0; i < pecas.length; i++){

            casa_inicial.appendChild(pecas[i]);

        }

        vez_el_pf.innerHTML = " ";

        for (i=0; i < pecas.length; i++){

            pecas[i].classList.remove("pulsar_pf");

        }

        iteracaoAtual_pf = 0;

        dado_resultado_pf = 0;

        container_jogo_pf.style.opacity = "0";

        container_jogo_pf.style.height = "0"; 
        
        info_pf.style.display = "none";

        tabuleiro_pf.style.opacity = "0";

        for(i=0; i<pecas.length; i++){

            pecas[i].style.display = "none";

        }

        setTimeout(() => {
            
            container_jogo_pf.style.display = "none";

        }, 600);       

        btn_pf.innerHTML = "Abrir Jogo Percurso das Frações";

        btn_pf.classList.remove("jogo_ativo_pf");

        const msg = document.querySelector(".msg_sorteio_ordem");
        const d8 = document.querySelector(".dado_8_pf-container");
        const titulo_jan = document.querySelector(".titulo_ordem_pf");
        const resultados = document.querySelector(".sorteados_sorteio_ordem");

        msg.style.display = "block";
        d8.style.display = "block";
        titulo_jan.style.display = "block";
        resultados.style.display = "block";

        removerInstanciasJogadorPF();

    } else {// --------------------------------- Abrindo o jogo percurso das fracoes ----------------------------------


        atualizarJogadores_pf();

        jogadores_ordenados_temp = [];

        numeros_a_sortear_8_pf = [1,2,3,4,5,6,7,8];

        container_jogo_pf.style.display = "block";

        tela_inicial_pf.style.display = "flex";

        setTimeout(() => {
            
            container_jogo_pf.style.opacity = "1";

            tela_inicial_pf.style.opacity = "1";

            container_jogo_pf.style.height = "auto";

        }, 200);

        btn_pf.innerHTML = "Encerrar Jogo Percurso das Frações";

        btn_pf.classList.add("jogo_ativo_pf");

        atualizar_nome_jogadores_pf();

        


    }//fecha o if das configuracoes de inicio do jogo



}// fecha a funcao iniciar_pf()


 // Função para atualizar a interface de acordo com o número de jogadores selecionado
 function atualizarJogadores_pf() {


            const numJogadoresSelect = document.getElementById("numJogadores_pf");
            const numJogadores = parseInt(numJogadoresSelect.value);

          

            for (let i = 3; i <= 8; i++) {//8 é o número total de jogadores e comeca do 3 porque os jogadores 1 e 2 sempre existirao

                let jg = "jogador_"+i+"_pf";

                if(i <= numJogadores){

                    document.getElementById(jg).style.display = "flex";

                } else {

                    document.getElementById(jg).style.display = "none";

                }
               
            }
}


function atualizar_nome_jogadores_pf(){

    let jogador_div_pf = document.querySelectorAll(".jogador_div_pf");

    for (i=0; i<8; i++){// 8 é o total de jogadores

        let j_d_pf = jogador_div_pf[i];

        let div_nome_pf = j_d_pf.querySelector("div:nth-child(2)");

        let jogador_input_pf = j_d_pf.querySelector("input");

        jogador_input_pf.value !== ""? div_nome_pf.textContent = sanitizeInput_pf(jogador_input_pf.value): null;

        jogador_input_pf.addEventListener("input", function(){

            div_nome_pf.textContent = sanitizeInput_pf(jogador_input_pf.value);

            jogador_input_pf.value == ""? div_nome_pf.textContent = jogador_input_pf.placeholder: null;

        });

    }

}

function inverter_ordem_pf(o){//a ordem nas linhas nem sempre casa com a ordem das casas do tabuleiro, pois contamos as div da esquerda para direita e no tabuleiro pode estar sendo contado da direita para esquerda

    switch(true){

        case o >= 5 && o  <= 8:
            o = 13 - o;
            break;

        case o >= 16 && o  <= 18:
            o = 34 - o;
            break;

        case o >= 19 && o  <= 21:
            o = 40 - o;
            break;

        case o >= 29 && o  <= 32:
            o = 61 - o;
            break;

        default:
            console.log("A linha não precisa de reorganização.");
            break;
        }

        //se nao for nenhuma dessas linhas nada é invertido

    return o;

}


function iniciarJogo_pf(){


    const casa_surpresa = ["-1","+1", "-2","+2", "+3"];

    // Sortear um número aleatório entre 3 e 30

    let numeros_a_sortear = [];

    for(i=3; i<=30; i++){//preparando os números de 3 a 30 para serem sorteados

        numeros_a_sortear.push(i);

    }

    function sortearNumero() {

        const len = numeros_a_sortear.length;

        const indice_sorteado = Math.floor(Math.random() * (len-1));

        const numeroSorteado = numeros_a_sortear[indice_sorteado];

        numeros_a_sortear = numeros_a_sortear.filter(function(el){
            return el !== numeroSorteado;
        })

        if(4 < numeroSorteado < 29){//eliminando o os dois números anteriores e os dois posteriores

            numeros_a_sortear = numeros_a_sortear.filter(function(el){
                return el !== numeroSorteado - 2 && el !== numeroSorteado - 1 && el !== numeroSorteado + 1 && el !== numeroSorteado + 2;
            })

        }

        console.log(numeroSorteado);

        return numeroSorteado;

    }


    const tam = casa_surpresa.length; //manter fixo para a iteracao


    for (i=0; i<tam; i++){

        let n = inverter_ordem_pf(sortearNumero());

        if(n){

            const indice_surpresa = Math.floor(Math.random() * (casa_surpresa.length-1))

            casas_pf[n].querySelector("span").innerHTML = casa_surpresa[indice_surpresa];

            casas_pf[n].style.backgroundColor = "#444";

            let classe_pf = "cs_"+casa_surpresa[indice_surpresa];

            casas_pf[n].classList.add(classe_pf);

            casa_surpresa.splice(indice_surpresa,1);

            console.log("n: "+n+"Indice surpresa: "+indice_surpresa+" --- numero dentro da casa surpresa: "+casa_surpresa[indice_surpresa]+" --- classe: "+classe_pf+" --- vetor casa surpresa: "+casa_surpresa);

        }

    }//fecha for para montar as casas surpresas

    const tela_inicial_pf = document.getElementById("tela_inicial_pf");

    const tabuleiro_pf = document.querySelector(".tabuleiro_pf");

    tela_inicial_pf.style.opacity = "0"; 
    
    tabuleiro_pf.style.display = "grid";

    setTimeout(() => {
    
        tela_inicial_pf.style.display = "none";

        tabuleiro_pf.style.opacity = "1"; 

    }, 200);       

    const numJogadoresSelect = document.getElementById("numJogadores_pf");

    const numJogadores = parseInt(numJogadoresSelect.value);


    const jogador_div_pf = document.querySelectorAll(".jogador_div_pf");

    

    for (i=0; i<numJogadores; i++){

        let j_d_pf = jogador_div_pf[i];

        let nome = j_d_pf.querySelector("div:nth-child(2)").textContent;

        let jogador = new JogadorPF(nome,0);

        jogadores_pf.push(jogador);

        console.log("Nome: "+jogadores_pf[i].nome);

        pecas[i].style.display = "block";

    }

    info_pf.style.display = "flex";

    definir_ordem_pf();


}//Fecha a funcao iniciarJogo_pf




function toggle_som_pf() {
    
    if(som_ativado_pf){

        som_pf.classList.toggle("som_desativado_pf");

        som_ativado_pf = false;

    } else {

        som_pf.classList.toggle("som_desativado_pf");

        som_ativado_pf = true;

    }

}

function mostrar_janela_definicao_ordem_pf() {
    
    const jan = document.getElementById("janela_definicao_ordem_pf");

    jan.style.display = "flex";

    setTimeout(() => {
        jan.style.opacity = "1";
    }, 300);

}

function apagar_janela_definicao_ordem_pf(){

    const jan = document.getElementById("janela_definicao_ordem_pf");

    jan.style.opacity = "0";

    setTimeout(() => {
        jan.style.display = "none";
        document.querySelector(".container_ordem_definida_pf").remove();
    }, 500);

}

function mostrar_janela_de_jogadas_pf() {
    
    const jan = document.getElementById("janela_de_jogadas_pf");

    const msg_jan = document.getElementById("msg_janela_de_jogadas_pf");

    msg_jan.textContent = jogadores_pf[vez_pf].nome+", role o dado e responda a pergunta que aparecerá abaixo do dado.";

    jan.style.display = "flex";

    setTimeout(() => {
        jan.style.opacity = "1";
    }, 300);

}

function apagar_janela_de_jogadas_pf() {
    
    const jan = document.getElementById("janela_de_jogadas_pf");

    jan.style.opacity = "0";

    setTimeout(() => {
        jan.style.display = "none";
    }, 500);


}

function definir_ordem_pf(d8_r){


    let msg_ini = "Aguarde...";

    iteracaoAtual_pf < jogadores_pf.length? msg_ini = jogadores_pf[iteracaoAtual_pf].nome+", role o dado!":null;

    let msg = document.querySelector(".msg_sorteio_ordem");

    let sorteados = document.querySelector(".sorteados_sorteio_ordem");

    msg.style.opacity = "0";

   

    setTimeout(() => {
        
        msg.textContent = msg_ini;
        msg.style.opacity = "1";
        if(iteracaoAtual_pf >= jogadores_pf.length){

            console.log("Ordem definida");

            let temp = Object.keys(jogadores_ordenados_temp)
                    .filter(index => jogadores_ordenados_temp[index] !== undefined)
                    .map(index => jogadores_ordenados_temp[index]);

            jogadores_pf = temp.reverse();

            const jan = document.getElementById("janela_definicao_ordem_pf");

            // Criação dos elementos
            let container_ordem_definida = document.createElement("div");

            container_ordem_definida.classList.add("container_ordem_definida_pf");

            container_ordem_definida.style.display = "flex";

            container_ordem_definida.style.flexDirection = "column";

            container_ordem_definida.style.textAlign = "center";

            let titulo = "<h3>Ordem Definida</h3>";

            let nomesJogadores = [];

            for (i = 0; i < jogadores_pf.length; i++) {
            nomesJogadores.push(jogadores_pf[i].nome);
            }

            let textoJogadores = "";

            if (nomesJogadores.length === 1) {
            textoJogadores = nomesJogadores[0];
            } else if (nomesJogadores.length === 2) {
            textoJogadores = nomesJogadores.join(" e ");
            } else {
            textoJogadores = nomesJogadores.slice(0, -1).join(", ") + " e " + nomesJogadores.slice(-1);
            }

            let botaoOk = document.createElement("button");

            botaoOk.style.cssText = "border-radius: 7px; margin: 15px; padding: 5px; background-color:#ff6c61; color: #fff; font-weight: bold; cursor: pointer;";

            botaoOk.onclick = function() {apagar_janela_definicao_ordem_pf()};

            botaoOk.textContent = "Ok";

            let divConteudo = document.createElement("div");

            divConteudo.innerHTML = titulo + "<div>" + textoJogadores + "</div>";

            container_ordem_definida.appendChild(divConteudo);
            container_ordem_definida.appendChild(botaoOk);

            //display none nos elementos para definir a ordem
            const d8 = document.querySelector(".dado_8_pf-container");
            const titulo_jan = document.querySelector(".titulo_ordem_pf");
            const resultados = document.querySelector(".sorteados_sorteio_ordem");

            msg.style.display = "none";
            d8.style.display = "none";
            d8_r? d8.querySelector(".dado_8_pf").classList.remove("mostrar_face_"+d8_r+"_d8"):null;
            titulo_jan.style.display = "none";
            resultados.innerHTML = " ";
            resultados.style.display = "none";

            // Adiciona os elementos à janela de definicao de ordem
            jan.appendChild(container_ordem_definida);
            

            ativar_vez();
            
            return;

        } else {
            dado_8_pf.addEventListener('click', callback);
        }

       

    }, 500);

   

    mostrar_janela_definicao_ordem_pf();
    

    function callback() {

        const resultado = sortearDado_8_pf();
        
        // Remover o eventListener após a primeira chamada
        dado_8_pf.removeEventListener('click', callback);

        jogadores_ordenados_temp[resultado] = jogadores_pf[iteracaoAtual_pf];


        setTimeout(() => {

            resultado > 4?  msg.textContent = "Boa jogada!":  msg.textContent = "Poderia ter sido melhor!";

            sorteados.innerHTML+= " ("+jogadores_pf[iteracaoAtual_pf].nome+" = "+resultado+")";

            iteracaoAtual_pf++;
                
        }, 1000);

        if(iteracaoAtual_pf < jogadores_pf.length){


            setTimeout(() => {
                
                definir_ordem_pf(resultado);

            }, 3000);

        }

    }


}




function ativar_vez(){

    

    setTimeout(() => {

        vez_el_pf.textContent = jogadores_pf[vez_pf].nome+", clique na sua peça.";

        const peca = pecas[jogadores_pf[vez_pf].id];

        const localizacao = peca.parentNode.offsetTop;

        const posicao_scroll = parseInt(localizacao) - (parseInt(window.innerHeight / 2));
            
        window.scrollTo({
            top: posicao_scroll,
            behavior: "smooth"
        });

        peca.classList.add("pulsar_pf");

    peca.style.cursor = "pointer";

    peca.addEventListener("click", gerenciar_jogada_pf);

    }, 1500);
   


}


function gerenciar_jogada_pf() {

    mostrar_janela_de_jogadas_pf();

    vez_el_pf.textContent = jogadores_pf[vez_pf].nome+" ainda está concluindo sua jogada...";

    dado_pf.addEventListener('click', callback_sorteioDado_pf);

}

function callback_sorteioDado_pf(){

    dado_resultado_pf = sortearDado_pf();

    dado_pf.removeEventListener('click', callback_sorteioDado_pf);

    sortear_pergunta_pf();

}

function sortear_pergunta_pf(){


    const jan = document.getElementById("janela_de_jogadas_pf");

    let pergunta;



    if(perguntas_pf.length > 0){

        const num = Math.floor(Math.random() * perguntas_pf.length);

        pergunta = perguntas_pf[num];

    } else if(perguntas_pf.length == 0 && respondidas_erradas_pf.length > 0){

        const num = Math.floor(Math.random() * respondidas_erradas_pf.length);

        pergunta = respondidas_erradas_pf[num];

    } else {

        perguntas_pf = respondidas_certas_pf.slice(); //perguntas_pf recebe o respondidas_certas_pf

        respondidas_certas_pf.length = 0; //apagando o array respondidas_certas_pf

        const num = Math.floor(Math.random() * perguntas_pf.length);

        pergunta = perguntas_pf[num];

    }

    

    const enunciado = pergunta["enunciado"];

    const el_pergunta = document.createElement('div');

    el_pergunta.classList.add('el_pergunta_pf');

    const enun = document.createElement('div');

    enun.innerHTML = enunciado;

    const titulo = document.createElement('h3');

    const titulo_resp = document.createElement('h4');

    titulo.textContent = "Pergunta";

    titulo_resp.textContent = "Sua Resposta"

    const divRespostaJogador = document.createElement('div');

    divRespostaJogador.classList.add('el_resp_jogador_pf');

    const divEspacoResposta = document.createElement("div");

    const bt = document.createElement("button");

    bt.classList.add("bt_responder_pf");

    bt.onclick = function() {corrigir_pf(pergunta)};

    bt.textContent = "Ok";

    if(pergunta["fracao"]){

        divEspacoResposta.style.cssText = "display: flex; justify-content: center; align-items: center;";


        const html_conteudo = `<div style='display: flex; justify-content: center; align-items: center; flex-direction: column; font-size: small;'>
                <div>Numerador</div>
                <hr style='background-color: #777; width: 70px; height: 1px; border-radius: 5px; box-shadow: none;' />
                <div>Denominador</div>
            </div>
            
            <div style='display: flex; justify-content: center; align-items: center; flex-direction: column;'>
                <div class='numerador_pf' contenteditable='true'></div>
                <hr style='background-color: #777; width: 70px; height: 1px; border-radius: 5px; box-shadow: none;' />
                <div class='denominador_pf' contenteditable='true'></div>
            </div>             

            `;

        divEspacoResposta.innerHTML = html_conteudo;

        divEspacoResposta.appendChild(bt);

    } else {

        divEspacoResposta.style.cssText = "display: flex; justify-content: center; align-items: center;";


        const html_conteudo = `
                <div class='el_resp_pf' contenteditable='true'></div>

            `;

        divEspacoResposta.innerHTML = html_conteudo;

        divEspacoResposta.appendChild(bt);

    }

    divRespostaJogador.appendChild(titulo_resp);

    divRespostaJogador.appendChild(divEspacoResposta);

    el_pergunta.appendChild(titulo);

    el_pergunta.appendChild(enun);

    el_pergunta.appendChild(divRespostaJogador);

    jan.appendChild(el_pergunta);

    MathJax.typesetClear();
    MathJax.typeset();

}

function corrigir_pf(pergunta) {

    const divPergunta = document.querySelector(".el_pergunta_pf");

    if(pergunta["fracao"]){

        const n_jogador = deixarSoNumerosVirgula_pf(document.querySelector(".numerador_pf").textContent);

        const d_jogador = deixarSoNumerosVirgula_pf(document.querySelector(".denominador_pf").textContent);

        if(pergunta["multiplas_respostas"]){

            if(pergunta["n"].includes(n_jogador)){

                const index = pergunta["n"].indexOf(n_jogador);

                const d_resp = pergunta["d"][index];

                if(d_resp == d_jogador){

                    som_ativado_pf? som_acerto_pf.play(): null;

                    apresentar_resultado("Correto!");

                    respondidas_certas_pf.push(pergunta);

                    const x = perguntas_pf.indexOf(pergunta);

                    const y = respondidas_erradas_pf.indexOf(pergunta);

                    x !== -1 ? perguntas_pf.splice(x, 1) : null;

                    y !== -1 ? respondidas_erradas_pf.splice(y, 1) : null;


                } else { 

                    som_ativado_pf? som_erro_pf.play(): null;
                    
                    apresentar_resultado("Errado!");

                    const y = respondidas_erradas_pf.indexOf(pergunta);

                    y == -1 ?  respondidas_erradas_pf.push(pergunta): null;

                    const x = perguntas_pf.indexOf(pergunta);

                    x !== -1 ? perguntas_pf.splice(x, 1) : null;
                
                }

            } else {

                som_ativado_pf? som_erro_pf.play(): null;
                
                apresentar_resultado("Errado!");

                const y = respondidas_erradas_pf.indexOf(pergunta);

                y == -1 ?  respondidas_erradas_pf.push(pergunta): null;

                const x = perguntas_pf.indexOf(pergunta);

                x !== -1 ? perguntas_pf.splice(x, 1) : null;
                            
            }

        } else {//se nao tem múltiplas respostas

            const n_sol = pergunta["n"];

            const d_sol = pergunta["d"];

            if(n_sol == n_jogador && d_sol == d_jogador) {

                som_ativado_pf? som_acerto_pf.play(): null;

                apresentar_resultado("Correto!");

                respondidas_certas_pf.push(pergunta);

                const x = perguntas_pf.indexOf(pergunta);

                const y = respondidas_erradas_pf.indexOf(pergunta);

                x !== -1 ? perguntas_pf.splice(x, 1) : null;

                y !== -1 ? respondidas_erradas_pf.splice(y, 1) : null;

            } else {

                som_ativado_pf? som_erro_pf.play(): null;

                apresentar_resultado("Errado!");

                const y = respondidas_erradas_pf.indexOf(pergunta);

                y == -1 ?  respondidas_erradas_pf.push(pergunta): null;

                const x = perguntas_pf.indexOf(pergunta);

                x !== -1 ? perguntas_pf.splice(x, 1) : null;

            } 

        }

    } else {//se nao é fracao

        const resp_jogador = deixarSoNumerosVirgula_pf(document.querySelector(".el_resp_pf").textContent);

        const sol = pergunta["r"];

        if(sol == resp_jogador) {

            som_ativado_pf? som_acerto_pf.play(): null;

            apresentar_resultado("Correto!");

            respondidas_certas_pf.push(pergunta);

            const x = perguntas_pf.indexOf(pergunta);

            const y = respondidas_erradas_pf.indexOf(pergunta);

            x !== -1 ? perguntas_pf.splice(x, 1) : null;

            y !== -1 ? respondidas_erradas_pf.splice(y, 1) : null;

        } else {

            som_ativado_pf? som_erro_pf.play(): null;

            apresentar_resultado("Errado!");

            const y = respondidas_erradas_pf.indexOf(pergunta);

            y == -1 ?  respondidas_erradas_pf.push(pergunta): null;

            const x = perguntas_pf.indexOf(pergunta);

            x !== -1 ? perguntas_pf.splice(x, 1) : null;

        } 

    }


    function apresentar_resultado(valor){

        const acertou = valor == "Correto!"? true: false;

        const peca = pecas[jogadores_pf[vez_pf].id];

        const classe_a_remover = "mostrar_face_"+dado_resultado_pf;

        divPergunta.innerHTML = `<div style='font-size: x-large; font-weight: bold; text-align: center; width:100%;'>${valor}</div>`;

        peca.classList.remove("pulsar_pf");

        peca.style.cursor = "auto";

        peca.removeEventListener("click", gerenciar_jogada_pf);

        setTimeout(() => {

            apagar_janela_de_jogadas_pf();

            mover_peca(acertou);

             setTimeout(() => {
            
                dado_pf.classList.remove(classe_a_remover);

                divPergunta.remove();

            }, 2000);

        }, 2000);

    }


}



function mover_peca(acertou) {


    if(acertou){

        const peca = pecas[jogadores_pf[vez_pf].id];

        let num_casa_destino = jogadores_pf[vez_pf].avancar_casas(dado_resultado_pf);

        num_casa_destino > 34? num_casa_destino = 34: null;

        let id_destino = "c_"+num_casa_destino+"_pf";

        let casa_destino = document.getElementById(id_destino);

        let bonus;

        let passar_vez = false;

        const is_casa_surpresa = casa_destino.classList.toString().includes('cs');


        animar_movimento_pf(peca, casa_destino, num_casa_destino, is_casa_surpresa, passar_vez, bonus);

        
        if(is_casa_surpresa){

            let classes = casa_destino.classList;

            for(i=0; i < classes.length; i++){

                const classe = classes[i];

                if(classe.startsWith("cs")){

                    bonus = parseInt(classe.split("_")[1]);

                    console.log("Bonus: "+bonus);

                    let novo_num_destino = jogadores_pf[vez_pf].avancar_casas(bonus);

                    novo_num_destino > 34? novo_num_destino = 34: null;

                    const novo_id_destino = "c_"+novo_num_destino+"_pf";

                    const novo_destino = document.getElementById(novo_id_destino);

                    passar_vez = true;

                    setTimeout(() => {
                        
                        mostrar_casa_surpresa_pf(bonus);

                        animar_movimento_pf(peca, novo_destino, novo_num_destino, is_casa_surpresa, passar_vez, bonus);

                    }, duracao_movimento);
 
                    

                    break;

                }

            }

        }

    } else {

        if(vez_pf == jogadores_pf.length - 1){
            
            vez_pf = 0;
            ativar_vez();

        } else {

            vez_pf++;
            ativar_vez();

        }

    }

}




function mostrar_casa_surpresa_pf(bonus) {
  // Criar a div bonus_pf com o valor do bônus
  const divBonus = document.createElement('div');
  divBonus.classList.add('bonus_pf');
  divBonus.textContent = bonus;
  divBonus.style.cssText = "z-index: 90; border-radius: 5px; box-sizing: border-box; box-shadow: 0 6px 15px #444; padding: 10px; text-shadow: 0 6px 15px #222; color: #fff; font-size: 100px;";

  if(bonus > 0){

    divBonus.style.backgroundColor = "#22b902";

    const txt = "+"+bonus;

    divBonus.textContent = txt;

  } else {divBonus.style.backgroundColor = "#ff2b2b"; som_ativado_pf? som_erro_pf.play(): null;}

  // Definir a posição fixed e centralizar a div bonus_pf
  divBonus.style.position = 'fixed';
  divBonus.style.top = '55%';
  divBonus.style.left = '50%';
  divBonus.style.transform = 'translate(-50%, -50%)';

  // Adicionar a div bonus_pf ao container_jogo_pf
  const containerJogo = document.querySelector('.container_jogo_pf');
  containerJogo.appendChild(divBonus);

  // Animar a div bonus_pf
  let tamanhoFinal = parseInt(getComputedStyle(divBonus).fontSize) * 2;
  let duracao = 2500;

  divBonus.animate([
    { transform: 'translate(-50%, -50%)', opacity: 1 },
    { transform: `translate(-50%, -50%) translateY(-${tamanhoFinal}px)`, opacity: 0 }
  ], {
    duration: duracao,
    easing: 'ease-in-out'
  });

  // Tocar som com base no valor do bônus
  if (bonus > 0) {
    // Tocar som de sucesso
    som_ativado_pf? som_acerto_pf.play(): null;

  } else {
    // Tocar som de erro
    som_ativado_pf? som_erro_pf.play(): null;

  }

  //Remover a div bonus_pf após a conclusão da animação
  setTimeout(function() {
    divBonus.remove();
  }, duracao);
}





function sortearDado_pf(){

const IniTop = dado_pf.offsetTop;

const PosTop = Math.floor(Math.random() * (80 - 20 + 1)) + 20;

const IniLeft = dado_pf.offsetLeft;

const PosLeft = Math.floor(Math.random() * (90 - 5 + 1)) + 5;

dado_pf.style.cursor = "grabbing";

const numero_sorteado = Math.floor(Math.random() * 6) + 1;

console.log("Numero Sorteado: "+numero_sorteado);

let face_sorteada = "mostrar_face_"+numero_sorteado;


face_atual_pf? dado_pf.classList.remove(face_atual_pf):null;

dado_pf.classList.add(face_sorteada);

face_atual_pf = face_sorteada;

setTimeout(() => {

    dado_pf.style.cursor = "grab";
    
}, 500);

let duracao = 1000;


function moverdado_pf(tempoAtual) {

  let tempoDecorrido = tempoAtual - tempoInicio; // Tempo decorrido desde o início da animação
  let PosicaoTopAtual = IniTop + ((PosTop - IniTop) * tempoDecorrido / duracao);
  dado_pf.style.top = PosicaoTopAtual + 'px';
  let PosicaoLeftAtual = IniLeft + ((PosLeft - IniLeft) * tempoDecorrido / duracao);
  dado_pf.style.left = PosicaoLeftAtual + 'px';


  if (tempoDecorrido < duracao) {
    requestAnimationFrame(moverdado_pf);
  }
  
}

let tempoInicio = null;

function iniciarAnimacao(tempoAtual) {

  if (!tempoInicio) tempoInicio = tempoAtual; // Armazene o tempo inicial apenas na primeira chamada

  moverdado_pf(tempoAtual);

}

if(num_sorteado_anterior_pf !== numero_sorteado) {

  requestAnimationFrame(iniciarAnimacao);

  num_sorteado_anterior_pf = numero_sorteado;

} else {

  num_sorteado_anterior_pf = numero_sorteado;

}

som_ativado_pf? som_dado_pf.play(): null;

return numero_sorteado;


}



const dado_8_pf = document.querySelector('.dado_8_pf');
const dado_8_pfFaces = document.querySelectorAll('.dado_8_pf-face');
let face_atual_8_pf;
let num_sorteado_anterior_8_pf;
let numeros_a_sortear_8_pf = [1,2,3,4,5,6,7,8];

function sortearDado_8_pf(){

    const IniTop = dado_8_pf.offsetTop;

    const PosTop = Math.floor(Math.random() * (80 - 20 + 1)) + 20;

    const IniLeft = dado_8_pf.offsetLeft;

    const PosLeft = Math.floor(Math.random() * (90 - 5 + 1)) + 5;

    dado_8_pf.style.cursor = "grabbing";

    let numero_sorteado;

    let indice = Math.floor(Math.random() * (numeros_a_sortear_8_pf.length));

    if(numeros_a_sortear_8_pf.length > 0){

        numero_sorteado = numeros_a_sortear_8_pf[indice];

        numeros_a_sortear_8_pf.splice(indice,1);

        console.log("Número Sorteado: "+numero_sorteado);

    } else {return}
   

    let face_sorteada = "mostrar_face_"+numero_sorteado+"_d8";


    face_atual_8_pf? dado_8_pf.classList.remove(face_atual_8_pf):null;
   
    dado_8_pf.classList.add(face_sorteada);

    face_atual_8_pf = face_sorteada;

    setTimeout(() => {

        dado_8_pf.style.cursor = "grab";
        
    }, 500);

    let duracao = 1000;


    function moverdado_8_pf(tempoAtual) {

      let tempoDecorrido = tempoAtual - tempoInicio; // Tempo decorrido desde o início da animação
      let PosicaoTopAtual = IniTop + ((PosTop - IniTop) * tempoDecorrido / duracao);
      dado_8_pf.style.top = PosicaoTopAtual + 'px';
      let PosicaoLeftAtual = IniLeft + ((PosLeft - IniLeft) * tempoDecorrido / duracao);
      dado_8_pf.style.left = PosicaoLeftAtual + 'px';


      if (tempoDecorrido < duracao) {
        requestAnimationFrame(moverdado_8_pf);
      }
      
    }

    let tempoInicio = null;

    function iniciarAnimacao(tempoAtual) {

      if (!tempoInicio) tempoInicio = tempoAtual; // Armazene o tempo inicial apenas na primeira chamada

      moverdado_8_pf(tempoAtual);

    }

    if(num_sorteado_anterior_8_pf !== numero_sorteado) {

      requestAnimationFrame(iniciarAnimacao);

      num_sorteado_anterior_8_pf = numero_sorteado;

    } else {

      num_sorteado_anterior_8_pf = numero_sorteado;

    }

    som_ativado_pf? som_dado_pf.play(): null;

    return numero_sorteado;

}


function removerInstanciasJogadorPF() {//zera tb o array jogadores_pf
  jogadores_pf.forEach(function(instancia) {
    delete instancia.nome;
    delete instancia.casa;
    delete instancia.id;
    delete instancia.avancar_casas;
  });

  JogadorPF.id = 0;
  jogadores_pf.length = 0;
}




function animar_movimento_pf(peca, destino, num_destino, casa_surpresa, passar_vez, bonus) {
  
  const easeInOut = "cubic-bezier(0.42, 0, 0.58, 1)"; // Função de easing

  const pecaClone = peca.cloneNode(true); // Clone da peça para a animação
  const pecaPosicaoOriginal = peca.getBoundingClientRect(); // Posição original da peça

  // Configuração de estilos para a animação
  peca.style.opacity = "0"; // Oculta a peça original durante a animação
  pecaClone.style.transform = "scale(4)"; // Define a escala da peça para 4

  // Adiciona a peça clonada antes da peça original
  peca.parentNode.insertBefore(pecaClone, peca);

  // Calcula a posição do destino
  const destinoPosicao = destino.getBoundingClientRect();
  const destinoE = destinoPosicao.left + destinoPosicao.width/2;
    const destinoTop = destino.offsetTop;

  // Define uma função para executar a animação
  requestAnimationFrame(() => {
    pecaClone.style.transition = `transform ${duracao_movimento}ms ${easeInOut}`;
    pecaClone.style.transform = `translate(${destinoE - pecaPosicaoOriginal.left}px, ${destinoPosicao.top - pecaPosicaoOriginal.top}px)`;
  });

  //Som do Movimento
  if(!bonus){

    som_ativado_pf? som_movimento_pf.play(): null;

  } else if (bonus && bonus > 0){

    som_ativado_pf? som_movimento_pf.play(): null;

  } else {

    som_ativado_pf? som_voltar_pf.play(): null;

  }


  // Atualiza o scroll da tela de forma suave

  const posicao_scroll = parseInt(destinoTop) - (parseInt(window.innerHeight / 2));

  window.scrollTo({
    top: posicao_scroll,
    behavior: "smooth"
  });


  // Define um timeout para remover a peça original e colocar a clonada dentro do destino e verificar se chegou ao final
  setTimeout(() => {

    if(num_destino == 34){

        const concluinte = jogadores_pf[vez_pf].nome;

        const peca = pecas[jogadores_pf[vez_pf].id];

        const sua_peca = peca.cloneNode(true);

        const jogadorRemovido = jogadores_pf.splice(vez_pf, 1)[0];

        chegada_pf.push(jogadorRemovido);

        mostrar_tela_chegada_pf(concluinte, sua_peca);

    } else if(!casa_surpresa || (casa_surpresa && passar_vez)){

        if(vez_pf == jogadores_pf.length - 1){

            vez_pf = 0;

            ativar_vez();

        } else { vez_pf++; ativar_vez();}

    }

    peca.parentNode.removeChild(pecaClone);
    destino.appendChild(peca);
    peca.style.opacity = "1"; // Mostra a peça original após a animação
    pecaClone.style.transform = "none"; // Anula o transform scale

  }, duracao_movimento);
}




function mostrar_tela_chegada_pf(concluinte, sua_peca){

    const container = document.createElement("div");

    container.style.cssText = `position: fixed;
    margin: 20px auto 35px auto;
    box-sizing: border-box;
    padding: 35px;
    min-width: 275px;
    width: 91%;
    max-height: 90vh;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: linear-gradient(45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%), linear-gradient(-45deg, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);
    background-size: 20px 20px;
    background-color: #999;
    color: #fff;
    box-shadow: 2px 2px 5px #777;
    z-index: 50;
    overflow: auto;
    border-radius: 10px;
    transition: opacity 0.7s ease-in-out;`;

    const divInterna = document.createElement("div");

    divInterna.style.cssText = "margin: 0 auto; color: #fff; background-color: #777; position: relative; border-radius: 10px; box-sizing: border-box; height: 100%; width: 100%; text-align: center; display: flex; flex-direction: column; align-items: center; justify-content: space-between;"

    const titulo = document.createElement("h3");

    titulo.textContent = "Chegada";

    sua_peca.style.color = "#fff";

    sua_peca.style.opacity = "1";

    sua_peca.style.transform = "scale(1.8)";

    const txt = document.createElement("span");

    txt.textContent = `Parabéns, ${concluinte}! Você conseguiu!`;

    txt.style.margin = "15px auto 0 auto";

    const bt = document.createElement("button");

    bt.textContent = "Ok";

    bt.classList.add("bt_responder_pf");

    bt.style.cssText = "margin: 25px 0; width: 50%; box-shadow: 1px 1px 2px #fff;";

    bt.onclick = function() { 
        
        container.remove();

        if(jogadores_pf.length == 1){

            mostrar_tela_final();

        } else {

            vez_pf == jogadores_pf.length? vez_pf = 0: null;

            ativar_vez();

        }

    
    
    }

    divInterna.appendChild(titulo);
    divInterna.appendChild(sua_peca);
    divInterna.appendChild(txt);
    divInterna.appendChild(bt);
    
    container.appendChild(divInterna);

    som_ativado_pf? som_chegada_pf.play(): null;

    const container_jogo = document.querySelector(".container_jogo_pf");

    container_jogo.appendChild(container);

}



function mostrar_tela_final(){

    console.log("O jogo acabou!");

    vez_el_pf.textContent = "O jogo terminou!";

    let ordem_chegada = "Ordem de chegada: ";

    for(i=0; i < chegada_pf.length; i++){

        if(chegada_pf.length == 1){

            ordem_chegada += i+1+"° "+chegada_pf[i].nome+".";

        } else if(chegada_pf.length > 1 && i != chegada_pf.length - 1) {

            ordem_chegada += i+1+"° "+chegada_pf[i].nome+"; ";

        } else {

            ordem_chegada += i+1+"° "+chegada_pf[i].nome+".";

        }

    }

    const container = document.createElement("div");

    container.style.cssText = `position: fixed;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    margin: 20px auto 35px auto;
    box-sizing: border-box;
    padding: 15px;
    min-width: 275px;
    width: 91%;
    max-height: 90vh;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    background: rgb(177,206,52);
    background: linear-gradient(0deg, rgba(177,206,52,1) 1%, rgba(255,108,97,1) 50%);
    color: #fff;
    box-shadow: 6px 6px 7px #777;
    z-index: 50;
    overflow: auto;
    border-radius: 10px;
    opacity: 1;
    transition: opacity 0.7s ease-in-out;`;

    const titulo = document.createElement("h3");

    titulo.textContent = "Fim de Jogo";

    const div_1 = document.createElement("div");

    div_1.textContent = ordem_chegada;

    div_1.style.margin = "15px auto";

    const div_2 = document.createElement("div");

    div_2.textContent = jogadores_pf[0].nome+", não desista! Na próxima vez você terá mais sorte.";

    div_2.style.margin = "15px auto";

    const bt = document.createElement("button");

    bt.textContent = "Ok";

    bt.classList.add("bt_responder_pf");

    bt.style.cssText = "margin: 25px 0; width: 50%; box-shadow: 1px 1px 2px #fff; background-color: rgb(46 211 124);";

    bt.onmouseenter = function() {
        this.style.backgroundColor = '#209557';
    };

    bt.onmouseleave = function() {
        this.style.backgroundColor = "rgb(46 211 124)";
    };

    bt.onclick = function() { 
        
        container.remove();    
    
    }

    container.appendChild(titulo);
    container.appendChild(div_1);
    container.appendChild(div_2);
    container.appendChild(bt);

    const container_jogo = document.querySelector(".container_jogo_pf");

    container_jogo.appendChild(container);

    som_ativado_pf? som_finale_pf.play(): null;

}


// ++++++++++++++++++++++++++++++++++++++ FIM Jogo Percurso das Frações +++++++++++++++++++++++++++++++++++++++++



/********************************************* Jogo Card das Frações *******************************************/


const botao = document.querySelector(".botao-jogo-cf");
    const container = document.getElementById("container_jogo_cf");
    let som_ativado_cf = true;

    const cores_overlay_cf = ["aliceblue", "#ea3546", "#4ddb25", "#dbad25"];

    let ultima_cor_overlay_cf = "";

    let jogadores_cf = [

        {"nome": "Grupo 1", "pontos":0},

        {"nome": "Grupo 2", "pontos":0}

    ]

    let questoes_cf = [


        {

            "enunciado":"Professora Helena comprou determinada quantidade de pizzas para 3 turmas. Sabendo que a turma A comeu \\(\\frac{6}{16}\\)(seis dezesseis avos) do total de pedaços, a turma B comeu \\(\\frac{2}{8}\\)(dois oitavos) e a turma C comeu \\(\\frac{5}{12}\\)(cinco doze avos), qual fração representa a turma que comeu mais?",
            "fracao":true,
            "ordenacao":false,
            "n": ["5"],
            "d":["12"]

        },

        {

            "enunciado":"Comprei uma barra de chocolate que possui vinte pedaços (quadradinhos) de mesmo tamanho. No primeiro dia comi \\(\\frac{1}{5}\\)(um quinto) da barra. Já no segundo dia, comi o equivalente a \\(\\frac{4}{10}\\)(quatro décimos) da barra inicial. Em qual dia eu comi mais chocolate?",
            "fracao":false,
            "r": ["Segundo dia", "segundo", "2", "2°"]

        },

        {

            "enunciado":"A fração \\(\\frac{2}{5}\\)(dois quintos) pode ser representada por qual ponto na reta numérica?",
            "imagem":"r1.jpg",
            "fracao":false,
            "r": ["Ponto B", "B"]

        },

        {

            "enunciado":"Indique quais pontos podem representar as frações \\(\\frac{7}{8}\\)(sete oitavos), \\(\\frac{35}{7}\\) e \\(\\frac{16}{6}\\)(dezesseis sextos) na reta numérica, respectivamente. Separe os pontos com o uso da vírgula",
            "imagem":"r3.jpg",
            "fracao":false,
            "r": ["B, D, E"]

        },

        {

            "enunciado":"Elisa possui uma coleção de 90 carrinhos colecionáveis que são réplicas de diversas marcas, sendo 12 da Volkswagen, 27 da Chevrolet, 16 da Ford e 35 Fiat. Quais frações representam a razão entre os carrinhos da marca Fiat e Chevrolet, e da marca Ford e Volkswagen.",
            "fracao":true,
            "ordenacao":true,
            "n": ["35", "4"],
            "d":["27", "3"]

        },


        {

            "enunciado":"A fração \\(\\frac{17}{9}\\)(dezessete nonos) pode ser localizada entre quais pontos na reta numérica? Separe os pontos com a letra \"e\".",
            "imagem":"r2.jpg",
            "fracao":false,
            "r": ["Entre os pontos B e C.", "B e C", "B e C"]

        },


        {

            "enunciado":"Yara comprou um pote de sorvete que tinha as seguintes dimensões: 22 cm de comprimento, 8 cm de largura e 20 cm de altura. Beatriz também queria comprar um pote de sorvete, porém, não tinha dinheiro suficiente e então resolveu comprar um que tinha \\(\\frac{25}{88}\\)(vinte e cinco oitenta e oito avos) do volume do pote de Yara. Quantos mililitros têm o pote de Beatriz? Use somente números e vírgulas.",
            "fracao":false,
            "r": ["1.000 ml", "1000"]

        },

        {

            "enunciado":"Ana quer comprar um celular no Paraguai e que custa 2.500,00 reais; ela já tem 2/5 do valor. Quantos reais faltam para ela conseguir comprar o celular? Use somente números e vírgulas.",
            "fracao":false,
            "r": ["R$ 1.500,00", "1500", "1500,00"]

        },



        {

            "enunciado":"Sabe-se que uma caixa d'água, inicialmente, estava com \\(\\frac{1}{4}\\)(um quarto) da sua capacidade e foi completada com mais \\(\\frac{2}{5}\\)(dois quintos) da sua capacidade. Responda: a) Qual é a fração que representa a quantidade de água na caixa d'água? b) Qual é a fração que representa a parte vazia da caixa d'água? Responda em ordem.",
            "fracao":true,
            "ordenacao":true,
            "n": ["13", "7"],
            "d":["20", "20"]

        },





        {

            "enunciado":"Calcule \\(\\frac{3}{8}\\)(três oitavos) mais \\(\\frac{75}{3}\\)(setenta e cinco terços). Responda em forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["203"],
            "d":["8"]

        },

        {

            "enunciado":"Calcule \\(\\frac{3}{4}\\)(três quartos) mais \\(\\frac{2}{8}\\)(dois oitavos). Responda em forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["1"]

        },

        {

            "enunciado":"Calcule \\(\\frac{3}{8}\\)(três oitavos) menos \\(\\frac{4}{16}\\)(quatro dezesseis avos). Responda em forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["8"]

        },


        {

            "enunciado":"Obtenha o resultado, em forma de fração irredutível, da operação \\(\\frac{3}{2} - \\frac{1}{4}\\)(três meios menos um quarto).",
            "fracao":true,
            "ordenacao":false,
            "n": ["5"],
            "d":["4"]

        },


        {

            "enunciado":"Obtenha o resultado, em forma de fração irredutível, da operação \\(\\frac{3}{2} + \\frac{1}{4}\\)(três meios mais um quarto).",
            "fracao":true,
            "ordenacao":false,
            "n": ["7"],
            "d":["4"]

        },


        {

            "enunciado":"Caio, Raquel e Douglas estavam apostando uma corrida, na qual eles deveriam correr o máximo possível dentro de um determinado tempo estipulado por eles. Quando acabou o tempo, Caio, Raquel e Douglas verificaram a distância que cada um tinha percorrido que era, respectivamente, \\(\\frac{6}{24}\\)(seis vinte e quatro avos), \\(\\frac{9}{24}\\)(nove vinte e quatro avos) e \\(\\frac{4}{30}\\)(quatro trinta avos) do percurso em linha reta. Qual deles ficou em último lugar? Responda com o nome do corredor.",
            "fracao":false,
            "r": ["Douglas"]

        },

        {

            "enunciado":"A mãe de Lucas e Beatriz comprou uma pizza de 8 pedaços e resolveu dividi-la entre os três da seguinte maneira: Beatriz ficaria com \\(\\frac{1}{2}\\)(um meio) da pizza, Lucas com \\(\\frac{1}{8}\\)(um oitavo) e sua mãe com \\(\\frac{6}{16}\\)(seis dezesseis avos). Qual deles ficou com mais pedaços? Responda com o nome.",
            "fracao":false,
            "r": ["Beatriz"]

        },


        {

            "enunciado":"Luana comprou 9 balões vermelhos e 15 amarelos. Qual é a fração que representa a razão entre o número de balões amarelos e vermelhos?",
            "fracao":true,
            "ordenacao":false,
            "n": ["5"],
            "d":["3"]

        },

        {

            "enunciado":"Ao dividir um bolo, em partes iguais, para oito pessoas, a razão estabelecida a cada pedaço do bolo será?",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["8"]

        },

        {

            "enunciado":"Considere que uma pizza tenha 4 sabores, possua ao total 12 pedaços do mesmo tamanho e que cada sabor possua a mesma quantidade de pedaços. Se uma pessoa comer um pedaço de cada sabor, qual será a razão do que ela comeu em relação ao total de pizza?",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["3"]

        },


        {

            "enunciado":"Calcule \\(\\frac{2}{3}(\\frac{16}{7} + \\frac{\\frac{5}{9}}{\\frac{4}{8}})\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["428"],
            "d":["189"]

        },

        {

            "enunciado":"Calcule \\( \\left( \\frac{9}{5} - \\frac{3}{16} \\right) \\div \\frac{5}{4} \\times \\frac{1}{3}\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["43"],
            "d":["100"]

        },

        {

            "enunciado":"Calcule \\( \\frac{8}{9} \\times \\left( \\frac{9}{8} \\times \\frac{1}{5} \\right)\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["5"]

        },

        {

            "enunciado":"Calcule \\(\\frac{1}{5}(\\frac{0}{3} + \\frac{5}{4})\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["1"],
            "d":["4"]

        },

        {

            "enunciado":"Calcule \\(\\frac{55}{9} + \\frac{8}{9}\\) (cinquenta e cinco nonos mais oito nonos). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["7"],
            "d":["1"]

        },

        {

            "enunciado":"Calcule \\(\\frac{8}{33} \\times \\left( \\frac{66}{4} + \\frac{3}{4} \\right)\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["46"],
            "d":["11"]

        },

        {

            "enunciado":"Calcule \\(\\frac{2}{3} \\times \\left( \\frac{14}{8} \\div \\frac{3}{2} \\right)\\). Responda na forma de fração irredutível.",
            "fracao":true,
            "ordenacao":false,
            "n": ["7"],
            "d":["9"]

        },


        {

            "enunciado":"Um comerciante oferece 7% de desconto no pagamento à vista de um determinado produto. Sabe-se que esse produto custa R$ 120,00 para pagamento a prazo. No pagamento à vista, qual é o valor pago pelo produto? Responda somente com números e vírgulas.",
            "fracao":false,
            "r": ["R$ 111,60", "111,60", "111,6"]

        },


        {

            "enunciado":"Sabrina entrou em uma loja que anunciava a seguinte promoção: “Não perca essa chance! Calças por apenas \\(\\text{R}\\$ \\thinspace 125,00\\) e na compra de duas pague apenas \\(\\text{R}\\$ \\thinspace 95,00\\) em cada!”. Qual porcentagem de desconto Sabrina ganhará no valor final caso compre duas calças? Responda na forma de fração irredutível.",
            "fracao":false,
            "ordenacao":false,
            "r": ["24%"]

        },


        {

            "enunciado":"Escreva três formas fracionárias que podem representar 88%.",
            "fracao":true,
            "ordenacao":false,
            "n": ["88", "44", "22"],
            "d":["100", "50", "25"]

        },

        {

            "enunciado":"Qual é a fração geratriz da dizima periódica 0,4444...?",
            "fracao":true,
            "ordenacao":false,
            "n": ["4"],
            "d":["9"]

        },

        {

            "enunciado":"Qual é a fração geratriz da dizima periódica 0,8888...?",
            "fracao":true,
            "ordenacao":false,
            "n": ["8"],
            "d":["9"]

        },

        {

            "enunciado":"Qual é a fração geratriz da dízima periódica 2,6666...?",
            "fracao":true,
            "ordenacao":false,
            "n": ["8"],
            "d":["3"]

        }


    ];

    let erradas_cf = [];
    let corretas_cf = [];

    let i_cf = 0;
    let vez_cf = 0;

    botao.addEventListener("click", function() {

        


        if (botao.innerText === "Abrir Jogo Card das Frações") {//Iniciando o jogo

            botao.innerText = "Fechar Jogo Card das Frações";
            botao.classList.add("btn_ativo_cf");
            container.style.display = "block";
            mostrar_tela_inicial_cf();
            vez_cf = 0;
        

        } else {//Encerrando o jogo

            i_cf = 0;
            ultima_cor_overlay_cf = "";

            botao.innerText = "Abrir Jogo Card das Frações";
            botao.classList.remove("btn_ativo_cf");
            container.style.display = "none";
            jogadores_cf[0].nome = "Grupo 1";
            jogadores_cf[0].pontos = 0;
            jogadores_cf[1].nome = "Grupo 2";
            jogadores_cf[1].pontos = 0;

            let combinado = questoes_cf.concat(erradas_cf, corretas_cf);

            questoes_cf.splice(0, questoes_cf.length, ...combinado);
            combinado.length = 0;

            erradas_cf.length = 0;
            corretas_cf.length = 0;

        }
    });

    function toggle_som_cf() {

        const som_el = document.querySelector(".som_el_cf");
    
        if(som_ativado_cf){

            som_el.classList.toggle("som_desativado_cf");

            som_ativado_cf = false;

        } else {

            som_el.classList.toggle("som_desativado_cf");

            som_ativado_cf = true;

        }

    }


    function mostrar_tela_inicial_cf(){

        function sanitizar(txt){

            const regex = /[^\wÀ-ÿ,\s]/g;

            const textoSanitizado = txt.replace(regex, '');

            return textoSanitizado;

        }

        const container_jogo = document.getElementById("container_jogo_cf");

        const trilha = document.createElement("div");

        trilha.classList.add("trilha_dos_cards_cf");

        container_jogo.replaceChildren(trilha);

        const container = document.createElement("div");

        const titulo = document.createElement("h3");

        titulo.textContent = "Escolha o nome dos grupos";

        container.classList.add("container_tela_inicial_cf");

        const grupo_1 = document.createElement("div");

        const grupo_2 = document.createElement("div");

        grupo_1.classList.add("grupo_cf");

        grupo_2.classList.add("grupo_cf");

        const div_1 = document.createElement("div");

        const div_2 = document.createElement("div");

        const input_1 = document.createElement("input");

        const input_2 = document.createElement("input");

        input_1.type = "text";

        input_2.type = "text";

        input_1.placeholder = "Preenchimento opcional"

        input_2.placeholder = "Preenchimento opcional"

        div_1.textContent = "Grupo 1";

        div_2.textContent = "Grupo 2";

        const bt = document.createElement("button");

        bt.classList.add("bt_iniciar_cf");

        bt.textContent = "iniciar"

        bt.onclick = function (){

            questoes_cf = shuffleArray(questoes_cf);

            let nome_1 = sanitizar(input_1.value);
            let nome_2 = sanitizar(input_2.value);

            nome_1? jogadores_cf[0].nome = nome_1: null;

            nome_2? jogadores_cf[1].nome = nome_2: null;

            const barra = montar_barra_superior(jogadores_cf[0].nome, jogadores_cf[1].nome);

            const barra_inferior = montar_barra_inferior();

            container.remove();

            container_jogo.prepend(barra);

            container_jogo.appendChild(barra_inferior);

            const card_conteudo = montar_pergunta_cf();

            mostrar_card_cf(card_conteudo[0].innerHTML, card_conteudo[1].innerHTML);

            MathJax.typesetClear();
            MathJax.typeset();

            gerenciar_vez_visual_cf();


        }

        grupo_1.appendChild(div_1);
        grupo_1.appendChild(input_1);

        grupo_2.appendChild(div_2);
        grupo_2.appendChild(input_2);

        container.appendChild(titulo);
        container.appendChild(grupo_1);
        container.appendChild(grupo_2);
        container.appendChild(bt);

        container_jogo.prepend(container);

        setTimeout(() => {
            
            container.style.opacity = "1";

        }, 150);

    }

    function montar_barra_superior(nome_1, nome_2){

        const barra = document.createElement("div");

        barra.classList.add("barra_superior_cf");

        barra.style.cssText = "margin: 10px 0; padding: 2px 10px; width: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;";

        const div_1 = document.createElement("div");

        const div_2 = document.createElement("div");

        div_1.style.cssText = "gap: 15px; color: #999; margin: 3px 0; display: flex; align-items: center; justify-content: center;";

        div_2.style.cssText = "gap: 15px; color: #3366ff; margin: 13px 0 2px 0; display: flex; align-items: center; justify-content: center;";

        const span_1 = document.createElement("span");

        const span_2 = document.createElement("span");

        const span_1_nome = document.createElement("span");

        const span_2_nome = document.createElement("span");

        span_1.classList.add("pts_cf");

        span_2.classList.add("pts_cf");

        span_1.style.cssText = "color: #ff335a; font-weight: bold;"

        span_2.style.cssText = "color: #ff335a; font-weight: bold;"

        span_1.textContent = "0";

        span_2.textContent = "0";

        const div_1_ = document.createElement("div");

        const div_2_ = document.createElement("div");

        div_1_.classList.add("placar_cf");

        div_2_.classList.add("placar_cf");

        span_1_nome.textContent = nome_1+" → ";

        span_2_nome.textContent = nome_2+" → ";

        div_1_.appendChild(span_1_nome);

        div_2_.appendChild(span_2_nome);

        div_1_.appendChild(span_1);

        div_2_.appendChild(span_2);

        div_1.appendChild(div_1_);

        div_1.appendChild(div_2_);

        const bt_som = document.createElement("button");

        bt_som.title = som_ativado_cf == true? "Desativar som": "Ativar som";

        bt_som.classList.add("som_el_cf");

        bt_som.innerHTML = "♫";

        bt_som.onclick = function(){
            
            toggle_som_cf();
            bt_som.title = som_ativado_cf == true? "Desativar som": "Ativar som";
            
        }

        div_2.appendChild(bt_som);

        const bt_falar = document.createElement("button");

        bt_falar.title = "Ouvir card"

        bt_falar.classList.add("falar_el_cf");

        bt_falar.innerHTML = "&#128266;";

        bt_falar.onclick = function(){falar_cf();}

        div_2.appendChild(bt_falar);

        barra.appendChild(div_1);

        barra.appendChild(div_2);

        return barra;

    }


    function montar_barra_inferior() {

        const barra = document.createElement("div");

        barra.classList.add("barra_inferior_cf");

        barra.style.cssText = "margin: 10px 0 60px 0; padding: 2px 10px; width: 100%; display: flex; align-items: center; justify-content: flex-start;";

        const div_1 = document.createElement("div");

        div_1.classList.add("qtde_cards_cf");

        div_1.style.cssText = "font-size: 13px; color: #999; display: flex; align-items: center; justify-content: center; width: 50px;";

        div_1.textContent = `${i_cf+1}/${questoes_cf.length+erradas_cf.length}`;

        const div_2 = document.createElement("div");

        const bt_corrigir = document.createElement("button");

        const bt_pular = document.createElement("button");

        bt_corrigir.classList.add("bt_corrigir_cf");

        bt_corrigir.textContent = "➔";

        bt_corrigir.title = "Girar e corrigir card";

        bt_corrigir.onclick = function(){corrigir_btn_onclick_cf();}    

        bt_pular.classList.add("bt_pular_cf");

        bt_pular.textContent = "✖";

        bt_pular.title = "Pular card";

        bt_pular.onclick = function(){pular_btn_onclick_cf()}

        div_2.style.cssText = "margin-left: -50px; gap: 15px; font-size: 13px; color: #999; display: flex; align-items: center; justify-content: center; width: 100%;";


        div_2.appendChild(bt_pular);

        div_2.appendChild(bt_corrigir);


        barra.appendChild(div_1);

        barra.appendChild(div_2);

        return barra;

    }



    function montar_pergunta_cf(){

        const questao = questoes_cf[i_cf];

        const DivEnunciado = document.createElement("div");

        DivEnunciado.classList.add("enunciado_cf");

        const DivEspacoResposta = document.createElement("div");

        DivEspacoResposta.classList.add("espaco_resposta_cf");

        const DivResposta = document.createElement("div");

        DivResposta.classList.add("resposta_cf");

        DivEnunciado.innerHTML = questao.enunciado;

        const titulo = document.createElement("h3");

        titulo.textContent = "Sua resposta:";

        DivEspacoResposta.appendChild(titulo);

        DivEnunciado.style.cssText = "margin: 5px 0; width: 100%; box-sizing: border-box;";

        DivEspacoResposta.style.cssText = "margin: 15px 0; width: 100%; display: flex; align-items: center; justify-content: center; box-sizing: border-box;";

        DivResposta.style.cssText = "margin: 15px 0; width: 100%; display: flex; align-items: center; justify-content: center; box-sizing: border-box;";

        if(questao.imagem && questao.imagem != ""){
            const arquivo = "img/"+questao.imagem;
            const img = document.createElement("img");
            img.src = arquivo;
            img.style.cssText = "width: 100%; height: auto; max-width: 500px; text-align: center; border-radius: 5px; margin: 10px auto; display: block;";
            img.alt = "Uma reta numérica com pontos dispostos nela.";

            const pular_linha = document.createElement("br");

            DivEnunciado.appendChild(pular_linha);

            DivEnunciado.appendChild(img);
        }

        const titulo_resposta = document.createElement("span");

        titulo_resposta.textContent = "Resposta:";

        DivResposta.appendChild(titulo_resposta);



        if(questao.fracao){
            
            const qtde = questao.n.length;

            for(let i = 0; i < qtde; i++){

                const frac = `<div class='numerador_cf' contenteditable='true'></div>
                    <hr style='background-color: #777; width: 70px; height: 1px; border-radius: 5px; box-shadow: none;' />
                    <div class='denominador_cf' contenteditable='true'></div>`;

                const div = document.createElement("div");

                div.classList.add("fracao_cf");

                div.innerHTML = frac;

                div.style.cssText = "display: flex; justify-content: center; align-items: center; flex-direction: column;";

                DivEspacoResposta.appendChild(div);

                const virgula = i >= 0 && i != qtde-1 ? ", " : "";

                const r = " "+questao.n[i]+"/"+questao.d[i]+" ("+questao.n[i]+" sobre "+questao.d[i]+")"+virgula;

                const span = document.createElement("span");

                span.innerHTML = r;

                titulo_resposta.appendChild(span);

            }

        } else {

            const input = document.createElement("div");

            input.classList.add("resposta_jogador_cf");

            input.style.cssText = "background-color: #fff; margin-left: 15px; width: 130px; height: 40px; box-sizing: border-box; border: 1px solid #999; border-radius: 5px; display: flex; align-items: center; justify-content: center;";

            input.contentEditable = "true";
            
            DivEspacoResposta.appendChild(input);

            const r = " "+questao.r[0];

            const span = document.createElement("span");

            span.innerHTML = r;

            titulo_resposta.appendChild(span);

        }



        const div = document.createElement("div");

        const div_2 = document.createElement("div");

        div.appendChild(DivEnunciado);

        div.appendChild(DivEspacoResposta);

        div_2.appendChild(DivResposta);


        return [div, div_2];


    }





    function pular_cf(){

        erradas_cf.push(questoes_cf[i_cf]);

        questoes_cf.splice(i_cf,1);

        i_cf >= questoes_cf.length ? i_cf = 0 : null;

        vez_cf == 0? vez_cf = 1 : vez_cf = 0;

        gerenciar_vez_visual_cf();

    }

    function pular_btn_onclick_cf(){

        const barra_inferior = document.querySelector(".barra_inferior_cf");

        const btns = barra_inferior.querySelectorAll("button");

        const pular = document.getElementById("pular_cf");

        btns[0].onclick = function(){}

        btns[0].classList.toggle("bt_desativado_cf");

        btns[1].onclick = function(){}

        btns[1].classList.toggle("bt_desativado_cf");

        pular_cf();

        //Som de Pular
        som_ativado_cf? pular.play() : null;


        if(questoes_cf.length == 0){

            questoes_cf = erradas_cf.slice();

            erradas_cf.length = 0;

        }

        setTimeout(() => {
            
            const card_conteudo = montar_pergunta_cf();

            mostrar_card_cf(card_conteudo[0].innerHTML, card_conteudo[1].innerHTML, "depois");

            MathJax.typesetClear();
            MathJax.typeset();

            btns[0].onclick = function(){  pular_btn_onclick_cf()}

            btns[0].classList.toggle("bt_desativado_cf");

            btns[1].onclick = function(){corrigir_btn_onclick_cf();}

            btns[1].classList.toggle("bt_desativado_cf");

        }, 1000);

        

    }



    function corrigir_cf(){

        const questao = questoes_cf[i_cf];

        const div = document.querySelector(".espaco_resposta_cf");

        if(questao.fracao){

            const fracoes = document.querySelectorAll(".fracao_cf");

            const numeradores_r = questao.n; 

            const denominadores_r = questao.d;

            if(questao.ordenacao){

                let acertos_multiplas_respostas = 0;

                for(let i = 0; i < fracoes.length; i++){

                    const numerador_jogador = fracoes[i].querySelector(".numerador_cf");

                    const denominador_jogador = fracoes[i].querySelector(".denominador_cf");

                

                    if(numeradores_r[i] == numerador_jogador.textContent && denominadores_r[i] == denominador_jogador.textContent){

                        acertos_multiplas_respostas++;

                        if(i == fracoes.length-1){//verificando se acertou
                                    
                            if(acertos_multiplas_respostas == fracoes.length){return true;} else {return false;}

                        }
                            
                    }            


                } //fecha for

            } else {

                if(numeradores_r.length > 1){

                    let acertos = 0;

                    for(let i = 0; i < fracoes.length; i++){

                        const ns = fracoes[i].querySelector(".numerador_cf").textContent;

                        const ds = fracoes[i].querySelector(".denominador_cf").textContent;

                        if(numeradores_r.includes(ns)){
                            const index = numeradores_r.indexOf(ns);
                            denominadores_r[index] == ds? acertos++ : null;
                        }

                    }//fecha for

                    //verificando se acertou
                    if(acertos == fracoes.length){return true;} else {return false;}
                

                } else {

                    const n = fracoes[0].querySelector(".numerador_cf").textContent;

                    const d = fracoes[0].querySelector(".denominador_cf").textContent;


                    if(numeradores_r[0] == n && denominadores_r[0] == d){

                        //ACERTOU

                        return true;

                    } else {
                        //ERROU

                        return false;
                    }

                }

            } //fecha if da verificacao se tem ordem para responder corretamente



        } else {

            let erros = 0;

            let gabarito = questao.r;

            let resposta = document.querySelector(".resposta_jogador_cf").textContent;

            resposta = resposta.replace(/\s/g, "");

            resposta = resposta.toLocaleLowerCase();

            for(i = 0; i < gabarito.length; i++){

                let gab = gabarito[i].replace(/\s/g, "");

                gab = gab.toLocaleLowerCase();

                if(resposta == gab){
                    return true;
                } else {
                    erros++;
                }

                if(erros == gabarito.length){
                    return false;
                }

            }


        } //fecha if da verificacao se é fracao

    }//fecha corrigir_cf

    function corrigir_btn_onclick_cf(){

        const pontos_el = document.querySelectorAll(".pts_cf");

        const verso = document.querySelector(".verso_cf");

        const som = document.getElementById("virar_cf");

        const acerto = document.getElementById("acerto_cf");

        const erro = document.getElementById("erro_cf");

        som_ativado_cf? som.play(): null;

        virar_card_cf();

        const barra_inferior = document.querySelector(".barra_inferior_cf");

        const btns = barra_inferior.querySelectorAll("button");

        btns[0].onclick = function(){}

        btns[0].classList.toggle("bt_desativado_cf");

        btns[1].onclick = function(){}

        btns[1].classList.toggle("bt_desativado_cf");

        const acertou = corrigir_cf();

        const jogador = jogadores_cf[vez_cf];

        const div = document.createElement("div");

        if(acertou){//ACERTO

            const tempo = setTimeout(() => {
                gerenciar_vez_visual_cf();
            }, 3000);

            div.innerHTML = `<span style="color: green; font-weight: bold; text-shadow: 1px 1px black;">CORRETO! </span> ${jogador.nome}.`;

            jogadores_cf[vez_cf].pontos++;

            pontos_el[vez_cf].textContent = jogadores_cf[vez_cf].pontos;

            verso.appendChild(div);

            corretas_cf.push(questoes_cf[i_cf]);

            questoes_cf.splice(i_cf, 1);

            if(questoes_cf.length == 0 && erradas_cf.length > 0){

                questoes_cf = erradas_cf.slice();

                erradas_cf = [];

                i_cf = 0;

                setTimeout(() => {
                

                const card_conteudo = montar_pergunta_cf();

                mostrar_card_cf(card_conteudo[0].innerHTML, card_conteudo[1].innerHTML, "depois");

                MathJax.typesetClear();
                MathJax.typeset();

                btns[0].onclick = function(){  pular_btn_onclick_cf()}

                btns[0].classList.toggle("bt_desativado_cf");

                btns[1].onclick = function(){corrigir_btn_onclick_cf();}

                btns[1].classList.toggle("bt_desativado_cf");
                                

            }, 3000);

            } else if(questoes_cf.length == 0 && erradas_cf.length == 0){

                //fim do jogo

                clearTimeout(tempo);

                let msg;

                const fim = document.getElementById("fim_cf");

                 if(jogadores_cf[0].pontos == jogadores_cf[1].pontos){

                    msg = "Fim de jogo! "+jogadores_cf[0].nome+" e "+jogadores_cf[1].nome+" <span style='color: yellow; font-weight: bold; text-shadow: 1px 1px black;'> empataram!</span>";

                 } else if(jogadores_cf[0].pontos > jogadores_cf[1].pontos){

                    msg = "Fim de jogo! "+jogadores_cf[0].nome+" <span style='color: green; font-weight: bold; text-shadow: 1px 1px black;'> ganhou!</span>";

                 } else {

                    msg = "Fim de jogo! "+jogadores_cf[1].nome+" <span style='color: green; font-weight: bold; text-shadow: 1px 1px black;'> ganhou!</span>";

                 }

                 verso.style.cssText = "display: flex; justify-content: center; align-items: center; flex-direction: row; gap: 10px";

                 verso.innerHTML = msg;

                 setTimeout(() => {
                    som_ativado_cf? fim.play(): null;
                 }, 700);




            } else {

                i_cf >= questoes_cf.length-1? i_cf = 0 : i_cf++;

                setTimeout(() => {
                

                    const card_conteudo = montar_pergunta_cf();

                    mostrar_card_cf(card_conteudo[0].innerHTML, card_conteudo[1].innerHTML, "depois");

                    MathJax.typesetClear();
                    MathJax.typeset();

                    btns[0].onclick = function(){  pular_btn_onclick_cf()}

                    btns[0].classList.toggle("bt_desativado_cf");

                    btns[1].onclick = function(){corrigir_btn_onclick_cf();}

                    btns[1].classList.toggle("bt_desativado_cf");

                                

                }, 3000);

            }

            setTimeout(() => {
                som_ativado_cf? acerto.play(): null;
            }, 700);

            

        } else {//ERRO

            div.innerHTML = `<span style="color: red; font-weight: bold; text-shadow: 1px 1px black;">ERRADO! </span> ${jogador.nome}.`;

            jogadores_cf[vez_cf].pontos--;

            pontos_el[vez_cf].textContent = jogadores_cf[vez_cf].pontos;

            verso.appendChild(div);

            erradas_cf.push(questoes_cf[i_cf]);

            questoes_cf.splice(i_cf, 1);

            if(questoes_cf.length == 0){

                questoes_cf = erradas_cf.slice();

                erradas_cf = [];

                i_cf = 0;

            } else {

                i_cf >= questoes_cf.length-1? i_cf = 0 : i_cf++;
                
            }

            setTimeout(() => {
                som_ativado_cf? erro.play(): null;
            }, 700);

            setTimeout(() => {
                

                const card_conteudo = montar_pergunta_cf();

                mostrar_card_cf(card_conteudo[0].innerHTML, card_conteudo[1].innerHTML, "depois");

                MathJax.typesetClear();
                MathJax.typeset();

                btns[0].onclick = function(){  pular_btn_onclick_cf()}

                btns[0].classList.toggle("bt_desativado_cf");

                btns[1].onclick = function(){corrigir_btn_onclick_cf();}

                btns[1].classList.toggle("bt_desativado_cf");

                gerenciar_vez_visual_cf();
                   

            }, 3000);


        } //Fim if se acertou ou errou


        vez_cf == 0? vez_cf = 1 : vez_cf = 0;

     
        
        

        

    }


    function falar_cf(){

        const card = document.querySelector('.card_papel_cf');

        const frente = document.querySelector('.frente_cf');

        const verso = document.querySelector('.verso_cf');

        let texto;

        card.classList.contains("virado_cf")? texto = verso.innerText: texto = frente.innerText


        // Verifica se a API de fala está disponível no navegador
        if ('speechSynthesis' in window) {
            let fala = new SpeechSynthesisUtterance(texto); console.log(texto)
            window.speechSynthesis.speak(fala);
        } else {
            console.log('API de fala não suportada neste navegador.');
        }

    }


    function virar_card_cf(){

        const card = document.querySelector('.card_papel_cf');

        card.classList.toggle('virado_cf');


    }

    function deslizandoParaEsquerda_cf(){

        const card = document.querySelectorAll('.card_papel_cf');

        const passar = document.getElementById("passar_cf");

        som_ativado_cf? passar.play(): null;

        for(i = 0; i < card.length; i++){

            card[i].classList.toggle('deslizarParaEsquerda_cf');

        }

    }

    function deslizandoParaDireita_cf(){

        const card = document.querySelectorAll('.card_papel_cf');

        const passar = document.getElementById("passar_cf");

        som_ativado_cf? passar.play(): null;

        for(i = 0; i < card.length; i++){

            card[i].classList.toggle('deslizarParaDireita_cf');

        }

    }

    function mostrar_card_cf(conteudo_frente, conteudo_verso, ordem){ 

        const card_certos = corretas_cf.length + 1;

        const total_cards = questoes_cf.length+corretas_cf.length+erradas_cf.length;

        const numeros_cards = card_certos +"/"+ total_cards;

        const el_numeros_cards = document.querySelector(".qtde_cards_cf");

        let indice_cor = Math.floor(Math.random() * cores_overlay_cf.length);

        cores_overlay_cf[indice_cor] == ultima_cor_overlay_cf? indice_cor++: null;

        indice_cor >= cores_overlay_cf.length? indice_cor = 0: null;

        const cor = cores_overlay_cf[indice_cor];

        ultima_cor_overlay_cf = cor;

        const trilha = document.querySelector(".trilha_dos_cards_cf"); 

        const card_papel = document.createElement("div");

        card_papel.classList.add("card_papel_cf");

        const card_interior = document.createElement("div");

        card_interior.classList.add("card_interior_cf"); 

        const container_linhas = document.createElement("div");

        container_linhas.classList.add("container_linhas_cf");

        const primeira_linha = document.createElement("div");

        primeira_linha.classList.add("linha_cf");

        primeira_linha.classList.add("primeira-linha_cf");

        container_linhas.appendChild(primeira_linha);


        for(i = 0; i < 9; i++){

            const linha = document.createElement("div");

            linha.classList.add("linha_cf");

            container_linhas.appendChild(linha);

        }

        const overlay = document.createElement("div");

        overlay.classList.add("papel_overlay_cf");

        overlay.style.backgroundColor = cor;

        container_linhas.appendChild(overlay);

        const frente = document.createElement("div");

        frente.classList.add("frente_cf");

        const verso = document.createElement("div");

        verso.classList.add("verso_cf");

        card_interior.appendChild(container_linhas);

        card_interior.appendChild(frente);

        card_interior.appendChild(verso);

        card_papel.appendChild(card_interior);

        conteudo_frente? frente.innerHTML = conteudo_frente: null;

        conteudo_verso? verso.innerHTML = conteudo_verso: null;

        if(ordem == "antes"){

            trilha.prepend(card_papel);

                deslizandoParaDireita_cf();

                el_numeros_cards.textContent = numeros_cards;

            setTimeout(() => {
                
                const arr = document.querySelectorAll(".card_papel_cf");

                const index = arr.length - 1;

                arr[index].remove();

                deslizandoParaDireita_cf();

            }, 600); //ATENCAO o tempo tem que ser um pouco menor do que o da animacao de deslizar os cards

            

        } else if (ordem == "depois") {

            trilha.appendChild(card_papel);

                deslizandoParaEsquerda_cf();

                el_numeros_cards.textContent = numeros_cards;

            setTimeout(() => {
                
                const arr = document.querySelectorAll(".card_papel_cf");

                arr[0].remove();

                deslizandoParaEsquerda_cf();


            }, 600); //ATENCAO o tempo tem que ser um pouco menor do que o da animacao de deslizar os cards


        } else {

            trilha.prepend(card_papel);

        }

    }



    function gerenciar_vez_visual_cf(){//só gerencia a parte visual para os jogadores saberem de quem é a vez

        const placar = document.querySelectorAll('.placar_cf');

        const limpar = vez_cf == 1? 0: 1;

        placar[vez_cf].style.borderBottom = "2px solid rgb(255, 51, 90)";

        placar[limpar].style.borderBottom = "none";

    }


    function shuffleArray(array) {

        for (let i = array.length - 1; i > 0; i--) {

            const j = Math.floor(Math.random() * (i + 1));
            [array[i], array[j]] = [array[j], array[i]];

        }

        return array;
    }



/********************************************* FIM Jogo Card das Frações *******************************************/


