Spaces:
Paused
Paused
let sessionId = null; | |
let playerId = null; | |
let isMyTurn = false; | |
document.addEventListener('DOMContentLoaded', (event) => { | |
const playButton = document.getElementById('playButton'); | |
if (playButton) playButton.addEventListener('click', startGame); | |
}); | |
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('playButton').style.display = 'none'; | |
if (data.waiting) { | |
document.getElementById('waitingMessage').style.display = 'block'; | |
checkGameStatus(); | |
} else { | |
startGamePlay(); | |
} | |
}); | |
} | |
function checkGameStatus() { | |
fetch(`/check_status/${sessionId}`) | |
.then(response => response.json()) | |
.then(data => { | |
if (data.players === 2) { | |
document.getElementById('waitingMessage').style.display = 'none'; | |
document.getElementById('gameStarting').style.display = 'block'; | |
setTimeout(startGamePlay, 2000); | |
} else { | |
setTimeout(checkGameStatus, 2000); | |
} | |
}); | |
} | |
function startGamePlay() { | |
window.location.href = `/game.html?session=${sessionId}&player=${playerId}`; | |
} | |
// The following functions will be used in game.html | |
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'; | |
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() { | |
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; | |
}); | |
} | |
// Initialize game when game.html loads | |
window.onload = function() { | |
const urlParams = new URLSearchParams(window.location.search); | |
sessionId = urlParams.get('session'); | |
playerId = urlParams.get('player'); | |
if (sessionId && playerId) { | |
document.getElementById('wordInput').style.display = 'block'; | |
} else { | |
alert('Invalid game session'); | |
} | |
} |