diff --git a/templates/playerselect.html b/templates/playerselect.html index de0c88a..e4c492c 100644 --- a/templates/playerselect.html +++ b/templates/playerselect.html @@ -65,8 +65,12 @@
{{ translations['singleplayer_desc'] if translations['singleplayer_desc'] else 'Play alone and test your knowledge.' }}
- -
Coming soon!
+
+ + + +
Spiele mit bis zu 4 Personen an einem Gerät.
+
Coming soon!
diff --git a/templates/quiz.html b/templates/quiz.html index 2459b1e..b97cc1c 100644 --- a/templates/quiz.html +++ b/templates/quiz.html @@ -322,6 +322,7 @@ window.onload = function() { label.style.display = ''; } document.getElementById('startPosition').value = getOption('startPosition', 'start'); + updateMultiplayerUI(); }; function onPlayDurationChange() { @@ -358,6 +359,74 @@ function replayDuration() { }, playDuration * 1000); } } + +function updateMultiplayerUI() { + const names = JSON.parse(localStorage.getItem('quizify_multiplayer_names') || "[]"); + const scores = JSON.parse(localStorage.getItem('quizify_multiplayer_scores') || "[]"); + const current = parseInt(localStorage.getItem('quizify_multiplayer_current') || "0"); + if(names.length > 1) { + document.getElementById('multiplayerBar').style.display = ''; + let html = ''; + names.forEach((n,i) => { + html += `${n}: ${scores[i]}`; + }); + html += `
Am Zug: ${names[current]}`; + document.getElementById('multiplayerPlayers').innerHTML = html; + document.getElementById('answerInput').placeholder = "Antwort für " + names[current]; + } +} + +// Multiplayer: Nach jeder Antwort Punkte & Spieler wechseln +const origCheckAnswer = checkAnswer; +checkAnswer = function() { + const names = JSON.parse(localStorage.getItem('quizify_multiplayer_names') || "[]"); + const scores = JSON.parse(localStorage.getItem('quizify_multiplayer_scores') || "[]"); + const current = parseInt(localStorage.getItem('quizify_multiplayer_current') || "0"); + const guess = document.getElementById('answerInput').value; + if (!guess) return; + + fetch('/check_answer', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + guess: guess, + correct_answer: correctAnswer, + game_mode: currentGameMode, + playlist_id: "{{ playlist_id }}" + }) + }) + .then(response => response.json()) + .then(data => { + const resultContainer = document.getElementById('resultContainer'); + resultContainer.style.display = 'block'; + if (data.correct) { + resultContainer.className = 'result-container correct'; + resultContainer.innerHTML = `

${i18n.correct}

`; + scores[current] = (scores[current] || 0) + 1; + localStorage.setItem('quizify_multiplayer_scores', JSON.stringify(scores)); + } else { + resultContainer.className = 'result-container incorrect'; + resultContainer.innerHTML = `

${i18n.wrong}

+

${i18n.right_answer} ${data.correct_answer}

`; + } + // Song-Infos ergänzen (wie gehabt) + // ... + // Nächster Spieler + let next = (current + 1) % names.length; + localStorage.setItem('quizify_multiplayer_current', next); + updateMultiplayerUI(); + document.getElementById('nextQuestionBtn').style.display = 'inline-block'; + }) + .catch(error => { + console.error('Error checking answer:', error); + }); +} + +// Beim Laden Multiplayer-UI anzeigen, falls aktiv +window.onload = function() { + // ...dein bisheriger onload code... + updateMultiplayerUI(); +} @@ -429,6 +498,43 @@ function replayDuration() {

{{ translations['tip_year'] }}

{% endif %}
+ + {% if request.args.get('local_multiplayer') %} +
+
+

Lokaler Multiplayer

+

Gib bis zu 4 Spielernamen ein:

+
+
+
+
+
+ +
+
+
+ +{% endif %}