let sessionId = null; let playerId = null; let isMyTurn = false; document.addEventListener("DOMContentLoaded", (event) => { const playButton = document.getElementById("playButton"); const joinButton = document.getElementById("joinButton"); const submitWordButton = document.getElementById("submitWordButton"); const guessButton = document.getElementById("guessButton"); if (playButton) playButton.addEventListener("click", startGame); if (joinButton) joinButton.addEventListener("click", joinGame); 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; document.getElementById("sessionInfo").style.display = "block"; document.getElementById("playButton").style.display = "none"; document.getElementById("wordInput").style.display = "block"; }); } function joinGame() { const joinSessionId = document.getElementById("joinSessionId").value; fetch(`/join/${joinSessionId}`, { method: "POST" }) .then((response) => response.json()) .then((data) => { if (data.error) { alert(data.error); } else { sessionId = joinSessionId; playerId = data.player_id; document.getElementById("joinGame").style.display = "none"; document.getElementById("wordInput").style.display = "block"; } }); } 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) => { if (data.status === "waiting_for_opponent") { document.getElementById("wordInput").style.display = "none"; document.getElementById("waitingMessage").style.display = "block"; } else if (data.status === "game_started") { startGamePlay(); } }); } function startGamePlay() { document.getElementById("waitingMessage").style.display = "none"; document.getElementById("gameArea").style.display = "block"; 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!"); } 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; }); }