Keelevaliku lisamine
Keelevaliku lisamiseks on meil vaja teostada järgmised sammud:
- lisada keelevaliku võimalus, selleks loome uue faili – mangu_esileht.html
- lisada kood, mis aitaks keelevalikut säilitada, kasutame selleks JavaScripti ja küpsiseid (cookies) – mangu_esilehekood.js
- täiendada:
- mängulehte (mang.html), et kõiki vajalikke elemente oleks võimalik vastavalt keelevalikule muuta
- mängukoodi (mangukood.js), et vastavalt keelele tehtaks muudatused
- mängu kujundust (mangukujundus.css):
- keelevaliku lehe (mangu_esileht.html) kujundamiseks (kasutame võimalust lisada kujundus esialgsesse kujundusfaili mangukujundus.css)
- mängulehe (mang.html) kujunduse täiendamiseks
1. Keelevaliku lehe lisamine
Keelevaliku jaoks lisame uue html-lehe, mangu_esileht.html:
<!DOCTYPE html> <html> <head> <title>Meie mängu avaleht</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="mangukujundus.css"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/css/bootstrap.min.css" rel="stylesheet"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css"/> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="mangu_esilehekood.js"></script> </head> <body> <div class="row"> <div class="col-lg-4 col-md-4 col-sm-4 col-xs-2"> </div> <div id="valikukast" class="col-lg-4 col-md-4 col-sm-4 col-xs-8"> Palun vali keel<br> Please choose a language:<br><br> <form> <input type="radio" id="est" name="keel" value="eesti" checked> <label for="est">eesti</label><br> <input type="radio" id="eng" name="keel" value="english"> <label for="eng">english</label><br><br> <button id="kinnitamine" type="button" onclick="kypsis();" class="elemendid btn btn-primary"> <i class="bi-check2-circle"></i> Kinnita/Confirm </button> </form> </div> <div class="col-lg-4 col-md-4 col-sm-4 col-xs-2"> </div> </body> </html>
Eelneva koodi tulemusena tekib leht, milles kasutatakse:
- kujunduse jaoks faili mangukujundus.css
- ikoonide jaoks Bootstrapi ikoone ==> <link rel=”stylesheet” href=”https://cdn.jsdelivr.net/npm/bootstrap-icons@1.3.0/font/bootstrap-icons.css”/>
- koodi jaoks faili mangu_esilehekood.js
- vormi, milles:
- keelevaliku tegemiseks kasutatakse:
- radio nuppe,
- mille nimi on name=”keel” (NB! mõlemal radio nupul on sama nimi, et neid omavahel siduda),
- mille identifikaatorid on vastavalt id=”est” ja id=”eng”,
- millest eesti keele valik, identifikaatoriga id=”est”, on vaikimise valitud checked
- keelevaliku kinnitamiseks kasutatakse:
- nuppu button,
- mille identifikaator on id=”kinnitamine”,
- millele vajutades käivitub funktsioon kypsis() ==> onClick=”kypsis();”
- millele on lisatud Bootstrapi ikoon ==> <i class=”bi-check2-circle”></i>
- keelevaliku tegemiseks kasutatakse:
2. Keelevalikuteabe säilitamise küpsuses
Keelevalikuteabe jaoks kasutame küpsist ja selle tarvis lisame JavaScripti faili mangu_esilehekood.js, mis sisaldab funktsiooni kypsis:
function kypsis() { if (document.getElementById("est").checked) { document.cookie="keel=eesti"; } else { document.cookie="keel=english"; } window.location.href = "mang.html"; }
Funktsioon kypsis(), mis aktiveerub nupule kinnitamine vajutades, sisaldab järgmisi samme:
- kontrollitakse, kas radio valik est on aktiveeritud:
- kui jah, siis omistatakse küpsisele keel väärtus eesti ==> document.cookie=”keel=eesti”;
- vastasel juhul omistatakse küpsisele keel väärtus english ==> document.cookie=”keel=english”;
- liigutakse edasi lehel mang.html, mis on meie mänguleht ==> window.location.href = “mang.html”;
3. Olemasolevate koodide täiendamine
3.1 Lehe mang.html täiendamine
Mängu lehel täiendame tähe lisamise osa, et oleks võimalik seda tõlkida vastavalt valitud keelele:
Senise:
<div class="row"> <div id="andmed_sisse"> Täht: <input id="taht" class="elemendid" type="text" maxlength="1"> <button type="button" id="nupp" class="btn btn-primary elemendid" onclick="taheproov();"> Proovi </button> </div> </div>
asemel:
<div class="row" id="nupukast"> <div id="tahetekst" class="elemendid col-lg-6 col-md-6 col-sm-6 col-xs-12"> Täht: </div> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> <div id="andmed_sisse"> <input id="taht" class="elemendid" type="text" maxlength="1"> <button type="button" id="nupp" class="btn btn-primary elemendid" onclick="taheproov();"> Proovi </button> </div> </div> </div>
Selle tulemusena on faili mang.html sisu järgmine:
<!DOCTYPE html> <html> <head> <title>Meie mäng</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" type="text/css" href="mangukujundus.css"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.2/dist/js/bootstrap.bundle.min.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="mangukood.js"></script> </head> <body onload="algseis();"> <div class="container-fluid"> <div class="row"> <div id="sona" class="elemendid">Siia tuleb otsitav sõna</div> </div> <div class="row"> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> <div id="pilt">Siia tuleb pilt</div> </div> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> <div id="tahed" class="elemendid">Siia tulevad tähed, mida sõnas ei ole!</div> </div> </div> <div class="row"> <div id="info" class="elemendid">Siia tuleb info selle kohta, kas täht sobis või mitte</div> </div> <div class="row" id="nupukast"> <div id="tahetekst" class="elemendid col-lg-6 col-md-6 col-sm-6 col-xs-12"> Täht: </div> <div class="col-lg-6 col-md-6 col-sm-6 col-xs-12"> <div id="andmed_sisse"> <input id="taht" class="elemendid" type="text" maxlength="1"> <button type="button" id="nupp" class="btn btn-primary elemendid" onclick="taheproov();"> Proovi </button> </div> </div> </div> </body> </html>
3.2 Mängukoodi mangukood.js täiendamine
Mängukoodi täiendame esmalt funktsiooni küpsise eraldamiseks, nimega getCookie, mille sisendparameetriks on name:
function getCookie(name) { name = name + "="; var cookies = document.cookie.split(';'); for(var i = 0; i <cookies.length; i++) { var cookie = cookies[i]; while (cookie.charAt(0)==' ') { cookie = cookie.substring(1); } if (cookie.indexOf(name) == 0) { return cookie.substring(name.length,cookie.length); } } return ""; }
kus:
- lisatakse küpsise nimele võrdusmärk ==> name = name + “=”;
- luuakse küpsiste massiiv cookies eraldades kõik lehel olevad küpsised semikoolonite abil ==> var cookies = document.cookie.split(‘;’);
- analüüsitakse for-tsüklit kasutades kõik massiivis cookies leiduvad küpsused läbi ==> for (var i = 0; i <cookies.length; i++)
- omistatakse muutujale cookie massiivis cookies kohal i paiknev väärtus ==> var cookie = cookies[i];
- teostatakse seda, kui muutuja cookie esimene märk on tühik, kasutades meetodit charAt() ==> var cookie = cookies[i];
while (cookie.charAt(0)==’ ‘)- sel juhul liigutatakse muutuja cookie algus, kasutades meetodit substring(), kohale 2 ==> cookie = cookie.substring(1);
- kontrollitakse, kas leitud kohast alates on parameetri name asukohaks 0, kasutades meetodit indexOf() ==> if (cookie.indexOf(name) == 0)
- kui jah, siis tagastab funktsioon cookie väärtuse, kasutades meetodit substring(), kus cookie väärtus algab küpsise nime ja võrdusmärgi järelt ==> return cookie.substring(name.length,cookie.length);
Seejärel leiame eelneva funktsiooni getCookie() abil muutuja keel väärtuse (NB! tegu on globaalse muutujaga, mida kasutame faili mangukood.js piires):
var keel=getCookie("keel");
Edasi aga tuleb kogu olemasolevat koodi kohandada selliselt, et sõltuvalt muutuja keel väärtuses muutuksid ka vastavate sõnade ja tekstide keeled, nt esmalt globaalsete muutujate määraltemine:
var leitud_tahed=[]; if (keel=="eesti") { var otsitav_sona="lumelaualaager"; var otsitava_sona_tahed=otsitav_sona.split(""); leitud_tahed.push("l"); leitud_tahed.push("r"); } else { var otsitav_sona="snowboardcamp"; var otsitava_sona_tahed=otsitav_sona.split(""); leitud_tahed.push("s"); leitud_tahed.push("p"); }
Ja mängu alglaadimine:
function algseis() { if (keel=="eesti") { document.getElementById("sona").innerHTML="L _ _ _ L _ _ _ L _ _ _ _ R"; document.getElementById("info").innerHTML="Hakka aga mänguga pihta!"; document.getElementById("tahetekst").innerHTML="Täht:"; document.getElementById("nupp").innerHTML="Proovi"; } else { document.getElementById("sona").innerHTML="S _ _ _ _ _ _ _ _ _ _ _ P"; document.getElementById("info").innerHTML="Start the game!"; document.getElementById("tahetekst").innerHTML="Letter:"; document.getElementById("nupp").innerHTML="Try"; } document.getElementById("tahed").innerHTML=""; var input = document.getElementById("taht"); input.addEventListener("keydown", function (e) { if (e.key === "Enter") { taheproov(); } }); document.getElementById("pilt").innerHTML='<img src="pilt1.jpg" id="pildisisu">'; document.getElementById("taht").focus(); document.getElementById("taht").select(); }
Ja funktsiooni taheproov sisu:
function taheproov() { var taht=document.getElementById("taht").value.toLowerCase(); labi=0; // kui ei ole ühtegi tähte sisestatud if (taht.length==0) { if (keel=="eesti") { document.getElementById("info").innerHTML="Palun sisesta täht!"; } else { document.getElementById("info").innerHTML="Please insert a letter!"; } } //kui täht on sisestatud else { // kontrollime, kas on juba leitud if (leitud_tahed.includes(taht)) { if (keel=="eesti") { document.getElementById("info").innerHTML="See täht on juba sisestatud!"; } else { document.getElementById("info").innerHTML="This letter has already been inserted!"; } } //kontrollime, kas täht sisaldub sõnas else if (otsitava_sona_tahed.includes(taht)) { leitud_tahed.push(taht); kuvatav_tekst=otsitava_sona_tahed[0].toUpperCase(); sona_seis=otsitava_sona_tahed[0]; if (keel=="eesti") { document.getElementById("info").innerHTML="Leidsid õige tähe!"; } else { document.getElementById("info").innerHTML="You found a letter that fits!"; } for (i=1; i<otsitava_sona_tahed.length; i++) { if (leitud_tahed.includes(otsitava_sona_tahed[i])) { kuvatav_tekst=kuvatav_tekst+" "+otsitava_sona_tahed[i].toUpperCase(); sona_seis=sona_seis+otsitava_sona_tahed[i]; } else { kuvatav_tekst=kuvatav_tekst+" _"; sona_seis=sona_seis+"_"; } document.getElementById("sona").innerHTML=kuvatav_tekst; } if (otsitav_sona==sona_seis) { labi=mang_labi("voit"); } } //kontrollime, kas täht on sobimatute tähtede nimekirjas else if (sobimatud_tahed.includes(taht)) { if (keel=="eesti") { document.getElementById("info").innerHTML="See täht on juba sisestatud!"; } else { document.getElementById("info").innerHTML="This letter has already been inserted!"; } } //kontrollime, kas sobimatute tähtede nimekirjas on veel ruumi else if (sobimatud_tahed.length<8) { sobimatud_tahed.push(taht); document.getElementById("tahed").innerHTML=document.getElementById("tahed").innerHTML+" "+taht.toUpperCase(); if (keel=="eesti") { document.getElementById("info").innerHTML="Seda tähte ei ole sõnas!"; } else { document.getElementById("info").innerHTML="This word doesn't contain this letter!"; } jrknr=sobimatud_tahed.length+1; document.getElementById("pilt").innerHTML="<img src='pilt"+jrknr+".jpg' id='pildisisu'>"; } //kui ükski eelnevatest tingimustest pole tõene, siis on mäng läbi else { labi=mang_labi("kaotus"); } } if (labi==0) { document.getElementById("taht").value=""; document.getElementById("taht").focus(); document.getElementById("taht").select(); } }
Ja funktsiooni mang_labi sisu:
function mang_labi(seis) { if (seis=="voit") { if (keel=="eesti") { document.getElementById("info").innerHTML="Sa arvasid sõna ära!"; } else { document.getElementById("info").innerHTML="You guessed the word!"; } } else { if (keel=="eesti") { document.getElementById("info").innerHTML="Sa kaotasid!"; } else { document.getElementById("info").innerHTML="You lost!"; } document.getElementById("pilt").innerHTML="<img src='pilt10.jpg' id='pildisisu'>"; var audio = new Audio('labi.mp3'); audio.play(); } if (keel=="eesti") { document.getElementById("nupukast").innerHTML='<a href="" class="btn btn-primary elemendid">Alusta otsast peale!</a>'; } else { document.getElementById("nupukast").innerHTML='<a href="" class="btn btn-primary elemendid">Start all over again!</a>'; } return 1; }
3.3 Kujunduse mangukujundus.css täiendamine
Kujundusfaili mangukujundus.css teeme järgmised muudatused:
#sona, #info, #taht { text-align: center !important; } #andmed_sisse { text-align: left !important; } #tahetekst { text-align: right !important; padding-top: 10px !important; } #taht { width: 90px !important; padding: 0px 25px 10px 25px !important; margin-right: 10px !important; } #nupp { margin-top: 7px !important; } #valikukast { font-size: 30px !important; } input[type='radio'] { transform: scale(2); }
mille tulemusena kujundusfaili sisu on järgmine:
.elemendid, #andmed_sisse { font-size: 35px !important; margin-bottom: 10px !important; } #sona, #info, #taht { text-align: center !important; } #andmed_sisse { text-align: left !important; } #tahetekst { text-align: right !important; padding-top: 10px !important; } #pildisisu { width: 200px !important; height: 200px !important; float: right !important; } #tahed { color: red; text-decoration: line-through; } #taht { width: 90px !important; padding: 0px 25px 10px 25px !important; margin-right: 10px !important; } #nupp { margin-top: 7px !important; } #valikukast { font-size: 30px !important; } input[type='radio'] { transform: scale(2); }
Siinkohal kasutame radio nuppude suurendamiseks meetodit transform, omaduse scale väärtusega 2 ==> input[type=’radio’] { transform: scale(2); }