diff --git a/app.py b/app.py index 7fc3ba0..7e23934 100644 --- a/app.py +++ b/app.py @@ -196,8 +196,13 @@ def quiz(playlist_id): # Wähle das passende Template if buzzer_mode == '1' and local_multiplayer == '1': template_name = "quiz_buzzer_multiplayer.html" - # Lade Spieler-Scores - player_scores = session.get(f'player_scores_{playlist_id}', [0, 0, 0, 0]) + # Initialisiere Spieler-Scores basierend auf gespeicherter Team-Anzahl + # Default: 6 Teams (Maximum), Frontend lädt nur die konfigurierten + player_scores = session.get(f'player_scores_{playlist_id}', [0, 0, 0, 0, 0, 0]) + # Stelle sicher, dass wir immer 6 Scores haben + while len(player_scores) < 6: + player_scores.append(0) + session[f'player_scores_{playlist_id}'] = player_scores elif buzzer_mode == '1': template_name = "quiz_buzzer.html" player_scores = None @@ -241,6 +246,17 @@ def playerselect(playlist_id): return render_template('playerselect.html', playlist_id=playlist_id, game_mode=game_mode, buzzer=buzzer, translations=get_translations(), user=user) +@app.route('/team_setup/') +def team_setup(playlist_id): + """Configure team names and count for multiplayer buzzer mode.""" + game_mode = request.args.get('mode', 'title') + user = session.get('user') + return render_template('team_setup.html', + playlist_id=playlist_id, + game_mode=game_mode, + translations=get_translations(), + user=user) + @app.route('/buzzer_settings/') def buzzer_settings(playlist_id): """Configure buzzer mode settings before starting.""" diff --git a/templates/playerselect.html b/templates/playerselect.html index f3d87e8..acb5874 100644 --- a/templates/playerselect.html +++ b/templates/playerselect.html @@ -66,11 +66,10 @@
{{ translations['singleplayer_desc'] if translations['singleplayer_desc'] else 'Play alone and test your knowledge.' }}
-
+ - -
Spiele mit bis zu 4 Personen an einem Gerät.
+
Spiele mit 2-6 Teams an einem Gerät.
{% else %}
diff --git a/templates/quiz_buzzer_multiplayer.html b/templates/quiz_buzzer_multiplayer.html index c66615d..de2648a 100644 --- a/templates/quiz_buzzer_multiplayer.html +++ b/templates/quiz_buzzer_multiplayer.html @@ -244,13 +244,16 @@ let gameStarted = false; let currentBuzzer = null; - // Spieler-Daten - let players = [ - { id: 1, name: 'Spieler 1', score: {{ player_scores[0] if player_scores else 0 }} }, - { id: 2, name: 'Spieler 2', score: {{ player_scores[1] if player_scores else 0 }} }, - { id: 3, name: 'Spieler 3', score: {{ player_scores[2] if player_scores else 0 }} }, - { id: 4, name: 'Spieler 4', score: {{ player_scores[3] if player_scores else 0 }} } - ]; + // Lade Team-Daten aus localStorage + let teamCount = parseInt(localStorage.getItem('team_count')) || 4; + let players = []; + + for (let i = 1; i <= teamCount; i++) { + const teamName = localStorage.getItem(`team_${i}_name`) || `Team ${i}`; + const scoreIndex = i - 1; + const score = {{ player_scores|tojson }}[scoreIndex] || 0; + players.push({ id: i, name: teamName, score: score }); + } window.onSpotifyWebPlaybackSDKReady = () => { const token = '{{ access_token }}'; @@ -321,10 +324,10 @@ .then(() => { console.log('Play command sent'); document.getElementById('startButton').style.display = 'none'; - // Aktiviere Buzzer - for (let i = 1; i <= 4; i++) { - document.getElementById(`buzzer${i}`).classList.remove('disabled'); - } + // Aktiviere alle Buzzer + players.forEach(player => { + document.getElementById(`buzzer${player.id}`).classList.remove('disabled'); + }); }) .catch(error => console.error('Error starting playback:', error)); } @@ -390,9 +393,9 @@ document.getElementById('currentPlayer').textContent = `${players[playerId - 1].name} hat gebuzzert!`; // Deaktiviere alle Buzzer - for (let i = 1; i <= 4; i++) { - document.getElementById(`buzzer${i}`).classList.add('disabled'); - } + players.forEach(player => { + document.getElementById(`buzzer${player.id}`).classList.add('disabled'); + }); document.getElementById('answerSection').classList.add('active'); window.earnedPoints = calculatePoints(elapsed); @@ -533,30 +536,54 @@ gracePeriod = parseInt(localStorage.getItem('buzzer_grace_period')) || 5; decayRate = parseInt(localStorage.getItem('buzzer_decay_rate')) || 50; document.getElementById('pointsDisplay').textContent = maxPoints + ' Punkte'; + + // Dynamisches Scoreboard erstellen + createScoreboard(); + // Dynamische Buzzer-Buttons erstellen + createBuzzerButtons(); }; + + function createScoreboard() { + const scoreboard = document.getElementById('scoreboard'); + scoreboard.innerHTML = ''; + + players.forEach(player => { + const card = document.createElement('div'); + card.className = 'player-card'; + card.id = `player${player.id}`; + card.innerHTML = ` +
${player.name}
+
${player.score}
+ `; + scoreboard.appendChild(card); + }); + } + + function createBuzzerButtons() { + const grid = document.getElementById('buzzerGrid'); + grid.innerHTML = ` + + `; + + players.forEach(player => { + const button = document.createElement('button'); + button.className = 'player-buzzer disabled'; + button.id = `buzzer${player.id}`; + button.onclick = () => buzz(player.id); + button.innerHTML = `🔴
${player.name}`; + grid.appendChild(button); + }); + }
-
-
-
Spieler 1
-
0
-
-
-
Spieler 2
-
0
-
-
-
Spieler 3
-
0
-
-
-
Spieler 4
-
0
-
+
+
@@ -570,22 +597,8 @@
Drücke START um zu beginnen
-
- - - - - +
+
diff --git a/templates/team_setup.html b/templates/team_setup.html new file mode 100644 index 0000000..add114f --- /dev/null +++ b/templates/team_setup.html @@ -0,0 +1,227 @@ + + + + {{ translations['quiz_title'] }} – Team Setup + + + + +
+

👥 Team Setup

+ +
+
Anzahl der Teams
+
4
+ +
+ +
+
+
+ + +
+ +