Monday, January 26, 2015

Javaskript kodulehel - joonistamine

Täna proovime teha lehekülje, millele saab joonistada (esialgu küll ainult kindlat kujundit).
Joonistamise jaoks tuleb esmalt luua koht, kuhu joonistada. HTML-is on selleks olemas element nimega <canvas>.
Element tuleb paigutada HTML lehe <body> elementide vahele ning selleks, et Javascript teda kasutada saaks, tuleb talle anda ka nimi (id), antud juhul on nimeks tahvel.

<!DOCTYPE html>
<html>
<head>
    <title>Joonistamine</title>
  
</head>
  <body>
      <h1>Joonistamine</h1>
      <canvas id="tahvel" width="300" height="200"  style="background-color:#FFF8DC"></canvas>
 <br>

    
  </body>
</html>

Avage Notepad ning kopeerige sinna ülalolev kood. Salvesta fail ning anna talle nimeks joonistamine.html
Ava fail veebilehitsejaga (soovitavalt Firefox) ning sul peaks ekraanile tekkima kollakas kast.

Värvikoodi (#FFF8DC) võid endale meeldivamaks muuta, näiteid vaata siit: värvikoodid

Lisame koodi nüüd Javascript-funktsiooni, mis joonistaks värvilisse kastikesse ristküliku.

Selleks tuleb HTLM lehe päisesse <head> ... </head> vahele kirjutada

<script type="text/javascript">

</script>

Skripti tagide vahele lisame funktsiooni "joonista"


function joonista(){

var g=document.getElementById("tahvel").getContext("2d");

g.fillRect(20, 20, 50, 50);

}

Selleks, et lehekülje avanedes kohe ka kastike joonistataks, tuleb HTML koodi <body> osasse lisada

<body onload="joonista()">

Salvesta oma lehekülg ja katseta!

Proovi muuta javaskriptis g.fillRect(20, 20, 50, 50) numbreid. Salvesta ja ava fail veebilehitsejas. Mida märkad?
Esimesed numbrid määravad ära ruudukese kauguse "tahvli" ülemisest vasakust nurgast (mõlemast 20). Järgmised numbrid näitavad kastikese laiust ja kõrgust.

Täiendame oma skripti sellega, et kasutaja saab ise vastavad väärtused lehele lisada ning joonistatakse just selline ruut või ristkülik, nagu kasutaja soovib.

Selleks lisame esmalt HTML koodi <canvas> elemendi alla teksti:

    Sisesta laius x kõrgus<br>    
    <input type="text" id="laius"  value=" " /> x
    <input type="text" id="korgus" value=" " />
    <input type="button" value="Joonista" onclick="joonista()" /> 

body onload="joonista()" kustutame nüüd ära, sest edaspidi hakkab joonistamisfunktsiooni käivitama nupp "joonista".

Salvesta ning testi nupu töötamist!

Nupuvajutuse peale joonistatakse olenemata sisestatud arvudest kujund, mis on määratud HTML lehe päises olevas skriptis!
Selleks, et joonistamisel aluseks võtta kasutaja sisestatud arvud, tuleb skripti veidi muuta.

Esmalt tuleb defineerida muutujad laius ja korgus ehk siis need väärtused, mis sisestab kasutaja
        var laius=parseInt(document.getElementById("laius").value);
        var korgus=parseInt(document.getElementById("korgus").value);         

parseInt käsklus teisendab tekstikasti sisestatud numbrid javascripti jaoks arvudeks.

Edasi tuleb anda käsklus ristküliku/ ruudu joonistamiseks
         g.fillRect(20, 20, laius, korgus);

Funktsioon "joonista" peaks nüüd välja nägema selline:

function joonista(){
var g=document.getElementById("tahvel").getContext("2d");
        var laius=parseInt(document.getElementById("laius").value);
        var korgus=parseInt(document.getElementById("korgus").value);           
        g.fillRect(20, 20, laius, korgus); 
         };

Salvesta oma fail ja katseta!

Ilmselt märkasid, et uute arvude sisestamisel joonistatakse kujund nö vana kujundi peale (suuremaid saab joonistada, aga väiksemaid ei ole näha). Selleks, et enne joonistamist plats puhtaks tehtaks, tuleb lisada joonista funktsiooni sisse ka vastav käsklus

g.clearRect(0, 0, 300, 200);

Puhastamist alustatakse "tahvli" vasakust ülanurgast (0, 0) ning mõõtudeks on "tahvli" mõõtmed (need on kirjeldatud <canvas> elemendi sees).

Kui soovid, et joonistatav ruut oleks mõnda muud värvi, kui must, siis lisa joonistamise funktsiooni veel järgmine rida:

g.fillStyle = "red";

Valmis lehekülg võiks välja näha ja toimida selliselt: http://www.hot.ee/vroosioks/joonistamine.html

Monday, January 19, 2015

Väike Javascripti rakendus kodulehele

Täna proovime teha veebilehekülge, kuhu kasutaja saaks sisestada oma nime ning veebileht tervitaks teda nimepidi.
Esmalt on meil vaja vahendit, et veebilehele saaks midagi sisestada. Selleks on HTML-is olemas kood <input type="sisestatavate väärtuste tüüp, näiteks text teksti puhul või number numbrite puhul" id="viide" />

<div> ... </div> märgendeid kasutame selleks, et määrata lehel erinevate elementide asukoht.

Lehekülje tegemiseks ava arvutis programm Notepad ning võid siit kopeerida ning sinna kleepida alloleva koodi.

<!DOCTYPE html>
<html>
  <head>
     <title>Nimeküsimine</title>
     <script>
    
     </script>
  </head>
  <body>
     <h1>Nimi</h1>
   <div>
  Kirjuta siia oma eesnimi:
      <input type="text" id="eesnimi" />
      <input type="button" value="OK"  />
   </div>
   <div id="vastus">
     Vastuse koht.
   </div>
  </body>
</html>
NB! Salvestamisel vali failitüübiks "All files"  ning anna failile nimeks nimi.html

Edasi tuleb programmile teada anda, et me tahaksime "Vastuse kohale" kirjutada tervituse.
Lisa oma Notepadi programmi <script> ... </script> vahele järgmised read:
function tervita(){ document.getElementById("vastus").innerHTML="Tere"; }
Nüüd on vaja kusagil see funktsioon ka nö välja kutsuda. Selleks lisage <input type="button" value="OK" /> sisse onclick="tervita();"
<input type="button" value="OK" onclick="tervita();" /> 
Salvesta oma programm ning ava see veebilehitsejaga. Sisesta oma nimi ning klõpsa nupul OK.

Hetkel kuvab programm ainult tervituse.
Kui soovime sellele lisada veel ka nime, mille kasutaja sisestas, siis tuleb funktsiooni tervita() täiendada ning lisada sellele "eesnimi" välja väärtus (value).

document.getElementById("eesnimi").value 
 Funktsioon tervita() võiks nüüd välja näha selline:

document.getElementById("vastus").innerHTML= "Tere, "+document.getElementById("eesnimi").value;

Ülesanne
* Loo ekraanile kaks tekstivälja: üks eesnime, teine perekonnanime jaoks. Tervita kasutajat mõlemat nime pidi.
* Muuda oma valmis programmi nii, et nime asemel saaksid sisestada näiteks pikkuse sentimeetrites ning see arvutatakse ümber meetriteks.

Töölehe koostamisel on aluseks võetud Jaagup Kippar'i õppematerjal: http://minitorn.tlu.ee/~jaagup/oma/too/13/kliendirakendused/juht.html



Monday, January 5, 2015

CodeCombat - mäng Javascripti õppimiseks!

http://codecombat.com/

Mänguga tutvumiseks ei ole vaja kasutajat teha, aga kui soovid siiski mängu kaudu Javascripti õppida, siis oleks kasutajakonto loomine vajalik - muidu tuleb iga kord algusest alustada ning kõik saavutatud oskused uuesti oma tegelasele kätte "võidelda". Kontot saab luua töötavad meiliaadressiga, aga ka Google ning Facebooki konto kaudu (sisselogimisel kasuta siis neid kontosid).


Mäng on üsna sarnana tavalistele arvutimängudele, kus tuleb koguda varandust (siin teemante) ja võidelda vaenlastega (siin on ka mingid kollid), tegelasele saab kogutud varanduse eest abivahendeid osta, mis muudavad ta tugevamaks, aga annavad juurde ka uusi oskuseid.
Erinev on see, et tegelase tegevus (liikumine, rünnakud jms) tuleb kasutajal endal programmeerida.

Mängu alguses on võimalus valida, millises keeles soovid programmi kirjutada. Meie kursusega haakub valik "javascript".


Tegelase valimisel saad kasutada neid, mis ei ole lukus. 
Edasi näed mänguvälja, kus punased nupud tähistavad ülesandeid, mida välja läbimiseks täitma pead. (Sinisega nupud on tasulise versiooni ülesandeid ja neid tasuta mängida ei saa). Nuppe ilmub järjest juurde, vastavalt tegelase edenemisele (ehk siis ülesanded tuleb järjest läbida).

Mängu alustamiseks tuleb teha punasel nupul topeltklõps.
Edasi saab oma tegelasele lisada abivahendeid. Osa on nö kohustuslikud, ehk need tuleb edasi mängimiseks kindlasti tegelasele lisada. Nendele viitab ka tavaliselt kollane nool. 
Teised abivahendid on need, mida saab kogutud teemantite eest osta.
Abivahendid annavad tegelasele juurde oskusi või tugevust. Näiteks saapad lubavad tegelasel liikuda, vastavad liikumiskäsud kuvatakse ka mänguväljal "Help" kastis.
Mänguväljal tuleb programmikasti kirjutada käskluseid. Üleval vasakus nurgas on näha ülesanne, paremale kasti tuleb kirjutada tegelase liikumiseks vajalik kood. Kui kood on valmis, siis tuleb klõpsata nupul "Run". Kui kõik õnnestub, siis kuvatakse "Run" nupu kõrval nupp kirjaga "Done" ja sellel klõpsates saad preemia kogutud teemantite eest ning punkte programmi läbimise eest. Juhul kui programm on vale, siis edasi ei pääse.
Kui tegelane "surma saab", siis on alati võimalus otsast peale alustada ning uuesti teha seni, kuni saab taseme läbitud.

Kiiret täitmist nõudvate ülesannete puhul ("kollid" ründavad vms) saab mängu peatada.





While tsükkel

While tsükkel sobib kasutamiseks siis, kui tsükli täitmine sõltub mingist muust tingimusest. Näiteks tuleb nii kaua täringut veeretada, kuni tulemuseks on 6.

while(tingimus kehtib)
{
// Tee kirjeldatud tegevust!
}

While-tsükli puhul on aga üks oht! Nimelt kui tingimus ongi kogu aeg kehtiv, siis tekib nn lõputu tsükkel ja programm jookseb kinni.
Selleks tuleb alati jälgida, et while-tsükli sulgudes olevat tingimust oleks võimalik muuta!

Do - while tsükkel

Juhul, kui tsüklit on vaja vähemalt 1 kord täita, siis saab kasutada Do - while kombinatsiooni.

Näiteks allolev tsükkel töötab seni, kuni k väärtus on väiksem kui 12 - antud juhul prindib konsoolile arvud 8, 9, 10, 11, 12

var k=8;
do {
         console.log(k);
         k=k+1;
     }
while(k<12);