No meu celular o jogo roda certinho, sem nenhum problema em jogar porém a única coisa que não esta funcionando é a voz do site, pede para autorizar mas quando eu autorizo não sai nada. Teria como resolver isso? Boa tarde
No meu celular o jogo roda certinho, sem nenhum problema em jogar porém a única coisa que não esta funcionando é a voz do site, pede para autorizar mas quando eu autorizo não sai nada. Teria como resolver isso? Boa tarde
Isso acontece porque alguns navegadores móveis (especialmente no Android) têm restrições na API de síntese de voz. Mas podemos tentar algumas soluções:
------- Possíveis soluções para a voz funcionar no celular 1-- Forçar o carregamento das vozes disponíveis No celular, às vezes a voz não é carregada corretamente. Podemos esperar até que as vozes estejam prontas:
function falar(texto) { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1;
// Garante que o navegador tenha carregado as vozes const vozes = speechSynthesis.getVoices(); if (vozes.length > 0) { fala.voice = vozes.find(voz => voz.lang === "pt-BR") || vozes[0]; }
speechSynthesis.speak(fala); }
// Aguarda a lista de vozes ser carregada speechSynthesis.onvoiceschanged = () => { console.log("Vozes carregadas:", speechSynthesis.getVoices()); }; 2 --- Adicionar um pequeno atraso antes de falar Em alguns celulares, a API precisa de um tempo para inicializar:
function falar(texto) { setTimeout(() => { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1; speechSynthesis.speak(fala); }, 500); // Pequeno atraso de 0.5s } 3️--- Garantir que o usuário interaja antes da voz ser ativada Alguns celulares bloqueiam a voz se não houver interação do usuário. O código abaixo pode ajudar:
document.body.addEventListener("click", () => { falar("Voz ativada! Agora o jogo falará as mensagens."); }, { once: true });
Isso fará o jogo falar algo assim que o usuário tocar na tela pela primeira vez.
Seque codigo para exemplo :
// Gera um número secreto inicial let numeroSecreto = Math.floor(Math.random() * 20) + 1;
// Contador de tentativas let tentativas = 0;
// Elementos da interface const nameInput = document.getElementById('name'); const guessInput = document.getElementById('guess'); const submitButton = document.getElementById('submit'); const messageDiv = document.getElementById('message');
// Armazena o último palpite para verificar a sequência let ultimoPalpite = null; let sequenciaAtiva = false;
// Foco no próximo campo ao pressionar Enter nameInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); guessInput.focus(); } });
guessInput.addEventListener('keydown', (event) => { if (event.key === 'Enter') { event.preventDefault(); submitButton.click(); } });
// Função para verificar sequência function verificarSequencia(numeroAtual) { if (numeroAtual < 1 || numeroAtual > 20) { sequenciaAtiva = false; return false; }
if (ultimoPalpite !== null && numeroAtual === ultimoPalpite + 1) { sequenciaAtiva = true; return true; } sequenciaAtiva = false; return false; }
// Função para falar as mensagens function falar(texto) { setTimeout(() => { const fala = new SpeechSynthesisUtterance(texto); fala.lang = "pt-BR"; fala.rate = 1; fala.pitch = 1;
const vozes = speechSynthesis.getVoices();
if (vozes.length > 0) {
fala.voice = vozes.find(voz => voz.lang === "pt-BR") || vozes[0];
}
speechSynthesis.speak(fala);
}, 500); // Pequeno atraso para evitar falhas no celular }
// Aguarda a lista de vozes ser carregada speechSynthesis.onvoiceschanged = () => { console.log("Vozes carregadas:", speechSynthesis.getVoices()); };
// Ativa a voz após um clique do usuário document.body.addEventListener("click", () => { falar("Voz ativada! Agora o jogo falará as mensagens."); }, { once: true });
// Evento de clique no botão submitButton.addEventListener('click', (event) => { event.preventDefault(); // Evita comportamento padrão em navegadores antigos
const nome = nameInput.value.trim(); const palpite = parseInt(guessInput.value, 10);
// Validação do nome e palpite if (!nome) { messageDiv.textContent = 'Por favor, digite seu nome.'; falar('Por favor, digite seu nome.'); return; } if (isNaN(palpite) || palpite < 1 || palpite > 20) { messageDiv.textContent = 'Por favor, insira um número válido (entre 1 e 20).'; falar('Por favor, insira um número válido entre 1 e 20.'); guessInput.value = ''; // Limpa o valor inválido return; }
// Verificar se é uma sequência if (verificarSequencia(palpite)) { messageDiv.textContent = 'Assim é fácil, melhor embaralhar!'; messageDiv.style.color = 'purple'; falar('Assim é fácil, melhor embaralhar!'); ultimoPalpite = palpite; return; }
// Incrementa o contador de tentativas tentativas++;
// Verificação do palpite
if (palpite === numeroSecreto) {
messageDiv.textContent = Parabéns, ${nome}! Você acertou o número secreto!
;
messageDiv.style.color = 'green';
falar(Parabéns, ${nome}! Você acertou o número secreto!
);
numeroSecreto = Math.floor(Math.random() * 20) + 1; // Troca o número secreto após o acerto
tentativas = 0; // Reinicia o contador de tentativas
ultimoPalpite = null; // Reinicia o controle de sequência
} else {
let mensagem = Huu, tente outra vez, ${nome}.
;
// Verifica se o palpite está próximo do número secreto
if (Math.abs(palpite - numeroSecreto) <= 2) {
mensagem += ' Está quase lá!';
messageDiv.style.color = 'orange';
} else {
messageDiv.style.color = 'red';
}
messageDiv.textContent = mensagem;
falar(mensagem);
ultimoPalpite = palpite; // Atualiza o último palpite
}
// Limpa o input do palpite guessInput.value = ''; });