Sergidev's picture
Update static/js/game.js
0e1ddb7 verified
raw
history blame
4.98 kB
let sessionId = null;
let player = null;
document.addEventListener('DOMContentLoaded', (event) => {
document.getElementById('playButton').addEventListener('click', createGame);
document.getElementById('joinButton').addEventListener('click', joinGame);
document.getElementById('submitWordButton').addEventListener('click', submitWord);
});
function createGame() {
fetch('/play', { method: 'POST' })
.then(response => response.json())
.then(data => {
sessionId = data.session_id;
player = 'player1';
document.getElementById('sessionId').textContent = sessionId;
document.getElementById('startOptions').style.display = 'none';
document.getElementById('gameInfo').style.display = 'block';
document.getElementById('statusMessage').textContent = 'Waiting for player 2...';
checkGameStatus();
});
}
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;
player = 'player2';
document.getElementById('sessionId').textContent = sessionId;
document.getElementById('startOptions').style.display = 'none';
document.getElementById('gameInfo').style.display = 'block';
document.getElementById('statusMessage').textContent = 'Joined the game. Starting soon...';
checkGameStatus();
}
});
}
function checkGameStatus() {
fetch(`/status/${sessionId}`)
.then(response => response.json())
.then(data => {
if (data.status === 'ready') {
document.getElementById('statusMessage').textContent = 'Game is starting...';
startGame();
} else {
setTimeout(checkGameStatus, 2000); // Check again in 2 seconds
}
});
}
function startGame() {
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: player, word: word }),
})
.then(response => response.json())
.then(data => {
if (data.status === 'waiting_for_opponent') {
document.getElementById('wordInput').style.display = 'none';
document.getElementById('statusMessage').textContent = 'Waiting for opponent to submit their word...';
} else if (data.status === 'game_started') {
document.getElementById('wordInput').style.display = 'none';
document.getElementById('gameArea').style.display = 'block';
document.getElementById('statusMessage').textContent = 'Game started!';
updateGameState();
}
});
}
function makeGuess() {
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: player, guess: guess }),
})
.then(response => response.json())
.then(data => {
if (data.status === 'game_over') {
alert(data.winner === player ? 'You win!' : 'You lose!');
}
updateGameState();
});
}
function updateGameState() {
fetch(`/game_state/${sessionId}`)
.then(response => response.json())
.then(data => {
document.getElementById('playerWord').textContent = data.words[player];
document.getElementById('opponentWord').textContent = data.words[player === 'player1' ? 'player2' : 'player1'];
document.getElementById('guesses').textContent = 'Guessed letters: ' + data.guesses.join(', ');
const isMyTurn = data.current_player === player;
document.getElementById('playerTurn').textContent = isMyTurn ? 'Your turn' : "Opponent's turn";
document.getElementById('guessButton').disabled = !isMyTurn;
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;
});
}