1
0
Fork 0
forked from Simnation/Main
Main/resources/[qb]/qb-minigames/html/js/wordguess.js
2025-06-07 08:51:21 +02:00

102 lines
3.3 KiB
JavaScript

const inputs = document.querySelector(".inputs"),
hintTag = document.querySelector(".guess-hint span"),
guessLeft = document.querySelector(".guess-left span"),
wrongLetter = document.querySelector(".wrong-letter span"),
typingInput = document.querySelector(".typing-input"),
guessContainer = document.querySelector(".guess-container");
let word,
maxGuesses,
incorrectLetters = [],
correctLetters = [];
const setupWordGuessGame = (receivedWord, receivedHint, maxAllowedGuesses) => {
word = receivedWord.toLowerCase();
maxGuesses = maxAllowedGuesses;
correctLetters = Array(word.length).fill("");
incorrectLetters = [];
hintTag.textContent = receivedHint;
guessLeft.textContent = maxGuesses;
wrongLetter.textContent = incorrectLetters.join(", ");
let html = "";
for (let i = 0; i < word.length; i++) {
html += `<input type="text" disabled>`;
}
inputs.innerHTML = html;
guessContainer.style.display = "flex";
};
const initGuessGame = (key) => {
if (!key.match(/^[A-Za-z]$/) || incorrectLetters.includes(key) || correctLetters.includes(key)) {
return;
}
if (word.includes(key)) {
word.split("").forEach((char, index) => {
if (char === key) {
correctLetters[index] = key;
inputs.querySelectorAll("input")[index].value = key;
}
});
} else {
maxGuesses--;
incorrectLetters.push(key);
}
guessLeft.textContent = maxGuesses;
wrongLetter.textContent = incorrectLetters.join(", ");
checkGameStatus();
typingInput.value = "";
};
const checkGameStatus = () => {
if (!correctLetters.includes("")) {
fetch(`https://${GetParentResourceName()}/wordGuessedCorrectly`, {
method: "POST",
headers: { "Content-Type": "application/json; charset=UTF-8" },
}).catch((err) => console.error("Error with fetch:", err));
} else if (maxGuesses <= 0) {
fetch(`https://${GetParentResourceName()}/tooManyGuesses`, {
method: "POST",
headers: { "Content-Type": "application/json; charset=UTF-8" },
}).catch((err) => console.error("Error with fetch:", err));
revealWord();
}
};
const revealWord = () => {
word.split("").forEach((char, index) => {
inputs.querySelectorAll("input")[index].value = char;
});
};
const resetGuessGame = () => {
setupWordGuessGame("", "", 0);
typingInput.value = "";
guessContainer.style.display = "none";
};
document.addEventListener("keydown", (event) => {
if (event.key === "Escape") {
fetch(`https://${GetParentResourceName()}/closeWordGuess`, {
method: "POST",
headers: { "Content-Type": "application/json; charset=UTF-8" },
body: JSON.stringify({}),
}).catch((err) => console.error("Error with fetch:", err));
resetGuessGame();
}
});
window.addEventListener("message", (event) => {
let data = event.data;
if (data.action === "wordGuess") {
setupWordGuessGame(data.word, data.hint, data.maxGuesses);
} else if (data.action === "closeWordGuess") {
resetGuessGame();
}
});
typingInput.addEventListener("input", (e) => initGuessGame(e.target.value.toLowerCase()));
inputs.addEventListener("click", () => typingInput.focus());