{"id":49469,"date":"2025-08-18T09:37:39","date_gmt":"2025-08-18T09:37:39","guid":{"rendered":"https:\/\/skdojo.com\/?p=49469"},"modified":"2025-08-18T09:38:10","modified_gmt":"2025-08-18T09:38:10","slug":"prueba-escribir-katakana","status":"publish","type":"post","link":"https:\/\/skdojo.com\/es\/prueba-escribir-katakana\/","title":{"rendered":"Prueba de Velocidad de Escritura del Katakana"},"content":{"rendered":"\n<p class=\"translation-block\">Se voc\u00ea est\u00e1 aprendendo japon\u00eas, o&nbsp;<strong>Katakana Challenge<\/strong>&nbsp;\u00e9 a forma perfeita de treinar sua mem\u00f3ria e velocidade. O objetivo \u00e9 simples:&nbsp;digitar todos os 46 caracteres b\u00e1sicos do katakana, na ordem da tabela tradicional, antes que o tempo acabe.<\/p>\n\n\n\n<p class=\"translation-block\">Esse jogo une aprendizado e divers\u00e3o. Ao mesmo tempo em que testa sua rapidez no teclado, ele ajuda a refor\u00e7ar a sequ\u00eancia correta dos katakana, algo essencial para qualquer estudante da l\u00edngua japonesa.<\/p>\n\n\n\n<div class=\"quiz-container\">\n    <p class=\"translation-block\">Digite todos os <strong>katakana<\/strong> na ordem correta da tabela oficial!<\/p>\n\n    <select id=\"difficulty-select\">\n        <option value=\"normal\" data-time=\"30\" selected>Normal (30s)<\/option>\n        <option value=\"facil\" data-time=\"45\">F\u00e1cil (45s)<\/option>\n\u3000\u3000\u3000\u3000\u3000<option value=\"facil\" data-time=\"60\">Novato (60s)<\/option>\n        <option value=\"dificil\" data-time=\"20\">Dif\u00edcil (20s)<\/option>\n\u3000\u3000\u3000\u3000\u3000<option value=\"dificil\" data-time=\"15\">Extreme (15s)<\/option>\n        <option value=\"dificil\" data-time=\"10\">Imposs\u00edvel (10s)<\/option>\n    <\/select>\n\n    <div id=\"timer\">00:30<\/div>\n\n    <div id=\"input-area\">\n        <input type=\"text\" id=\"guess-input\" placeholder=\"Digite o pr\u00f3ximo katakana...\" autofocus maxlength=\"1\">\n        <button id=\"guess-button\">Enviar<\/button>\n        <button id=\"reset-button\">Resetar<\/button>\n    <\/div>\n\n    <div id=\"message\"><\/div>\n\n    <div id=\"results-container\"><\/div>\n<\/div>\n\n<script>\ndocument.addEventListener('DOMContentLoaded', () => {\n    const guessInput       = document.getElementById('guess-input');\n    const guessButton      = document.getElementById('guess-button');\n    const resetButton      = document.getElementById('reset-button');\n    const resultsContainer = document.getElementById('results-container');\n    const timerDisplay     = document.getElementById('timer');\n    const messageDisplay   = document.getElementById('message');\n    const diffSelect       = document.getElementById('difficulty-select');\n\n    \/\/ Hiragana organizado por gyo\n    const hiraganaTable = [\n{ gyo: \"\u30a2\u884c (A-gyo)\", chars: [\"\u30a2\",\"\u30a4\",\"\u30a6\",\"\u30a8\",\"\u30aa\"] },\n{ gyo: \"\u30ab\u884c (Ka-gyo)\", chars: [\"\u30ab\",\"\u30ad\",\"\u30af\",\"\u30b1\",\"\u30b3\"] },\n{ gyo: \"\u30b5\u884c (Sa-gyo)\", chars: [\"\u30b5\",\"\u30b7\",\"\u30b9\",\"\u30bb\",\"\u30bd\"] },\n{ gyo: \"\u30bf\u884c (Ta-gyo)\", chars: [\"\u30bf\",\"\u30c1\",\"\u30c4\",\"\u30c6\",\"\u30c8\"] },\n{ gyo: \"\u30ca\u884c (Na-gyo)\", chars: [\"\u30ca\",\"\u30cb\",\"\u30cc\",\"\u30cd\",\"\u30ce\"] },\n{ gyo: \"\u30cf\u884c (Ha-gyo)\", chars: [\"\u30cf\",\"\u30d2\",\"\u30d5\",\"\u30d8\",\"\u30db\"] },\n{ gyo: \"\u30de\u884c (Ma-gyo)\", chars: [\"\u30de\",\"\u30df\",\"\u30e0\",\"\u30e1\",\"\u30e2\"] },\n{ gyo: \"\u30e4\u884c (Ya-gyo)\", chars: [\"\u30e4\",\"\u30e6\",\"\u30e8\"] },\n{ gyo: \"\u30e9\u884c (Ra-gyo)\", chars: [\"\u30e9\",\"\u30ea\",\"\u30eb\",\"\u30ec\",\"\u30ed\"] },\n{ gyo: \"\u30ef\u884c (Wa-gyo)\", chars: [\"\u30ef\",\"\u30f2\"] },\n{ gyo: \"\u30f3 (N)\", chars: [\"\u30f3\"] }\n    ];\n\n    \/\/ Flatten para ordem total\n    const allChars = hiraganaTable.map(g=>g.chars).flat();\n\n    let currentIndex, timeLeft, timer, started;\n\n    \/\/ ------- Fun\u00e7\u00f5es principais -------\n    function updateTimerText(sec) {\n        const m=Math.floor(sec\/60), s=sec%60;\n        timerDisplay.textContent = `${String(m).padStart(2,'0')}:${String(s).padStart(2,'0')}`;\n        timerDisplay.style.color = sec<=10 ? '#d9534f' : '#337ab7';\n    }\n\n    function tick() {\n        updateTimerText(timeLeft);\n        if (timeLeft <= 0) end(false);\n        else timeLeft--;\n    }\n\n    function start() {\n        if (started) return;\n        started = true;\n        timeLeft = parseInt(diffSelect.options[diffSelect.selectedIndex].dataset.time, 10) || 90;\n        diffSelect.disabled = true;\n        updateTimerText(timeLeft);\n        timer = setInterval(tick, 1000);\n        render();\n    }\n\n    function end(won) {\n        clearInterval(timer);\n        guessInput.disabled = true;\n        guessButton.disabled = true;\n        if (won) {\n            messageDisplay.textContent = \"\u304a\u3081\u3067\u3068\u3046\uff01Voc\u00ea completou a tabela de katakana!\";\n            messageDisplay.style.color = '#5cb85c';\n        } else {\n            messageDisplay.textContent = `Tempo esgotado! Voc\u00ea chegou at\u00e9: ${allChars[currentIndex-1] || 'nenhum'}.`;\n            messageDisplay.style.color = '#d9534f';\n        }\n    }\n\n    function render() {\n        resultsContainer.innerHTML = '';\n        hiraganaTable.forEach(row => {\n            const gyoDiv = document.createElement('div');\n            gyoDiv.className = 'gyo-block';\n            const title = document.createElement('div');\n            title.className = 'gyo-title';\n            title.textContent = row.gyo;\n            gyoDiv.appendChild(title);\n\n            row.chars.forEach(ch => {\n                const div = document.createElement('div');\n                div.className = 'result-item';\n                const idx = allChars.indexOf(ch);\n                div.textContent = (idx < currentIndex) ? ch : '---';\n                if (idx < currentIndex) div.classList.add('correct');\n                gyoDiv.appendChild(div);\n            });\n\n            resultsContainer.appendChild(gyoDiv);\n        });\n    }\n\n    function handleEnter() {\n        start();\n        const guess = guessInput.value.trim();\n        guessInput.value = '';\n        if (!guess) return;\n\n        if (guess === allChars[currentIndex]) {\n            currentIndex++;\n            render();\n            if (currentIndex === allChars.length) {\n                end(true);\n            }\n        } else {\n            messageDisplay.textContent = `Errado! O pr\u00f3ximo \u00e9: ${allChars[currentIndex]}`;\n            messageDisplay.style.color = '#d9534f';\n        }\n    }\n\n    \/\/ ------- Reset do jogo -------\n    function resetGame() {\n        clearInterval(timer);\n        currentIndex = 0;\n        started = false;\n        guessInput.disabled = false;\n        guessButton.disabled = false;\n        diffSelect.disabled = false;\n        messageDisplay.textContent = '';\n        timeLeft = parseInt(diffSelect.options[diffSelect.selectedIndex].dataset.time, 10) || 90;\n        updateTimerText(timeLeft);\n        render();\n        guessInput.value = '';\n        guessInput.focus();\n    }\n\n    \/\/ ------- Eventos -------\n    guessInput.addEventListener('keydown', (e) => { if (e.key==='Enter') handleEnter(); });\n    guessButton.addEventListener('click', handleEnter);\n    resetButton.addEventListener('click', resetGame);\n\n    \/\/ ------- Inicializa\u00e7\u00e3o -------\n    resetGame();\n});\n<\/script>\n\n<style>\n.result-item {\n    display: inline-block;\n    width: 28px;\n    height: 28px;\n    text-align: center;\n    margin: 2px;\n    padding: 4px;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n}\n.correct {\n    background: #5cb85c;\n    color: white;\n    font-weight: bold;\n}\n.gyo-block {\n    margin-bottom: 10px;\n}\n.gyo-title {\n    font-weight: bold;\n    margin-bottom: 4px;\n}\n#reset-button {\n    margin-left: 8px;\n    background: #f0ad4e;\n    border: none;\n    padding: 5px 10px;\n    border-radius: 4px;\n    cursor: pointer;\n}\n#reset-button:hover {\n    background: #ec971f;\n    color: white;\n}\n<\/style>\n\n\n\n<h2 class=\"wp-block-heading\">Por que jogar?<\/h2>\n\n\n\n<ul class=\"wp-block-list translation-block\">\n<li><strong>Memoriza\u00e7\u00e3o ativa<\/strong>&nbsp;\u2013 Treine a ordem dos katakana de forma pr\u00e1tica.<\/li>\n\n\n\n<li><strong>Reflexo e velocidade<\/strong>&nbsp;\u2013 Teste sua rapidez mental e digita\u00e7\u00e3o.<\/li>\n\n\n\n<li><strong>Estudo divertido<\/strong>&nbsp;\u2013 Torne o aprendizado da l\u00edngua japonesa mais leve e interativo.<\/li>\n\n\n\n<li><strong>Competi\u00e7\u00e3o saud\u00e1vel<\/strong>&nbsp;\u2013 Compare seu tempo com amigos ou desafie-se em dificuldades maiores.<\/li>\n<\/ul>\n\n\n\n<p class=\"translation-block\">Antes de come\u00e7ar, revise a&nbsp;<strong>tabela completa de katakana<\/strong>. Assim voc\u00ea refor\u00e7a a sequ\u00eancia e aumenta suas chances de completar o desafio.<\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":49451,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-49469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-games","generate-columns","tablet-grid-50","mobile-grid-100","grid-parent","grid-25","no-featured-image-padding"],"_links":{"self":[{"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/posts\/49469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/comments?post=49469"}],"version-history":[{"count":3,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/posts\/49469\/revisions"}],"predecessor-version":[{"id":49473,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/posts\/49469\/revisions\/49473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/media\/49451"}],"wp:attachment":[{"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/media?parent=49469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/categories?post=49469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/skdojo.com\/es\/wp-json\/wp\/v2\/tags?post=49469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}