diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d91594..abd2cda 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ +## Legend +- 🐛 - Bug +- ✔️ - Fixed +- ❌ - Removed +- ➕ - Added +- ℹ️ - Information +- ♻️ - Edited + ## 2.0.3 # Build 3 [Development] -- +- ➕ - Show hidden word by Lose ## 2.0.2 # Build 2 [2021-02-25] - ➕ - Added game statistics @@ -13,11 +21,3 @@ ## 2.0.0 [2021-02-25] Init version - -## Legend -- 🐛 - Bug -- ✔️ - Fixed -- ❌ - Removed -- ➕ - Added -- ℹ️ - Information -- ♻️ - Edited diff --git a/TODO.md b/TODO.md index f3569c3..508cc0a 100644 --- a/TODO.md +++ b/TODO.md @@ -1,8 +1,8 @@ [ ] Loading page [ ] Localization [ ] Fix GAME tab for not refresh page -[ ] Show word if lose [ ] Android manifest +[+] Show word if lose [+] Keyboard fit [+] Game Statistics [+] Restart scene diff --git a/docs/game.js b/docs/game.js index cee50d2..0dc52c9 100644 --- a/docs/game.js +++ b/docs/game.js @@ -1 +1 @@ -"use strict";const pageCredits='\t

Font F5.6 by\t\tDOT COLON\t

\t\t

UI by\t\tchota.css\t

';"use strict";const pageStatistics='\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
User statistics
NameValue
Total games...
Guess words...
% Win...
Total letters clicked...
Correctly guessed letters...
% correctly letters...
\t

\t\tClear statistics\t

';function updateStatsPage(){let stTotalGames=localStorage.getItem("stTotalGames");let stWinWords=localStorage.getItem("stWinWords");let stWinPercentage=localStorage.getItem("stWinPercentage");let stLetterClick=localStorage.getItem("stLetterClick");let stCorrLetter=localStorage.getItem("stCorrLetter");let stWinLetterPercent=localStorage.getItem("stWinLetterPercent");document.querySelector("#stTotalGames").innerHTML=stTotalGames;document.querySelector("#stWinWords").innerHTML=stWinWords;document.querySelector("#stWinPercentage").innerHTML=Math.round(stWinWords/stTotalGames*100);document.querySelector("#stLetterClick").innerHTML=stLetterClick;document.querySelector("#stCorrLetter").innerHTML=stCorrLetter;document.querySelector("#stWinLetterPercent").innerHTML=Math.round(stCorrLetter/stLetterClick*100)}"use strict";function updateStats(statParameter){let stTotalGames=JSON.parse(localStorage.getItem("stTotalGames"));let stWinWords=JSON.parse(localStorage.getItem("stWinWords"));let stLetterClick=JSON.parse(localStorage.getItem("stLetterClick"));let stCorrLetter=JSON.parse(localStorage.getItem("stCorrLetter"));switch(statParameter){case"stTotalGames":localStorage.setItem("stTotalGames",stTotalGames+1);break;case"stWinWords":localStorage.setItem("stTotalGames",stTotalGames+1);localStorage.setItem("stWinWords",stWinWords+1);break;case"stLetterClick":localStorage.setItem("stLetterClick",stLetterClick+1);break;case"stCorrLetter":localStorage.setItem("stLetterClick",stLetterClick+1);localStorage.setItem("stCorrLetter",stCorrLetter+1);break;case"stCheck":if(stTotalGames==null){localStorage.setItem("stTotalGames",0)}if(stWinWords==null){localStorage.setItem("stWinWords",0)}if(stLetterClick==null){localStorage.setItem("stLetterClick",0)}if(stCorrLetter==null){localStorage.setItem("stCorrLetter",0)}break}}"use strict";const keyboardLayouts={usQwertyKeyboard:"abcdefghijklmnopqrstuvwxyz".toUpperCase(),ruQwertyKeyboard:"йцукеёнгшщзхъфывапролджэячсмитьбю".toUpperCase()};const words=["google","speed","design","forest","forever","love","horizon","defect"];let gameWord=words[Math.floor(Math.random()*words.length)].toUpperCase();let gameAnswered=new Array(gameWord.length+1).join("-");let lives=6;function generateKeyboard(layout){let keyboardHtmlStr="";layout.split("").forEach(function(letter){keyboardHtmlStr=keyboardHtmlStr+'"});let keyboard=document.querySelector("#keyboard");keyboard.classList.remove("is-hidden");document.querySelector("#keyboard").innerHTML=keyboardHtmlStr}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");document.querySelector("#keyboard").innerHTML='\t\t\t\t

Your winner!!

\t\t'}}function wrongLetter(){if(lives<=0){updateStats("stTotalGames");document.querySelector("#keyboard").innerHTML='\t\t\t\t

Your lose!!

\t\t'}lives-=1;document.querySelector("#lives").innerHTML="Lives "+lives}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()}}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")}}; \ No newline at end of file +"use strict";const pageCredits='\t

Font F5.6 by\t\tDOT COLON\t

\t\t

UI by\t\tchota.css\t

';"use strict";const pageStatistics='\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t
User statistics
NameValue
Total games...
Guess words...
% Win...
Total letters clicked...
Correctly guessed letters...
% correctly letters...
\t

\t\tClear statistics\t

';function updateStatsPage(){let stTotalGames=localStorage.getItem("stTotalGames");let stWinWords=localStorage.getItem("stWinWords");let stWinPercentage=localStorage.getItem("stWinPercentage");let stLetterClick=localStorage.getItem("stLetterClick");let stCorrLetter=localStorage.getItem("stCorrLetter");let stWinLetterPercent=localStorage.getItem("stWinLetterPercent");document.querySelector("#stTotalGames").innerHTML=stTotalGames;document.querySelector("#stWinWords").innerHTML=stWinWords;document.querySelector("#stWinPercentage").innerHTML=Math.round(stWinWords/stTotalGames*100);document.querySelector("#stLetterClick").innerHTML=stLetterClick;document.querySelector("#stCorrLetter").innerHTML=stCorrLetter;document.querySelector("#stWinLetterPercent").innerHTML=Math.round(stCorrLetter/stLetterClick*100)}"use strict";function updateStats(statParameter){let stTotalGames=JSON.parse(localStorage.getItem("stTotalGames"));let stWinWords=JSON.parse(localStorage.getItem("stWinWords"));let stLetterClick=JSON.parse(localStorage.getItem("stLetterClick"));let stCorrLetter=JSON.parse(localStorage.getItem("stCorrLetter"));switch(statParameter){case"stTotalGames":localStorage.setItem("stTotalGames",stTotalGames+1);break;case"stWinWords":localStorage.setItem("stTotalGames",stTotalGames+1);localStorage.setItem("stWinWords",stWinWords+1);break;case"stLetterClick":localStorage.setItem("stLetterClick",stLetterClick+1);break;case"stCorrLetter":localStorage.setItem("stLetterClick",stLetterClick+1);localStorage.setItem("stCorrLetter",stCorrLetter+1);break;case"stCheck":if(stTotalGames==null){localStorage.setItem("stTotalGames",0)}if(stWinWords==null){localStorage.setItem("stWinWords",0)}if(stLetterClick==null){localStorage.setItem("stLetterClick",0)}if(stCorrLetter==null){localStorage.setItem("stCorrLetter",0)}break}}"use strict";const keyboardLayouts={usQwertyKeyboard:"abcdefghijklmnopqrstuvwxyz".toUpperCase(),ruQwertyKeyboard:"йцукеёнгшщзхъфывапролджэячсмитьбю".toUpperCase()};const words=["google","speed","design","forest","forever","love","horizon","defect"];let gameWord=words[Math.floor(Math.random()*words.length)].toUpperCase();let gameAnswered=new Array(gameWord.length+1).join("-");let lives=6;function generateKeyboard(layout){let keyboardHtmlStr="";layout.split("").forEach(function(letter){keyboardHtmlStr=keyboardHtmlStr+'"});let keyboard=document.querySelector("#keyboard");keyboard.classList.remove("is-hidden");document.querySelector("#keyboard").innerHTML=keyboardHtmlStr}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");document.querySelector("#keyboard").innerHTML='\t\t\t\t

Your winner!!

\t\t'}}function wrongLetter(){if(lives<=0){updateStats("stTotalGames");document.querySelector("#word").innerHTML=gameWord;document.querySelector("#word").classList.add("text-success");document.querySelector("#keyboard").innerHTML='\t\t\t\t

Your lose!!

\t\t'}lives-=1;document.querySelector("#lives").innerHTML="Lives "+lives}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()}}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")}}; \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 35b564d..63fc7b3 100644 --- a/docs/index.html +++ b/docs/index.html @@ -80,7 +80,7 @@ ver: 2.0.2

diff --git a/js/_statFunction.js b/js/_statFunction.js index 80d6753..98e401d 100644 --- a/js/_statFunction.js +++ b/js/_statFunction.js @@ -1,38 +1,42 @@ -'use strict'; +"use strict"; -function updateStats(statParameter) -{ - let stTotalGames = JSON.parse(localStorage.getItem('stTotalGames')); - let stWinWords = JSON.parse(localStorage.getItem('stWinWords')); - let stLetterClick = JSON.parse(localStorage.getItem('stLetterClick')); - let stCorrLetter = JSON.parse(localStorage.getItem('stCorrLetter')); +function updateStats(statParameter) { + let stTotalGames = JSON.parse(localStorage.getItem("stTotalGames")); + let stWinWords = JSON.parse(localStorage.getItem("stWinWords")); + let stLetterClick = JSON.parse(localStorage.getItem("stLetterClick")); + let stCorrLetter = JSON.parse(localStorage.getItem("stCorrLetter")); + switch (statParameter) { + case "stTotalGames": + localStorage.setItem("stTotalGames", stTotalGames + 1); + break; - switch(statParameter) - { - case 'stTotalGames': - localStorage.setItem('stTotalGames', stTotalGames + 1); - - break; - case 'stWinWords': - localStorage.setItem('stTotalGames', stTotalGames + 1); - localStorage.setItem('stWinWords', stWinWords + 1); - - break; - case 'stLetterClick': - localStorage.setItem('stLetterClick', stLetterClick + 1); - - break; - case 'stCorrLetter': - localStorage.setItem('stLetterClick', stLetterClick + 1); - localStorage.setItem('stCorrLetter', stCorrLetter + 1); - - break; - case 'stCheck': - if (stTotalGames == null) { localStorage.setItem('stTotalGames', 0); } - if (stWinWords == null) { localStorage.setItem('stWinWords', 0); } - if (stLetterClick == null) { localStorage.setItem('stLetterClick', 0); } - if (stCorrLetter == null) { localStorage.setItem('stCorrLetter', 0); } + case "stWinWords": + localStorage.setItem("stTotalGames", stTotalGames + 1); + localStorage.setItem("stWinWords", stWinWords + 1); + break; - break; - } -} + case "stLetterClick": + localStorage.setItem("stLetterClick", stLetterClick + 1); + break; + + case "stCorrLetter": + localStorage.setItem("stLetterClick", stLetterClick + 1); + localStorage.setItem("stCorrLetter", stCorrLetter + 1); + break; + + case "stCheck": + if (stTotalGames == null) { + localStorage.setItem("stTotalGames", 0); + } + if (stWinWords == null) { + localStorage.setItem("stWinWords", 0); + } + if (stLetterClick == null) { + localStorage.setItem("stLetterClick", 0); + } + if (stCorrLetter == null) { + localStorage.setItem("stCorrLetter", 0); + } + break; + } +} \ No newline at end of file diff --git a/js/index.js b/js/index.js index d69d71f..e695c54 100644 --- a/js/index.js +++ b/js/index.js @@ -1,129 +1,96 @@ -'use strict'; +"use strict"; // keyboard layouts const keyboardLayouts = { - 'usQwertyKeyboard' : 'abcdefghijklmnopqrstuvwxyz'.toUpperCase(), - 'ruQwertyKeyboard' : 'йцукеёнгшщзхъфывапролджэячсмитьбю'.toUpperCase() -} + usQwertyKeyboard: "abcdefghijklmnopqrstuvwxyz".toUpperCase(), + ruQwertyKeyboard: "йцукеёнгшщзхъфывапролджэячсмитьбю".toUpperCase() +}; -const words = [ - 'google', 'speed', 'design', 'forest', 'forever', 'love', - 'horizon', 'defect' -]; +const words = [ "google", "speed", "design", "forest", "forever", "love", "horizon", "defect" ]; // game variables let gameWord = words[Math.floor(Math.random() * words.length)].toUpperCase(); -let gameAnswered = new Array(gameWord.length + 1).join('-'); + +let gameAnswered = new Array(gameWord.length + 1).join("-"); + let lives = 6; // init keyboard -function generateKeyboard(layout) -{ - let keyboardHtmlStr = ''; - - layout.split('').forEach(function(letter) - { - keyboardHtmlStr = keyboardHtmlStr + ''; - }) - - let keyboard = document.querySelector("#keyboard"); - keyboard.classList.remove('is-hidden'); - document.querySelector("#keyboard").innerHTML = keyboardHtmlStr; +function generateKeyboard(layout) { + let keyboardHtmlStr = ""; + layout.split("").forEach(function(letter) { + keyboardHtmlStr = keyboardHtmlStr + '"; + }); + let keyboard = document.querySelector("#keyboard"); + keyboard.classList.remove("is-hidden"); + document.querySelector("#keyboard").innerHTML = keyboardHtmlStr; } // letter click action -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'); - - document.querySelector('#keyboard').innerHTML = '\ - \ -

Your winner!!

\ - '; - } +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 + document.querySelector("#keyboard").innerHTML = '\t\t\t\t

Your winner!!

\t\t'; + } } // action by wrong letter -function wrongLetter() -{ - if (lives <= 0) - { - updateStats('stTotalGames'); - - document.querySelector('#keyboard').innerHTML = '\ - \ -

Your lose!!

\ - '; - } - - lives -= 1; - document.querySelector("#lives").innerHTML = 'Lives ' + lives; +function wrongLetter() { + if (lives <= 0) { + updateStats("stTotalGames"); + // display hidden word + document.querySelector("#word").innerHTML = gameWord; + document.querySelector("#word").classList.add("text-success"); + // display lose scene + document.querySelector("#keyboard").innerHTML = '\t\t\t\t

Your lose!!

\t\t'; + } + lives -= 1; + document.querySelector("#lives").innerHTML = "Lives " + lives; } // display tab content -function showPage(element, pageName) -{ - // alert(event.srcElement.id); - - ['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(); } +function showPage(element, pageName) { + // alert(event.srcElement.id); + [ "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(); + } } // game init -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'); - } -} +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"); + } +}; \ No newline at end of file diff --git a/package.json b/package.json index 648d5e3..870cc1e 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ }, "scripts": { "build": "uglifyjs js/_* js/index.js -o docs/game.js", - "server": "python3.7 -m http.server --directory ./docs/" + "server": "python3.7 -m http.server --directory ./docs/", + "beautify": "uglifyjs -b beautify,comments ${} -o ${}" }, "devDependencies": { "uglify-js": "^3.12.8"