Sergidev's picture
Add files v1
7ef7190 verified
raw
history blame
4.22 kB
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;
});
}