let sessionId = null; let playerId = null; let isMyTurn = false; document.addEventListener('DOMContentLoaded', (event) => { const playButton = document.getElementById('playButton'); const submitWordButton = document.getElementById('submitWordButton'); const guessButton = document.getElementById('guessButton'); if (playButton) playButton.addEventListener('click', startGame); if (submitWordButton) submitWordButton.addEventListener('click', submitWord); if (guessButton) guessButton.addEventListener('click', makeGuess); }); function startGame() { fetch('/play', { method: 'POST' }) .then(response => response.json()) .then(data => { sessionId = data.session_id; playerId = data.player_id; document.getElementById('sessionId').textContent = sessionId; hideAllSections(); if (data.waiting) { showSection('waitingMessage'); checkGameStatus(); } else { showSection('wordInput'); } }); } function checkGameStatus() { fetch(`/check_status/${sessionId}`) .then(response => response.json()) .then(data => { if (data.players === 2) { hideAllSections(); showSection('gameStarting'); setTimeout(() => { hideAllSections(); showSection('wordInput'); }, 2000); } else { setTimeout(checkGameStatus, 2000); } }); } function submitWord() { const word = document.getElementById('wordInputField').value; if (word.length !== 7) { alert('Word must be 7 letters long'); return; } fetch('/submit_word', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ session_id: sessionId, player_id: playerId, word: word }), }) .then(response => response.json()) .then(data => { hideAllSections(); if (data.status === 'waiting_for_opponent') { showSection('waitingForWord'); setTimeout(checkWordSubmissionStatus, 2000); } else if (data.status === 'game_started') { startHangmanGame(); } }); } function checkWordSubmissionStatus() { fetch(`/game_state/${sessionId}`) .then(response => response.json()) .then(data => { if (Object.keys(data.words).length === 2) { startHangmanGame(); } else { setTimeout(checkWordSubmissionStatus, 2000); } }); } function startHangmanGame() { hideAllSections(); showSection('gameArea'); updateGameState(); } function makeGuess() { if (!isMyTurn) { alert("It's not your turn!"); return; } const guess = document.getElementById('guessInput').value; if (guess.length !== 1) { alert('Please enter a single letter'); return; } fetch('/guess', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ session_id: sessionId, player_id: playerId, guess: guess }), }) .then(response => response.json()) .then(data => { if (data.status === 'game_over') { alert(data.winner === playerId ? 'You win!' : 'You lose!'); hideAllSections(); showSection('initialScreen'); } updateGameState(); }); } function updateGameState() { fetch(`/game_state/${sessionId}`) .then(response => response.json()) .then(data => { document.getElementById('playerWord').textContent = data.words[playerId]; document.getElementById('opponentWord').textContent = data.words[data.players.find(p => p !== playerId)]; document.getElementById('guesses').textContent = 'Guessed letters: ' + data.guesses.join(', '); isMyTurn = data.current_player === playerId; document.getElementById('playerTurn').textContent = isMyTurn ? 'Your turn' : "Opponent's turn"; updateHangmanSVG(data.incorrect_guesses); }); setTimeout(updateGameState, 2000); // Poll every 2 seconds } function updateHangmanSVG(stage) { fetch(`/static/images/hangman-stage-${stage + 1}.svg`) .then(response => response.text()) .then(svgContent => { document.getElementById('hangmanSvg').innerHTML = svgContent; }); } function hideAllSections() { const sections = ['initialScreen', 'waitingMessage', 'gameStarting', 'wordInput', 'waitingForWord', 'gameArea']; sections.forEach(section => { document.getElementById(section).style.display = 'none'; }); } function showSection(sectionId) { document.getElementById(sectionId).style.display = 'block'; }