modified: templates/quiz_buzzer_multiplayer.html

This commit is contained in:
2025-11-15 18:22:41 +01:00
parent c488e5c4bc
commit f6d080a940

View File

@@ -97,26 +97,30 @@
color: #f44336; color: #f44336;
} }
.buzzer-grid { .buzzer-grid {
display: grid; display: flex;
grid-template-columns: repeat(2, 1fr); justify-content: center;
gap: 20px; gap: 20px;
margin: 30px 0; margin: 20px 0;
flex-wrap: wrap;
} }
.player-buzzer { .player-buzzer {
height: 150px; width: 180px;
border-radius: 20px; height: 180px;
background: linear-gradient(135deg, #f44336 0%, #d32f2f 100%); font-size: 1.4em;
border: 5px solid rgba(244, 67, 54, 0.3);
font-size: 1.5em;
font-weight: bold; font-weight: bold;
text-transform: uppercase;
letter-spacing: 2px;
background: linear-gradient(135deg, #f44336 0%, #d32f2f 100%);
color: white; color: white;
border: 3px solid rgba(244, 67, 54, 0.5);
border-radius: 50%;
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.3s ease;
box-shadow: 0 10px 40px rgba(244, 67, 54, 0.5); box-shadow: 0 10px 40px rgba(244, 67, 54, 0.5);
display: flex; display: flex;
flex-direction: column;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
text-align: center;
} }
.player-buzzer:hover:not(.disabled) { .player-buzzer:hover:not(.disabled) {
transform: scale(1.05); transform: scale(1.05);
@@ -132,7 +136,8 @@
opacity: 0.5; opacity: 0.5;
} }
.player-buzzer.start { .player-buzzer.start {
grid-column: 1 / -1; width: 200px;
height: 200px;
background: linear-gradient(135deg, #1DB954 0%, #1ed760 100%); background: linear-gradient(135deg, #1DB954 0%, #1ed760 100%);
border-color: rgba(29, 185, 84, 0.3); border-color: rgba(29, 185, 84, 0.3);
box-shadow: 0 10px 40px rgba(29, 185, 84, 0.5); box-shadow: 0 10px 40px rgba(29, 185, 84, 0.5);
@@ -312,16 +317,20 @@
// Update Spieler-Namen und verstecke inaktive Spieler // Update Spieler-Namen und verstecke inaktive Spieler
for (let i = 1; i <= 4; i++) { for (let i = 1; i <= 4; i++) {
const card = document.getElementById(`player${i}`); const card = document.getElementById(`player${i}`);
const buzzer = document.getElementById(`buzzer${i}`); const selectBtn = document.getElementById(`selectPlayer${i}`);
if (i <= teamCount) { if (i <= teamCount) {
card.querySelector('.player-name').textContent = players[i - 1].name; card.querySelector('.player-name').textContent = players[i - 1].name;
card.style.display = 'block'; card.style.display = 'block';
buzzer.style.display = 'flex'; if (selectBtn) {
buzzer.innerHTML = `🔴<br>${players[i - 1].name}`; selectBtn.textContent = players[i - 1].name;
selectBtn.style.display = 'block';
}
} else { } else {
card.style.display = 'none'; card.style.display = 'none';
buzzer.style.display = 'none'; if (selectBtn) {
selectBtn.style.display = 'none';
}
} }
} }
} }
@@ -412,8 +421,16 @@
buzzTime = Date.now(); buzzTime = Date.now();
const elapsed = (buzzTime - startTime) / 1000; const elapsed = (buzzTime - startTime) / 1000;
// Stoppe Timer-Updates
cancelAnimationFrame(buzzTimer); cancelAnimationFrame(buzzTimer);
// Friere Timer-Anzeige ein
const timerDisplay = document.getElementById('buzzerTimer');
const pointsDisplay = document.getElementById('pointsDisplay');
timerDisplay.textContent = elapsed.toFixed(2) + 's';
const points = calculatePoints(elapsed);
pointsDisplay.textContent = points + ' Punkte';
if (window.spotifyPlayer) { if (window.spotifyPlayer) {
window.spotifyPlayer.pause(); window.spotifyPlayer.pause();
} }
@@ -421,7 +438,7 @@
// Zeige Spielerauswahl // Zeige Spielerauswahl
document.getElementById('playerSelection').style.display = 'block'; document.getElementById('playerSelection').style.display = 'block';
document.getElementById('currentPlayer').textContent = 'Wer hat gebuzzert?'; document.getElementById('currentPlayer').textContent = 'Wer hat gebuzzert?';
pendingPoints = calculatePoints(elapsed); pendingPoints = points;
} }
function selectPlayer(playerId) { function selectPlayer(playerId) {
@@ -601,7 +618,8 @@
window.spotifyPlayer.resume(); window.spotifyPlayer.resume();
} }
// Timer weiterlaufen lassen // Timer weiterlaufen lassen (von der aktuellen Zeit)
// Keine Anpassung der startTime nötig, da die Zeit einfach weiterläuft
buzzTimer = requestAnimationFrame(updateTimer); buzzTimer = requestAnimationFrame(updateTimer);
} }
@@ -682,24 +700,16 @@
<div id="playerSelection" style="display:none; text-align:center; margin:30px 0;"> <div id="playerSelection" style="display:none; text-align:center; margin:30px 0;">
<h3 style="margin-bottom:20px; color:#1DB954;">Wer hat gebuzzert?</h3> <h3 style="margin-bottom:20px; color:#1DB954;">Wer hat gebuzzert?</h3>
<div class="buzzer-grid"> <div class="buzzer-grid">
<button class="player-buzzer" id="selectPlayer1" onclick="selectPlayer(1)"> <button class="player-buzzer" id="selectPlayer1" onclick="selectPlayer(1)">Spieler 1</button>
Spieler 1 <button class="player-buzzer" id="selectPlayer2" onclick="selectPlayer(2)">Spieler 2</button>
</button> <button class="player-buzzer" id="selectPlayer3" onclick="selectPlayer(3)">Spieler 3</button>
<button class="player-buzzer" id="selectPlayer2" onclick="selectPlayer(2)"> <button class="player-buzzer" id="selectPlayer4" onclick="selectPlayer(4)">Spieler 4</button>
Spieler 2
</button>
<button class="player-buzzer" id="selectPlayer3" onclick="selectPlayer(3)">
Spieler 3
</button>
<button class="player-buzzer" id="selectPlayer4" onclick="selectPlayer(4)">
Spieler 4
</button>
</div> </div>
</div> </div>
<!-- START Button --> <!-- START Button -->
<div style="text-align:center; margin:30px 0;"> <div style="text-align:center; margin:30px 0;">
<button class="player-buzzer start" id="startButton" onclick="startGame()" style="width:300px; height:200px; font-size:2em;"> <button class="player-buzzer start" id="startButton" onclick="startGame()">
▶️<br>START ▶️<br>START
</button> </button>
</div> </div>