Sõnavaliku lisamine
Selleks, et sõnavalikut laiendada:
- võtame kasutusele tekstifailid eesti- ja ingliskeelsete sõnade jaoks (iga sõna eraldi real):
- sonaraamat_eesti.txt
- sonaraamat_english.txt
- muudame olemasolevat koodi selliselt, et otsitav sõna saadakse vastava keele failist:
- muudame olemasolevat mängukoodi failis mangukood.js
- lisame PHP-faili alglaadimine.php, millega loeme failist sõnu
1. Sõnaraamatud
Nt võib faili sonaraamat_eesti.txt sisu olla seesugune:
pudrukausikaas supilusikatäis hallivatimees vutimunasuurune massikogunemine iluduskuninganna
Nt võib faili sonaraamat_english.txt sisu olla seesugune:
windsurfing mutually understandable musician celebration
2. Mängukoodi muutmine
2.1 muudatused JavaScriptis, failis mangukood.js
Esmalt muudame globaalsete muutujate defineerimist.
Senise
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"); }
asemel
var leitud_tahed=[]; var sobimatud_tahed=[]; var otsitav_sona; var otsitava_sona_tahed=[]; var kuvatav_tekst; var sona_seis;
Lisaks tuleb teha muudatusi funktsioonis algseis.
Esmalt lisame AJAX (Asynchronous JavaScript And XML) päringu PHP-failist alglaadimine.php:
if (window.XMLHttpRequest) { // veebilehitsejad IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // veebilehitsejad IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { otsitav_sona=xmlhttp.responseText; otsitava_sona_tahed=otsitav_sona.split(""); leitud_tahed.push(otsitava_sona_tahed[0]); if (!leitud_tahed.includes(otsitava_sona_tahed[otsitava_sona_tahed.length-1])) { leitud_tahed.push(otsitava_sona_tahed[otsitava_sona_tahed.length-1]); } kuvatav_tekst=otsitava_sona_tahed[0].toUpperCase(); sona_seis=otsitava_sona_tahed[0]; 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; } } var url = "alglaadimine.php"; var params = "keel="+keel; xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send(params);
Kus:
- sõltuvalt veebilehitsejast defineeritakse muutuja xmlhttp
- seejärel kontrollikse, kas päringu vastus on olemas ==> xmlhttp.onreadystatechange=function()
- kui on päringu vastus olemas ==> if (xmlhttp.readyState==4 && xmlhttp.status==200)
- omistatakse päringu vastus xmlhttp.responseText muutujale otsitav_sona ==> otsitav_sona=xmlhttp.responseText;
- teostatakse mängu alglaadimiseks vajalikud toimingud:
- sõna tähtedega jagamine, massiivi otsitava_sona_tahed => otsitava_sona_tahed=otsitav_sona.split(“”);
- sõna esimese ja viimase tähe lisamine massiivi leitud_tahed ==>
- leitud_tahed.push(otsitava_sona_tahed[0]);
- if (!leitud_tahed.includes(otsitava_sona_tahed[otsitava_sona_tahed.length-1])) { leitud_tahed.push(otsitava_sona_tahed[otsitava_sona_tahed.length-1]); }
- tekitada muutujad kuvatav_sona ja sona_seis:
- kuvatav_tekst=otsitava_sona_tahed[0].toUpperCase();
- sona_seis=otsitava_sona_tahed[0];
- 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+”_”; }
- kuvatakse lehele otsitav sõna ==> document.getElementById(“sona”).innerHTML=kuvatav_tekst;
- kui on päringu vastus olemas ==> if (xmlhttp.readyState==4 && xmlhttp.status==200)
- määratletakse päringu muutujad:
- muutaja url, mis on failinimi, mida kasutatakse ==> var url = “alglaadimine.php”;
- muutuja params, milleks on valitud keel ==> var params = “keel=”+keel;
- avatakse päring ==> xmlhttp.open(“POST”, url, true);
- määratletakse päringu päis ==> xmlhttp.setRequestHeader(“Content-type”, “application/x-www-form-urlencoded”);
- edastatakse muutuja param ==> xmlhttp.send(params);
Ülejäänud osa funktsioonist algseis jääb samaks, selle erinevusega, et keelevaliku if-else-lausest jäävad välja laused:
var otsitav_sona=”lumelaualaager”;
ja
var otsitav_sona=”snowboardcamp”;
Eelneva tulemusena on funktsiooni algseis sisu järgmine:
function algseis() { if (window.XMLHttpRequest) { // veebilehitsejad IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else { // veebilehitsejad IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { otsitav_sona=xmlhttp.responseText; otsitava_sona_tahed=otsitav_sona.split(""); leitud_tahed.push(otsitava_sona_tahed[0]); if (!leitud_tahed.includes(otsitava_sona_tahed[otsitava_sona_tahed.length-1])) { leitud_tahed.push(otsitava_sona_tahed[otsitava_sona_tahed.length-1]); } kuvatav_tekst=otsitava_sona_tahed[0].toUpperCase(); sona_seis=otsitava_sona_tahed[0]; 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; } } var url = "alglaadimine.php"; var params = "keel="+keel; xmlhttp.open("POST", url, true); xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); xmlhttp.send(params); if (keel=="eesti") { document.getElementById("info").innerHTML="Hakka aga mänguga pihta!"; document.getElementById("tahetekst").innerHTML="Täht:"; document.getElementById("nupp").innerHTML="Proovi"; } else { 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") { //alert(this.value); taheproov(); } }); document.getElementById("pilt").innerHTML='<img src="pilt1.jpg" id="pildisisu">'; document.getElementById("taht").focus(); document.getElementById("taht").select(); }
2.2 otsitava sõna leidmine, ehk fail alglaadimine.php
Failis alglaadimine.php teostatakse järgmised tegevused:
- omistatakse muutujale $keel parameetri $_POST[‘keel’] väärtus ==> $keel=$_POST[‘keel’];
- omistatakse muutujale $failinimi keelevalikust tulenev failinimi (eesti keele puhul sonaraamat_eesti.txt ja inglise keele puhul sonaraamat_english.txt) ==> $failinimi=”sonaraamat_”.$keel.”.txt”;
- avatakse fail lugemiseks nng omistatakse puhver muutujale $handle ==> $handle = fopen($failinimi, “r”);
- loendurile $i omistatakse algväärtus 0 ==> $i=0;
- kui faili sisu on olemas ==> if ($handle)
- loetakse failist andmed rea haaval, kuni ridu jätkub ==> while (($line = fgets($handle)) !== false)
- iga rida, millest on eemaldatud reavahetusmärgid (kasutatakse funktsiooni trim), kirjutatakse massiivi $sonad kohale $i ==> $sonad[$i]=trim($line);
- loendurit $i suurendatakse 1 võrra ==> $i++;
- suletakse fail ==> fclose($handle);
- leitakse juhuslik number (kasutades funktsiooni rand failis leiduvate sõnade arvust – minimaalseks numbriks 0 ja maksimaalseks numbriks $i-1, mis omistatakse muutujale $jrknr ==> $jrknr=rand(0,$i-1);
- kuvatakse massiivis $sonad kohal $jrknr paiknev sõna ==> echo $sonad[$jrknr];
- loetakse failist andmed rea haaval, kuni ridu jätkub ==> while (($line = fgets($handle)) !== false)
- kui faili sisu puudub, kasutatakse sõna lumelaualaager ==> else { echo “lumelaualaager”; }
Fail alglaadimine.php kogu sisu on siis järgmine:
<?php $keel=$_POST['keel']; $failinimi="sonaraamat_".$keel.".txt"; $handle = fopen($failinimi, "r"); $i=0; if ($handle) { while (($line = fgets($handle)) !== false) { $sonad[$i]=trim($line); $i++; } fclose($handle); $jrknr=rand(0,$i-1); echo $sonad[$jrknr]; } else { echo "lumelaualaager"; } ?>