Skip to content

jogo #289

@noquelinicole-afk

Description

@noquelinicole-afk
<title>Guardiões de Ibiúna: Missão 60</title>
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@400;700&family=Fredoka+One&display=swap" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/canvas-confetti@1.6.0/dist/confetti.browser.min.js"></script>

<style>
    :root {
        --forest-green: #2d5a27; --leaf-green: #4caf50; --earth-brown: #795548;
        --sun-yellow: #fbc02d; --sky-blue: #e3f2fd; --white: #ffffff;
        --danger-red: #f44336;
    }

    * { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
    
    /* Ajuste para garantir que o fundo ocupe 100% da tela no Safari/iOS */
    html, body {
        height: 100%;
        height: -webkit-fill-available;
    }

    body {
        font-family: 'Montserrat', sans-serif; background: #c8e6c9;
        margin: 0; display: flex; justify-content: center; align-items: center; 
        min-height: 100vh;
        transition: background-color 0.4s ease; overflow-x: hidden;
    }

    /* Efeitos Visuais */
    .flash-success { background-color: #4caf50 !important; }
    .flash-error { background-color: #f44336 !important; }

    .shake-effect {
        animation: shake 0.5s cubic-bezier(.36,.07,.19,.97) both;
        border: 2px solid var(--danger-red) !important;
    }

    @keyframes shake {
        10%, 90% { transform: translate3d(-1px, 0, 0); }
        20%, 80% { transform: translate3d(2px, 0, 0); }
        30%, 50%, 70% { transform: translate3d(-4px, 0, 0); }
        40%, 60% { transform: translate3d(4px, 0, 0); }
    }

    #game-wrapper {
        width: 92%; max-width: 500px; background: var(--white); border-radius: 24px;
        box-shadow: 0 10px 30px rgba(0,0,0,0.15); padding: 20px; position: relative;
        border: 2px solid transparent; transition: transform 0.2s;
    }

    .hidden { display: none !important; }

    /* Timer */
    #timer-container { width: 100%; height: 8px; background: #eee; border-radius: 4px; margin: 10px 0; overflow: hidden; }
    #timer-bar { width: 100%; height: 100%; background: var(--leaf-green); transition: width 1s linear; }

    /* Roleta com aceleração de hardware para Safari */
    #wheel-container { position: relative; width: 250px; height: 250px; margin: 20px auto; }
    #wheel { 
        width: 100%; height: 100%; border-radius: 50%; border: 6px solid var(--earth-brown);
        transition: transform 4s cubic-bezier(0.15, 0, 0.15, 1);
        will-change: transform;
        -webkit-transform: translateZ(0); 
    }
    #pointer {
        position: absolute; top: -10px; left: 50%; transform: translateX(-50%);
        width: 0; height: 0; border-left: 15px solid transparent; border-right: 15px solid transparent;
        border-top: 25px solid var(--earth-brown); z-index: 10;
    }

    /* Botões e Inputs */
    .btn-main { width: 100%; padding: 15px; border: none; border-radius: 12px; font-weight: bold; cursor: pointer; margin-top: 10px; font-size: 1rem; -webkit-appearance: none; }
    .btn-next { background: var(--forest-green); color: white; border-bottom: 4px solid #1a3a16; }
    .btn-next:active { transform: translateY(2px); border-bottom-width: 2px; }
    
    input, select { width: 100%; padding: 12px; border-radius: 10px; border: 2px solid #ddd; margin-bottom: 10px; font-size: 16px; }

    .option-btn { background: #f1f8e9; border: 2px solid #c8e6c9; padding: 12px; border-radius: 10px; cursor: pointer; font-weight: 600; margin-bottom: 8px; width: 100%; text-align: left; }
    .correct { background: #c8e6c9 !important; border-color: #4caf50 !important; }
    .wrong { background: #ffcdd2 !important; border-color: #f44336 !important; }

    #scoreboard { display: grid; grid-template-columns: repeat(3, 1fr); gap: 5px; margin-top: 15px; }
    .score-box { background: #f1f8e9; padding: 5px; border-radius: 8px; text-align: center; border: 1px solid #c8e6c9; font-size: 0.7rem; }
    
    .podium-step { transition: height 1s ease-out; }
</style>

Missão em Pausa!

Encontramos um progresso salvo.

Retomar Jornada Novo Jogo
<div id="setup-screen" style="text-align: center;">
    <h1 style="font-family: 'Fredoka One'; color: var(--forest-green); margin-bottom: 5px;">Guardiões de Ibiúna</h1>
    <p style="font-size: 0.9rem;">Missão 60: Sustentabilidade</p>
    <p>Quantos heróis na equipe?</p>
    <select id="player-count">
        <option value="2">2 Jogadores</option>
        <option value="3">3 Jogadores</option>
        <option value="4">4 Jogadores</option>
        <option value="5">5 Jogadores</option>
        <option value="6">6 Jogadores</option>
    </select>
    <button class="btn-main btn-next" onclick="game.unlockAudio(); game.showNameInputs()">Configurar Nomes</button>
</div>

<div id="names-screen" class="hidden" style="text-align: center;">
    <div id="name-fields"></div>
    <button class="btn-main btn-next" onclick="game.startExpedition()">Começar Jornada</button>
</div>

<div id="roulette-screen" class="hidden" style="text-align: center;">
    <h3 id="turn-title" style="color: var(--forest-green); margin: 0;">Quem será o próximo?</h3>
    <div id="wheel-container"><div id="pointer"></div><div id="wheel"></div></div>
    <button id="spin-btn" class="btn-main btn-next" onclick="game.spin()">Girar Roleta! 🌀</button>
    <div id="scoreboard"></div>
</div>

<div id="quiz-screen" class="hidden">
    <div style="background: var(--forest-green); color: white; padding: 10px; border-radius: 12px; text-align: center;">
        <strong id="current-player-display"></strong> | <span id="timer-text">01:30</span>
        <div id="timer-container"><div id="timer-bar"></div></div>
    </div>
    <div style="padding: 10px 0;">
        <p id="q-text" style="font-weight: bold; color: var(--forest-green); min-height: 50px;"></p>
        <div id="hint-area" class="hidden" style="background: #fffde7; padding: 10px; border-radius: 8px; font-size: 0.8rem; margin-bottom: 10px; border-left: 4px solid gold;">
            <span id="hint-text"></span>
        </div>
        <button id="hint-btn" class="btn-main" style="background:#eee; font-size:0.75rem" onclick="game.useHint()">💡 Usar Dica (-0.5 pts)</button>
        <div id="options"></div>
        <div id="feedback-panel" class="hidden" style="margin-top: 10px; padding: 15px; background: #e8f5e9; border-radius: 12px; border: 1px solid #4caf50;">
            <p id="explanation" style="font-size: 0.85rem; margin-top:0;"></p>
            <button class="btn-main btn-next" onclick="game.backToWheel()">Continuar Missão ➡</button>
        </div>
    </div>
</div>

<div id="result-screen" class="hidden" style="text-align: center;">
    <h2 style="font-family: 'Fredoka One'; color: var(--forest-green);">Ranking Final</h2>
    <div id="podium-ui" style="display:flex; align-items:flex-end; justify-content:center; gap:8px; height:120px; margin-bottom:20px;"></div>
    <div id="final-list" style="margin: 15px 0; text-align: left; font-size: 0.9rem; max-height: 150px; overflow-y: auto; padding: 10px; background: #f9f9f9; border-radius: 10px;"></div>
    <button class="btn-main btn-next" onclick="game.clearSave()">Reiniciar Desafio</button>
</div>
<script> const quizData = [ { q: "Quais são as duas Unidades de Conservação estaduais em Ibiúna?", opt: ["APA de Itupararanga e PEJU", "Parque da Cachoeira e Reserva", "APA de Ibiúna e Jurupará"], c: 0, dica: "Uma começa com 'APA' e a outra protege o Jurupará.", e: "Em Ibiúna existem a APA de Itupararanga e o Parque Estadual do Jurupará (PEJU)." }, { q: "Qual o objetivo da APA de Itupararanga?", opt: ["Extrair minério", "Construir prédios", "Proteger a água e biodiversidade"], c: 2, dica: "Pense no que usamos para beber.", e: "O objetivo é proteger a qualidade e quantidade das águas e a biodiversidade." }, { q: "A Usina de Itupararanga começou a operar em que ano?", opt: ["1914", "1998", "2003"], c: 0, dica: "Mais de 100 anos atrás.", e: "A usina entrou em operação em 1914." }, { q: "Quais rios formam a Represa Itupararanga?", opt: ["Tietê e Pinheiros", "Sorocabuçu, Sorocamirim e Una", "Piracicaba e Piedade"], c: 1, dica: "São três rios locais.", e: "Os rios Sorocabuçu, Sorocamirim e Una formam a represa." }, { q: "Qual rio abastece o município de Ibiúna?", opt: ["Rio Una", "Rio Sorocabuçu", "Rio Sorocamirim"], c: 1, dica: "Nasce no Verava.", e: "O Rio Sorocabuçu é o responsável pelo abastecimento de Ibiúna." }, { q: "O Parque Estadual do Jurupará (PEJU) tem qual tamanho?", opt: ["100 hectares", "5 mil hectares", "Mais de 26 mil hectares"], c: 2, dica: "É uma área gigantesca.", e: "A área do PEJU é de mais de 26 mil hectares." }, { q: "Quantas cidades o Sistema São Lourenço abastece?", opt: ["5 cidades", "12 cidades", "2 cidades"], c: 1, dica: "Abastece grande parte da região.", e: "As águas da Represa Cachoeira do França abastecem 12 cidades." }, { q: "O que significa 'Ibiúna' em Tupi-Guarani?", opt: ["Terra Preta", "Água Doce", "Cachoeira Alta"], c: 0, dica: "Refere-se à cor da terra.", e: "Ibiúna significa 'Terra Preta' ou 'Terra Escura'." }, { q: "Para onde vai o lixo coletado em Ibiúna?", opt: ["Fica no Cupim", "Vai para Araçariguama", "Joga no Rio Una"], c: 1, dica: "Vai para outra cidade.", e: "Os resíduos são levados para Araçariguama." }, { q: "Onde devem ser entregues as embalagens de agrotóxicos?", opt: ["Lixo comum", "Posto de devolução no Cupim", "Perto da rodoviária"], c: 1, dica: "Fica perto do antigo aterro.", e: "Devem ser entregues no posto de devolução no Bairro do Cupim." }, { q: "O que é Mata Ciliar?", opt: ["Mata na beira dos rios", "Plantação de eucalipto", "Jardim público"], c: 0, dica: "Cílios do rio.", e: "A Mata Ciliar protege os rios contra erosão e poluição." }, { q: "Qual destes animais é símbolo da nossa fauna local?", opt: ["Elefante", "Onça-parda", "Canguru"], c: 1, dica: "Um felino nativo.", e: "A onça-parda é um dos predadores do topo da cadeia em nossa região." }, { q: "O que acontece se jogarmos óleo de cozinha no ralo?", opt: ["Limpa os canos", "Polui a água", "Vira sabão"], c: 1, dica: "Contamina milhares de litros.", e: "Apenas 1 litro de óleo pode poluir até 25 mil litros de água." }, { q: "Qual a importância das áreas de 'Banhado' na represa?", opt: ["Não servem para nada", "Filtros naturais e berçários", "Lugar para entulho"], c: 1, dica: "Limpam a água.", e: "Banhados filtram sedimentos e são locais de reprodução para peixes." }, { q: "Qual árvore é símbolo do Brasil e existe em Ibiúna?", opt: ["Pau-Brasil", "Eucalipto", "Pinheiro-manso"], c: 0, dica: "Origem do nome do país.", e: "O Pau-Brasil é nativo da Mata Atlântica da região." }, { q: "O que é o 'Consumo Consciente'?", opt: ["Comprar tudo", "Comprar o necessário", "Não comprar nada"], c: 1, dica: "Evitar desperdício.", e: "É escolher produtos com responsabilidade." }, { q: "Quanto tempo uma garrafa PET leva para se decompor?", opt: ["10 anos", "100 anos", "Mais de 400 anos"], c: 2, dica: "Séculos.", e: "O plástico pode durar mais de 400 anos na natureza." }, { q: "Qual passarinho é famoso por polinizar flores?", opt: ["Pombo", "Beija-flor", "Urubu"], c: 1, dica: "Voa parado.", e: "O beija-flor é um importante polinizador da nossa flora." }, { q: "Que tipo de resíduo deve ir para a compostagem?", opt: ["Plástico", "Restos de alimentos", "Pilhas"], c: 1, dica: "Resíduos orgânicos.", e: "Cascas de frutas e vegetais viram adubo." }, { q: "A represa Itupararanga abastece quantos habitantes?", opt: ["Cerca de 800 mil", "Apenas 10 mil", "5 milhões"], c: 0, dica: "Quase 1 milhão.", e: "A represa é vital para quase 1 milhão de pessoas na região." }, { q: "Qual o principal perigo de queimar lixo?", opt: ["Faz calor", "Libera gases tóxicos", "Fica bonito"], c: 1, dica: "Poluição do ar.", e: "A queima libera toxinas prejudiciais à saúde." }, { q: "O que é 'Espécie Invasora'?", opt: ["Planta local", "Espécie de fora que prejudica", "Animal doméstico"], c: 1, dica: "Ex: Javali.", e: "Espécies que não são nativas e causam desequilíbrio." }, { q: "A água da represa é usada para quê, além de beber?", opt: ["Lazer", "Energia e agricultura", "Nada"], c: 1, dica: "Economia local.", e: "Usada para gerar eletricidade e irrigar plantações." }, { q: "O que fazer com pilhas usadas?", opt: ["Lixo comum", "Enterrar", "Pontos de coleta"], c: 2, dica: "Logística reversa.", e: "Devem ser descartadas em coletores especiais." }, { q: "Qual animal ameaçado vive no PEJU?", opt: ["Pombo", "Muriqui-do-sul", "Rato"], c: 1, dica: "Maior macaco das Américas.", e: "O Muriqui-do-sul é um primata raro da nossa região." }, { q: "O que economiza mais água no banho?", opt: ["20 minutos", "5 minutos", "Chuveiro aberto"], c: 1, dica: "Rapidez.", e: "Banhos curtos são essenciais para economizar água." }, { q: "Qual a função das abelhas?", opt: ["Fazer mel apenas", "Polinização", "Atacar"], c: 1, dica: "Reprodução de plantas.", e: "Abelhas são fundamentais para a produção de alimentos." }, { q: "O que significam os '3 Rs'?", opt: ["Rir, Rezar, Rolar", "Reduzir, Reutilizar, Reciclar", "Rapidez e Rio"], c: 1, dica: "Sustentabilidade.", e: "Reduzir o consumo, reutilizar itens e reciclar o que sobra." }, { q: "Ibiúna é conhecida como a Capital de quê?", opt: ["Ferro", "Agricultura", "Cinema"], c: 1, dica: "Cinturão Verde.", e: "Ibiúna é grande produtora de hortaliças." }, { q: "Qual o maior reservatório de água da nossa região?", opt: ["Itupararanga", "Piscina", "Caixa d'água"], c: 0, dica: "Nossa represa.", e: "Itupararanga é o principal reservatório regional." }, { q: "O que é o Efeito Estufa?", opt: ["Um aquecimento natural intensificado pela poluição", "Uma casa de vidro para morangos", "Um vento gelado da serra"], c: 0, dica: "Funciona como um cobertor para o planeta.", e: "É um fenômeno natural, mas o excesso de gases como CO2 o torna perigoso." }, { q: "Como as florestas de Ibiúna ajudam o clima?", opt: ["Absorvem CO2", "Atraem turistas", "Refletem a luz"], c: 0, dica: "Fotossíntese.", e: "Árvores capturam carbono, ajudando a frear o aquecimento global." }, { q: "O que são 'Ilhas de Calor'?", opt: ["Áreas urbanas mais quentes que rurais", "Ilhas na represa", "Fogueiras"], c: 0, dica: "Asfalto e concreto retêm calor.", e: "Cidades sem árvores ficam muito mais quentes que o interior." }, { q: "Onde descartar celulares velhos?", opt: ["Pontos de lixo eletrônico", "Lixo comum", "Rio Una"], c: 0, dica: "Contém metais pesados.", e: "Eletrônicos devem ir para a logística reversa." }, { q: "Quem fundou Ibiúna em 1811?", opt: ["Manoel de Oliveira Carvalho", "Pedro Vaz", "Dom Pedro I"], c: 0, dica: "Capitão que doou terras.", e: "Manoel de Oliveira Carvalho é o fundador oficial." }, { q: "Qual a cor do cesto de PAPEL na reciclagem?", opt: ["Azul", "Vermelho", "Amarelo"], c: 0, dica: "Cor do céu.", e: "Azul é para papel, Vermelho plástico, Amarelo metal." }, { q: "O que é um Manancial?", opt: ["Reserva de água potável", "Plantação", "Mina de ouro"], c: 0, dica: "Fonte de vida.", e: "Ibiúna é uma cidade manancial porque produz água para milhões." }, { q: "O que significa 'Espécie Endêmica'?", opt: ["Só existe naquela região", "Veio de outro país", "Animal doméstico"], c: 0, dica: "Exclusividade.", e: "São espécies que só ocorrem em um lugar específico do mundo." }, { q: "Como o aquecimento global afeta o agricultor?", opt: ["Muda o ciclo das chuvas", "Faz crescer mais rápido", "Não afeta"], c: 0, dica: "Instabilidade.", e: "Secas e chuvas extremas prejudicam as safras de Ibiúna." }, { q: "O que é Assoreamento?", opt: ["Acúmulo de terra no fundo do rio", "Rio que corre rápido", "Limpeza do rio"], c: 0, dica: "Falta de mata ciliar.", e: "Sem árvores, a terra cai no rio e ele fica raso." }, { q: "Qual gás os carros liberam que aquece o planeta?", opt: ["Dióxido de Carbono (CO2)", "Oxigênio", "Nitrogênio"], c: 0, dica: "Combustão.", e: "O CO2 é o principal gás do efeito estufa vindo de motores." }, { q: "O que é Reciclagem?", opt: ["Transformar resíduos em novos produtos", "Queimar o lixo", "Enterrar o lixo"], c: 0, dica: "Ciclo de vida.", e: "Reciclar poupa recursos naturais e energia." }, { q: "Para que serve a camada de Ozônio?", opt: ["Protege contra raios UV", "Esquenta a Terra", "Produz chuva"], c: 0, dica: "Protetor solar natural.", e: "Ela filtra os raios solares perigosos para a saúde." }, { q: "Qual o maior perigo das queimadas em Ibiúna?", opt: ["Destruição da fauna e poluição", "Faz muita fumaça", "Suja a roupa"], c: 0, dica: "Perda total.", e: "Queimadas matam animais e liberam muito carbono." }, { q: "O que é Biodiversidade?", opt: ["Variedade de vida na Terra", "Um tipo de planta", "Um museu"], c: 0, dica: "Muitas espécies.", e: "É o conjunto de todos os seres vivos e seus ecossistemas." }, { q: "O que fazer com restos de comida?", opt: ["Compostagem", "Jogar no esgoto", "Queimar"], c: 0, dica: "Adubo natural.", e: "O lixo orgânico pode virar terra fértil." }, { q: "Qual animal ajuda a 'reflorestar' a Mata Atlântica?", opt: ["Tucano (espalha sementes)", "Cachorro", "Gato"], c: 0, dica: "Bico grande.", e: "Aves que comem frutos espalham sementes por toda a floresta." }, { q: "O que é Sustentabilidade?", opt: ["Viver sem esgotar recursos", "Comprar muito", "Ter muito dinheiro"], c: 0, dica: "Pensar no futuro.", e: "É usar a natureza sem impedir que as futuras gerações também usem." }, { q: "Qual o destino do vidro reciclado?", opt: ["Pode ser reciclado infinitamente", "Vira plástico", "Lixo comum"], c: 0, dica: "100% aproveitável.", e: "O vidro não perde qualidade ao ser reciclado várias vezes." }, { q: "O que causa a erosão do solo?", opt: ["Falta de vegetação", "Muita planta", "Vento fraco"], c: 0, dica: "Solo exposto.", e: "Sem raízes, a chuva carrega a terra embora." }, { q: "Por que evitar canudos de plástico?", opt: ["Poluem oceanos e matam animais", "São caros", "São feios"], c: 0, dica: "Tartarugas.", e: "O plástico pequeno é um dos que mais mata vida marinha." }, { q: "Como economizar energia em casa?", opt: ["Apagar luzes e usar LED", "Deixar TV ligada", "Banho de 1 hora"], c: 0, dica: "Consumo consciente.", e: "Economizar energia reduz a necessidade de novas usinas." }, { q: "Qual o papel do Guardião da Natureza?", opt: ["Preservar e ensinar", "Apenas olhar", "Lutar com animais"], c: 0, dica: "Ação positiva.", e: "Todos somos responsáveis por cuidar do nosso planeta." }, { q: "O que é Poluição Atmosférica?", opt: ["Sujeira no ar", "Lixo no chão", "Ruído alto"], c: 0, dica: "Respiração.", e: "Gases e partículas que tornam o ar impróprio." }, { q: "Qual árvore de Ibiúna produz pinhão?", opt: ["Araucária", "Eucalipto", "Mangueira"], c: 0, dica: "Pinheiro nativo.", e: "A Araucária é típica de áreas frias e altas como Ibiúna." }, { q: "O que é pegada de carbono?", opt: ["Rastro de CO2 que deixamos", "Tamanho do pé", "Um sapato"], c: 0, dica: "Impacto pessoal.", e: "É a medida de quanto poluímos em nossas atividades diárias." }, { q: "Por que proteger as nascentes?", opt: ["Para garantir água no futuro", "Para pescar", "Para nadar"], c: 0, dica: "Início de tudo.", e: "Sem nascentes, os rios secam e a vida acaba." }, { q: "O que é Logística Reversa?", opt: ["Empresa recolhe o que vendeu", "Andar para trás", "Vender lixo"], c: 0, dica: "Responsabilidade do fabricante.", e: "Fabricantes de pilhas e pneus devem recolher os produtos usados." }, { q: "Qual benefício da horta orgânica?", opt: ["Alimento sem veneno", "Fica mais bonito", "Dá menos trabalho"], c: 0, dica: "Saúde.", e: "Orgânicos não usam agrotóxicos que fazem mal à saúde e ao solo." }, { q: "Qual a maior lição dos Guardiões de Ibiúna?", opt: ["Cuidar hoje para ter amanhã", "Jogar videogame", "Dormir cedo"], c: 0, dica: "Legado.", e: "A preservação é um ato de amor ao próximo e ao planeta." } ]; const game = { players: [], currentIdx: 0, rotation: 0, timeLeft: 90, timerInterval: null, hintUsed: false, count: 0, currentPlayerIdx: 0, init() { if (localStorage.getItem('ibiuna_guardiao_save')) { document.getElementById('setup-screen').classList.add('hidden'); document.getElementById('recovery-screen').classList.remove('hidden'); } }, // Função de áudio otimizada para navegadores móveis (Safari/Chrome Mobile) unlockAudio() { const audio = document.getElementById('applause-sound'); if (audio) { audio.play().then(() => { audio.pause(); audio.currentTime = 0; }).catch(e => console.log("Áudio aguardando interação real.")); } }, vibrate(pattern) { if (navigator.vibrate) navigator.vibrate(pattern); }, triggerFlash(type) { const cls = type === 'success' ? 'flash-success' : 'flash-error'; document.body.classList.add(cls); setTimeout(() => document.body.classList.remove(cls), 500); }, triggerShake() { const wrapper = document.getElementById('game-wrapper'); wrapper.classList.add('shake-effect'); setTimeout(() => wrapper.classList.remove('shake-effect'), 500); }, save() { const data = { players: this.players, currentIdx: this.currentIdx, rotation: this.rotation, count: this.count }; localStorage.setItem('ibiuna_guardiao_save', JSON.stringify(data)); }, loadProgress() { const data = JSON.parse(localStorage.getItem('ibiuna_guardiao_save')); this.players = data.players; this.currentIdx = data.currentIdx; this.rotation = data.rotation; this.count = data.count; document.getElementById('recovery-screen').classList.add('hidden'); this.buildWheel(); this.updateScoreboard(); document.getElementById('wheel').style.transform = `rotate(${this.rotation}deg)`; document.getElementById('roulette-screen').classList.remove('hidden'); }, clearSave() { localStorage.removeItem('ibiuna_guardiao_save'); location.reload(); }, showNameInputs() { this.count = parseInt(document.getElementById('player-count').value); const container = document.getElementById('name-fields'); container.innerHTML = `

Nomes dos Heróis

`; for(let i=1; i<=this.count; i++) { container.innerHTML += ``; } document.getElementById('setup-screen').classList.add('hidden'); document.getElementById('names-screen').classList.remove('hidden'); }, startExpedition() { const inputs = document.querySelectorAll('.p-name'); inputs.forEach((input, i) => { this.players.push({ name: input.value.trim() || `Herói ${i+1}`, score: 0 }); }); this.buildWheel(); this.updateScoreboard(); this.save(); document.getElementById('names-screen').classList.add('hidden'); document.getElementById('roulette-screen').classList.remove('hidden'); }, buildWheel() { const wheel = document.getElementById('wheel'); let grad = "conic-gradient(", step = 360/this.count; const colors = ['#2d5a27','#4caf50','#fbc02d','#795548','#ff7043','#26a69a']; for(let i=0; i `
${p.name}
⭐${p.score.toFixed(1)}
`).join(''); }, spin() { const btn = document.getElementById('spin-btn'); btn.disabled = true; this.rotation += Math.floor(Math.random() * 360) + 1800; document.getElementById('wheel').style.transform = `rotate(${this.rotation}deg)`; setTimeout(() => { this.vibrate(50); let actualDeg = this.rotation % 360; let winIdx = Math.floor(((360 - (actualDeg % 360)) % 360) / (360/this.count)); this.currentPlayerIdx = winIdx; this.openQuiz(); btn.disabled = false; }, 4100); }, openQuiz() { this.hintUsed = false; document.getElementById('roulette-screen').classList.add('hidden'); document.getElementById('quiz-screen').classList.remove('hidden'); document.getElementById('feedback-panel').classList.add('hidden'); document.getElementById('hint-area').classList.add('hidden'); document.getElementById('hint-btn').classList.remove('hidden'); const q = quizData[this.currentIdx % quizData.length]; document.getElementById('current-player-display').innerText = "Vez de: " + this.players[this.currentPlayerIdx].name; document.getElementById('q-text').innerText = q.q; document.getElementById('hint-text').innerText = q.dica; const optsDiv = document.getElementById('options'); optsDiv.innerHTML = ''; q.opt.forEach((text, index) => { const b = document.createElement('button'); b.className = 'option-btn'; b.innerText = text; b.onclick = () => this.checkAnswer(index, q.c, q.e, b); optsDiv.appendChild(b); }); this.startTimer(); }, startTimer() { this.timeLeft = 90; const bar = document.getElementById('timer-bar'); clearInterval(this.timerInterval); this.timerInterval = setInterval(() => { this.timeLeft--; document.getElementById('timer-text').innerText = `0${Math.floor(this.timeLeft/60)}:${(this.timeLeft%60).toString().padStart(2,'0')}`; let percent = (this.timeLeft/90)*100; bar.style.width = percent + "%"; if(this.timeLeft <= 0) this.timeOut(); }, 1000); }, checkAnswer(idx, correct, explanation, btn) { clearInterval(this.timerInterval); document.querySelectorAll('.option-btn').forEach(b => b.disabled = true); if(idx === correct) { this.vibrate(60); this.triggerFlash('success'); btn.classList.add('correct'); this.players[this.currentPlayerIdx].score += this.hintUsed ? 0.5 : 1.0; confetti({ particleCount: 40, spread: 60, origin: { y: 0.7 } }); } else { this.vibrate([150, 100, 150]); this.triggerFlash('error'); this.triggerShake(); btn.classList.add('wrong'); } document.getElementById('explanation').innerHTML = `A resposta certa era: ${quizData[this.currentIdx % quizData.length].opt[correct]}

${explanation}`; document.getElementById('feedback-panel').classList.remove('hidden'); document.getElementById('hint-btn').classList.add('hidden'); this.updateScoreboard(); this.save(); }, timeOut() { this.vibrate(500); this.triggerFlash('error'); this.triggerShake(); clearInterval(this.timerInterval); document.querySelectorAll('.option-btn').forEach(b => b.disabled = true); document.getElementById('explanation').innerHTML = "TEMPO ESGOTADO!
" + quizData[this.currentIdx % quizData.length].e; document.getElementById('feedback-panel').classList.remove('hidden'); }, useHint() { this.hintUsed = true; document.getElementById('hint-area').classList.remove('hidden'); document.getElementById('hint-btn').classList.add('hidden'); }, backToWheel() { this.currentIdx++; if(this.currentIdx < 60) { document.getElementById('quiz-screen').classList.add('hidden'); document.getElementById('roulette-screen').classList.remove('hidden'); this.save(); } else { this.showPodium(); } }, showPodium() { localStorage.removeItem('ibiuna_guardiao_save'); document.getElementById('quiz-screen').classList.add('hidden'); document.getElementById('result-screen').classList.remove('hidden'); // Reprodução do áudio final const audio = document.getElementById('applause-sound'); if(audio) audio.play().catch(() => {}); const end = Date.now() + 6000; (function frame() { confetti({ particleCount: 3, angle: 60, spread: 55, origin: { x: 0, y: 0.6 } }); confetti({ particleCount: 3, angle: 120, spread: 55, origin: { x: 1, y: 0.6 } }); if (Date.now() < end) requestAnimationFrame(frame); }()); const sorted = [...this.players].sort((a,b) => b.score - a.score); const podiumColors = ['#ffd700', '#c0c0c0', '#cd7f32']; document.getElementById('podium-ui').innerHTML = sorted.slice(0,3).map((p,i) => `
${i+1}º
${p.name}
`).join(''); document.getElementById('final-list').innerHTML = sorted.map((p,i) => `
${i+1}º ${p.name} ${p.score.toFixed(1)}
`).join(''); } }; window.onload = () => game.init(); </script>

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions