From 081abe54c5172a19082d4425ba9e619550aa3fd2 Mon Sep 17 00:00:00 2001 From: Simon Date: Sat, 15 Nov 2025 01:30:21 +0100 Subject: [PATCH] modified: app.py new file: templates/buzzer_settings.html modified: templates/playerselect.html modified: templates/quiz_buzzer.html new file: templates/quiz_buzzer_multiplayer.html --- app.py | 44 +- templates/buzzer_settings.html | 223 +++++++++ templates/playerselect.html | 4 +- templates/quiz_buzzer.html | 12 +- templates/quiz_buzzer_multiplayer.html | 617 +++++++++++++++++++++++++ 5 files changed, 891 insertions(+), 9 deletions(-) create mode 100644 templates/buzzer_settings.html create mode 100644 templates/quiz_buzzer_multiplayer.html diff --git a/app.py b/app.py index 1c46385..971f31a 100644 --- a/app.py +++ b/app.py @@ -194,12 +194,19 @@ def quiz(playlist_id): all_tracks.append(track_info) # Wähle das passende Template - if buzzer_mode == '1': + 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]) + elif buzzer_mode == '1': template_name = "quiz_buzzer.html" + player_scores = None elif local_multiplayer == '1': template_name = "quiz_multiplayer.html" + player_scores = None else: template_name = "quiz.html" + player_scores = None return render_template( template_name, @@ -215,7 +222,8 @@ def quiz(playlist_id): translations=get_translations(), max_points=1000, grace_period=5, - decay_rate=50 + decay_rate=50, + player_scores=player_scores ) @app.route('/gamemodes/') @@ -228,9 +236,28 @@ def gamemodes(playlist_id): def playerselect(playlist_id): """Choose singleplayer or local multiplayer before starting the quiz.""" game_mode = request.args.get('mode', 'artist') + buzzer = request.args.get('buzzer', '0') user = session.get('user') + + # Wenn Buzzer-Modus, redirect zu Einstellungen + if buzzer == '1': + return redirect(url_for('buzzer_settings', playlist_id=playlist_id, mode=game_mode)) + return render_template('playerselect.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.""" + game_mode = request.args.get('mode', 'title') + local_multiplayer = request.args.get('local_multiplayer', '0') + user = session.get('user') + return render_template('buzzer_settings.html', + playlist_id=playlist_id, + game_mode=game_mode, + local_multiplayer=local_multiplayer == '1', + translations=get_translations(), + user=user) + @app.route("/search_track", methods=["POST"]) def search_track(): data = request.json @@ -324,6 +351,7 @@ def check_answer_buzzer(): playlist_id = data.get('playlist_id') earned_points = data.get('earned_points', 0) all_tracks = data.get('all_tracks', []) + player_id = data.get('player_id') # Für Multiplayer # Originalwert für Vergleich speichern original_guess = guess @@ -340,8 +368,16 @@ def check_answer_buzzer(): # Score erhöhen mit Buzzer-Punkten, wenn richtig if is_correct and playlist_id: - key = f'score_{playlist_id}' - session[key] = session.get(key, 0) + earned_points + if player_id: + # Multiplayer: Update Spieler-Score + key = f'player_scores_{playlist_id}' + player_scores = session.get(key, [0, 0, 0, 0]) + player_scores[player_id - 1] += earned_points + session[key] = player_scores + else: + # Singleplayer: Update Gesamt-Score + key = f'score_{playlist_id}' + session[key] = session.get(key, 0) + earned_points # Bei falscher Antwort: Finde das eingegebene Lied in all_tracks guessed_track = None diff --git a/templates/buzzer_settings.html b/templates/buzzer_settings.html new file mode 100644 index 0000000..16bd65f --- /dev/null +++ b/templates/buzzer_settings.html @@ -0,0 +1,223 @@ + + + + {{ translations['quiz_title'] }} – Buzzer Einstellungen + + + + +
+

⚙️ Buzzer Einstellungen

+ +
+ +
Die maximalen Punkte, die man innerhalb der Schonzeit erreichen kann.
+ +
+ +
+ +
Zeit in Sekunden, in der keine Punkte abgezogen werden.
+ +
+ +
+ +
Punkte, die pro Sekunde nach der Schonzeit verloren gehen.
+ +
+ +
+
📊 Beispiel: Punkte nach Zeit
+
+ Nach 10 Sekunden: + 750 +
+
+ Nach 20 Sekunden: + 250 +
+
+ Nach 30 Sekunden: + 0 +
+
+ + +
+ + diff --git a/templates/playerselect.html b/templates/playerselect.html index b73050e..1e22ce6 100644 --- a/templates/playerselect.html +++ b/templates/playerselect.html @@ -60,7 +60,7 @@

{{ translations['quiz_title'] }} – Player Selection

-
+ {% if request.args.get('buzzer') == '1' %} @@ -68,7 +68,7 @@
{{ translations['singleplayer_desc'] if translations['singleplayer_desc'] else 'Play alone and test your knowledge.' }}
-
+ {% if request.args.get('buzzer') == '1' %} diff --git a/templates/quiz_buzzer.html b/templates/quiz_buzzer.html index b27927f..018bbf1 100644 --- a/templates/quiz_buzzer.html +++ b/templates/quiz_buzzer.html @@ -216,9 +216,9 @@ let buzzTimer = null; let startTime = null; let buzzTime = null; - let maxPoints = {{ max_points | default(1000) }}; - let gracePeriod = {{ grace_period | default(5) }}; // Sekunden - let decayRate = {{ decay_rate | default(50) }}; // Punkte pro Sekunde nach Grace Period + let maxPoints = parseInt(localStorage.getItem('buzzer_max_points')) || {{ max_points | default(1000) }}; + let gracePeriod = parseInt(localStorage.getItem('buzzer_grace_period')) || {{ grace_period | default(5) }}; // Sekunden + let decayRate = parseInt(localStorage.getItem('buzzer_decay_rate')) || {{ decay_rate | default(50) }}; // Punkte pro Sekunde nach Grace Period let hasBuzzed = false; let gameStarted = false; @@ -503,6 +503,12 @@ window.onload = function() { document.getElementById('startPosition').value = getOption('startPosition', 'start'); + + // Lade Einstellungen und zeige initial an + maxPoints = parseInt(localStorage.getItem('buzzer_max_points')) || 1000; + gracePeriod = parseInt(localStorage.getItem('buzzer_grace_period')) || 5; + decayRate = parseInt(localStorage.getItem('buzzer_decay_rate')) || 50; + document.getElementById('pointsDisplay').textContent = maxPoints + ' Punkte'; }; diff --git a/templates/quiz_buzzer_multiplayer.html b/templates/quiz_buzzer_multiplayer.html new file mode 100644 index 0000000..c66615d --- /dev/null +++ b/templates/quiz_buzzer_multiplayer.html @@ -0,0 +1,617 @@ + + + + {{ translations['quiz_title'] }} – Buzzer Multiplayer + + + + + + +
+ +
+
+
Spieler 1
+
0
+
+
+
Spieler 2
+
0
+
+
+
Spieler 3
+
0
+
+
+
Spieler 4
+
0
+
+
+ + + +

{{ translations['question_title'] }}

+ + +
0.00s
+
1000 Punkte
+ +
Drücke START um zu beginnen
+ + +
+ + + + + +
+ + +
+

{{ translations['enter_answer'] if translations.get('enter_answer') else 'Enter your answer' }}:

+ + + +
+
+ + +
+ + +
+ + + +
+ + + +
+ +