hgman/js/index.js

95 lines
3.6 KiB
JavaScript
Raw Permalink Normal View History

2021-02-27 02:38:38 +03:00
"use strict";
2021-02-25 01:33:29 +03:00
// keyboard layouts
const keyboardLayouts = {
2021-02-27 02:38:38 +03:00
usQwertyKeyboard: "abcdefghijklmnopqrstuvwxyz".toUpperCase(),
ruQwertyKeyboard: "йцукеёнгшщзхъфывапролджэячсмитьбю".toUpperCase()
};
2021-02-25 01:33:29 +03:00
2021-02-27 02:38:38 +03:00
const words = [ "google", "speed", "design", "forest", "forever", "love", "horizon", "defect" ];
2021-02-25 02:15:04 +03:00
2021-02-25 01:33:29 +03:00
// game variables
2021-02-25 02:15:04 +03:00
let gameWord = words[Math.floor(Math.random() * words.length)].toUpperCase();
2021-02-25 01:33:29 +03:00
2021-02-27 02:38:38 +03:00
let gameAnswered = new Array(gameWord.length + 1).join("-");
2021-02-25 01:33:29 +03:00
2021-02-27 02:38:38 +03:00
let lives = 6;
2021-02-25 01:33:29 +03:00
2021-02-27 02:38:38 +03:00
// init keyboard
function generateKeyboard(layout) {
let keyboardHtmlStr = "";
layout.split("").forEach(function(letter) {
2021-02-27 02:57:58 +03:00
keyboardHtmlStr += `<button class="button clear is-marginless" id="${letter}" onclick="letterClick('${letter}')">${letter}</button>`;
2021-02-27 02:38:38 +03:00
});
let keyboard = document.querySelector("#keyboard");
keyboard.classList.remove("is-hidden");
document.querySelector("#keyboard").innerHTML = keyboardHtmlStr;
2021-02-25 01:33:29 +03:00
}
2021-02-25 08:44:48 +03:00
// letter click action
2021-02-27 02:38:38 +03:00
function letterClick(letter) {
let charButton = document.getElementById(letter);
charButton.disabled = true;
let indices = [];
let idx = gameWord.split("").indexOf(letter);
if (idx == -1) {
wrongLetter();
updateStats("stLetterClick");
return;
}
while (idx != -1) {
indices.push(idx);
idx = gameWord.split("").indexOf(letter, idx + 1);
}
indices.forEach(function(item, indices) {
let wordArray = gameAnswered.split("");
wordArray[item] = letter;
gameAnswered = wordArray.join("");
document.querySelector("#word").innerHTML = gameAnswered;
updateStats("stCorrLetter");
});
if (gameAnswered.split("").indexOf("-") == -1) {
updateStats("stWinWords");
// display win scene
2021-02-27 02:57:58 +03:00
document.querySelector("#keyboard").innerHTML = '\t\t<img src="https://icongr.am/clarity/happy-face.svg?size=128&color=28bd14">\t\t<h1 class="text-success">Your winner!!</h1>\t\t<button class="button error" onclick="document.location.reload(true);"\t\t>Restart game</button>';
2021-02-27 02:38:38 +03:00
}
2021-02-25 01:33:29 +03:00
}
2021-02-25 08:44:48 +03:00
// action by wrong letter
2021-02-27 02:38:38 +03:00
function wrongLetter() {
if (lives <= 0) {
updateStats("stTotalGames");
// display hidden word
2021-02-27 02:57:58 +03:00
document.querySelector("#word").innerHTML = gameWord;
2021-02-27 02:38:38 +03:00
document.querySelector("#word").classList.add("text-success");
// display lose scene
2021-02-27 02:57:58 +03:00
document.querySelector("#keyboard").innerHTML = '\t\t<img src="https://icongr.am/clarity/sad-face.svg?size=128&color=d43939">\t\t<h1 class="text-error">Your lose!!</h1>\t\t<button class="button error" onclick="document.location.reload(true);"\t\t>Restart game</button>';
2021-02-27 02:38:38 +03:00
}
lives -= 1;
document.querySelector("#lives").innerHTML = "Lives " + lives;
2021-02-25 01:33:29 +03:00
}
2021-02-25 08:44:48 +03:00
// display tab content
2021-02-27 02:38:38 +03:00
function showPage(element, pageName) {
[ "gameButton", "statsButton", "creditsButton" ].forEach(function(item) {
document.querySelector("#" + item).classList.remove("active");
});
document.querySelector("#" + element.id).classList.add("active");
document.querySelector("#content").innerHTML = pageName;
if (pageName == pageStatistics) {
updateStatsPage();
}
2021-02-25 01:33:29 +03:00
}
2021-02-25 08:44:48 +03:00
// game init
2021-02-27 02:38:38 +03:00
window.onload = function() {
updateStats("stCheck");
generateKeyboard(keyboardLayouts["usQwertyKeyboard"]);
document.querySelector("#lives").innerHTML = "Lives " + lives;
console.log("Word:", gameWord.toLowerCase());
document.querySelector("#word").innerHTML = gameAnswered;
if (window.screen.availWidth <= 599) {
document.querySelector("#lives").classList.remove("error");
document.querySelector("#lives").classList.add("dark");
}
};