start     Articole     Despre mine    

apasa butonul potrivit

Sunt foarte incantat! Azi vom face poate cel mai spectaculos pas catre construirea unui joc.

Pana aici am parcurs impreuna in lectiile trecute conceptele fundamentale pe care oricine isi doreste sa devina programator trebuie sa le stapaneasca intr-un mod personal. Am vorbit despre instructiuni, despre variabile, despre instructiunea daca, despre instructiunea cat timp, despre vectori si matrici, despre functii si despre operatori.

Imbinand in moduri ingenioase toate cunostintele si abilitatile deprinse pana acum iti poti construi propriul joc. Da, ai (aproape) tot ce iti trebuie!

Mai lipseste doar un aspect. Un aspect simplu, dar fara de care n-am fi putut vorbi niciodata de jocuri pe calculator. Este vorba despre interactivitate.

Si cum putem asigura aceasta interactivitate altfel decat lasand utilizatorului programului nostru posibilitatea de a da comenzi programului? (Altfel am putea programa doar poze sau cel mult filme, si nicidecum jocuri.)

Cum cea mai utilizata metoda de a interactiona cu calculatorul este (inca) tastatura, iti voi arata in lectia de azi cum iti poti face programul sa raspunda asa cum doresti la apasarea anumitor taste.

Lectia va fi una scurta, insa intelegerea ei pe deplin va necesita exercitiu din partea ta.

 

Hai sa vedem acum cum putem sa ii spunem calculatorului nostru virtual ce sa faca atunci cand se apasa o tasta.

La prima vedere lucrurile sunt un pic mai complicate, caci imbina practic majoritatea informatiilor de pana aici. Insa daca lectiile trecute nu ti-au pus probleme, nici aceasta nu o va face.

In momentul in care calculatorul detecteaza apasarea unei taste el apeleaza in mod automat o functie care a fost specificata in acest sens. In cadrul acelei functii se citeste tasta care a fost apasata si se specifica modul in care calculatorul trebuie sa reactioneze la acest eveniment.

In paragraful anterior an rezumat intreaga lectie.

Hai sa-l reparcurgem pas cu pas si sa detaliem acolo unde e cazul.

La apasarea vreunei taste calculatorul apeleaza in mod automat o functie specificata de noi. Buuun! E foarte bine ca se ocupa el in mod automat de treaba asta. Mai ramane sa vedem (1) cum ii putem spune ce functie sa apeleze si (2) ce caracteristici trebuie sa aiba aceasta functie.

Cat priveste (1), raspunsul consta in functia predefinita AscultaTaste. Numele ii e destul de sugestiv, nu? Aceasta functie asteapta ca parametru numele unei functii care sa contina functionarea dorita in cazul apasarii tastelor. Prin urmare, in program o vom apela in felul urmator:

AscultaTaste(FunctieTaste)

In loc de FunctieTaste pot folosi orice nume valid de functie. Singura constrangere este (si cu asta raspund la intrebarea (2)) ca aceasta functie trebuie sa primeasca un parametru. In acest parametru calculatorul (care, repet, va apela in mod automat functia FunctieTaste) va pune informatii despre evenimentul care s-a produs (adica apasarea tastei).

Sa zicem ca denumim ev (de la eveniment) parametrul functiei FunctieTaste. Prin urmare, definitia ei va arata in felul urmator:

function FunctieTaste(ev)
{
       // instructiunile din cadrul functiei,
       //  ce vor fi executate in mod automat
       //  la fiecare apasare de tasta detectata.
       …
}

Evident, asa cum am zis mai sus, simpla definitie a acestei functii nu este suficienta pentru ca programul sa raspunda la apasarea tastelor. Este necesar ca dupa ce definesc aceasta functie sa-i spun calculatorului ca pe ea doresc sa o apeleze atunci cand detecteaza vreo tasta apasata. Cum fac asta? Am spus mai sus: prin apelul AscultaTaste(FunctieTaste).

Bun. Aproape am terminat.

Ramane doar sa vedem ce scriem in cadrul functiei FunctieTaste.

Pai n-ar trebui sa fie prea greu, nu? Doar avem parametrul ev, in care ni se trasmit (in mod automat) informatii despre evenimentul care s-a produs.

Da, chiar nu e greu. Singura mica problema e ca in ev nu ni se spune direct ce tasta a fost apasata. Dar nu e grav, caci avem la dispozitie functia predefinita TastaApasata, care face exact acest lucru. Primeste ca parametru variabila ev si returneaza tasta ce a fost apasata, in format literal.

Practic, daca la inceputul functiei FunctieTaste scriem:

       var tasta = TastaApasata(ev)

in variabila tasta vom avea memorata in format literal tasta ce a fost apasata.

OK, dar ce e cu formatul asta literal? Pana aici in variabile am memorat doar numere.

Ei bine, in variabile se pot memora si caractere (litere). (De fapt, la nivel intern tot cu numere se lucreaza, fiecarui caracter de pe tastatura corespunzandu-i un cod numeric. Insa pentru programator este mai simplu sa lucreze cu caractere.)

Aceste caractere trebuie puse intre apostrofuri. De exemplu, caracterul corespunzator apasarii tastei A este 'a' (iar 'A' corespunde apasarii combinatiei de taste SHIFT+A).

Asadar, daca doresc sa verific daca s-a apasat tasta A pot scrie in program (in cadrul functiei FunctieTaste, bineinteles, si presupunand ca in variabila tasta am tasta apasata) o conditie de genul urmator:

if (tasta == 'a')
{
       // instructiuni ce trebuie executate daca s-a
       //  apasat tasta A
       …
}

Cam asta e. Acum e timpul sa punem cap la cap tot ce am zis pana aici si sa facem un mic program demonstrativ.

 

Hai sa facem un program in care sa plimbam pe ecranul virtual un punct cu ajutorul tastelor A (stanga), S (jos), D (dreapta) si W (sus).

Si ca lucrurile sa fie mai interesante, as propune ca punctul sa fie rosu daca ne gasim in centrul ecranului (considerand centru in acest caz patratul cu coltul stanga-jos la coordonatele (3, 3) si coltul dreapta-sus la coordonatele (8, 8)), si sa fie negru in caz contrar (deci pe primele doua linii din marginile ecranului virtual).

Fara alte comentarii preliminare, iata programul:

// Program deplasare punct din taste
// 1) Initializari:
var x = 1
var y = 1
Aprinde(x, y)
// 2) Functia de tratare a apasarii tastelor:
function FunctieTaste(ev)
{
      var tasta = TastaApasata(ev)
      Stinge(x, y)
      if ( (tasta == 'a') && (x > 1) )
      {
             x = x-1
      }
      if ( (tasta == 'd') && (x < 10) )
       {
              x = x+1
      }
      if ( (tasta == 's') && (y > 1) )
      {
             y = y-1
      }
      if ( (tasta == 'w') && (y < 10) )
       {
              y = y+1
       }
       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )
      {
             Aprinde(x, y, ROSU)
      }
      else
      {
             Aprinde(x, y)
      }
}
AscultaTaste(FunctieTaste)

Il poti testa mai jos.

(Browserul tau nu suporta Canvas!…)

N-a fost chiar greu, nu? Dupa cum ai vazut, programul contine in esenta doua parti: 1) o parte de initializari (in care nu fac altceva decat sa definesc doua variabile (x si y) in care voi memora coordonatele curente ale punctului pe ecran, coordonate pe care le initializez cu (1, 1) (deci punctul stanga-jos al ecranului), si sa aprind (cu negru) punctul de la coordonatele (x, y)) si 2) o parte in care spun calculatorului ce sa faca atunci cand se apasa vreo tasta.

Si daca intram in detaliile functiei FunctieTaste vei vedea ca si acolo lucrurile sunt destul de clare. Mai intai aflu ce tasta a fost apasata, apoi sting punctul de la coordonatele (x, y), dupa care verific daca a fost apasata vreuna dintre tastele A, S, D sau W si modific in mod corespunzator coordonata x sau y (verificand, de asemenea, ca punctul sa nu iasa in afara ecranului). Iar la final aprind punctul de la coordonatele (x, y) (care probabil au fost modificate) fie cu rosu, fie cu negru (in functie de pozitia in care se gaseste punctul pe ecran).

Ca exercitiu te-as ruga sa modifici programul astfel incat elementul care se plimba pe ecran sa nu mai fie doar un punct, ci un mic patratel format din 4 puncte. Ce zici? Accepti provocarea?

Stiu ca nu e usor, dar daca chiar iti doresti sa programezi un joc trebuie sa-ti pui creierul in miscare. (Doare doar putin. Apoi devine chiar placut 🙂 .)

 

 

Abia asteptand sa-ti citeasca reactiile,

Florin Bîrleanu





50 comments
Florea Calin
Florea Calin

var x=NrAleator(9)+1

var y=NrAleator(9)+1

if(x==10)

{

x=9}

if(y==10)

{

  y=9

}




Aprinde(x,y)

Aprinde(x+1,y)

Aprinde(x,y+1)

Aprinde(x+1,y+1)




function FunctieTaste(ev)

  Stinge(x,y)

Stinge(x+1,y)

Stinge(x,y+1)

Stinge(x+1,y+1)



  var tasta= TastaApasata(ev)

  if((tasta=="w")&&(y<9))

  {

    y=y+1

  }

   if((tasta=="s")&&(y>1))

  {

    y=y-1

  }

   if((tasta=="a")&&(x>1))

  {

    x=x-1

  }

   if((tasta=="d")&&(x<9))

  {

    x=x+1

  }

Aprinde(x,y)

Aprinde(x+1,y)

Aprinde(x,y+1)

Aprinde(x+1,y+1)


     }

     AscultaTaste (FunctieTaste)


alexmod
alexmod

in sfarsit i-am dat de cap :)

am pornit pe ideea de a modifica doar "x" si automat sa modifice si "a" de aceea am inceput cu a=x+1, insa nu am reusit sa imi duc ideea pana la capat si in functie pe langa x=x-1 ... etc a trebuie sa pun si a=a-1


daca ma poti ajuta cum trebuia sa fac ti-as ramane recunoscator !



// Program deplasare punct din taste

// 1) Initializari:

var x=1

var a=x+1

var y=2

var b=y-1

Aprinde(x,y)

Aprinde(a,y)

Aprinde(x,b)

Aprinde(a,b)

// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev)

      Stinge(x, y)

      Stinge(a, y)

      Stinge(x, b)

      Stinge(a, b)

      if ( (tasta == 'a') && (x > 1) )

       {

             x = x-1

             a = a-1

      }

      if ( (tasta == 'd') && (a < 10) ) 

       {

              x = x+1

              a = a+1

      }

      if ( (tasta == 's') && (b > 1) )

      {

             y = y-1

             b = b-1

      }

      if ( (tasta == 'w') && (y < 10) ) 

       {

              y = y+1 

              b = b+1

       }

       if ( (x>=5)&&(y>=6)&&(a<=6)&&(b<=5) )

      {

             Aprinde(x, y, ROSU)          

             Aprinde(a, y, ROSU)

             Aprinde(x, b, ROSU)

             Aprinde(a, b, ROSU)


      }

      else

      {

             Aprinde(x,y)

             Aprinde(a,y)

             Aprinde(x,b)

             Aprinde(a,b)


      }

}

AscultaTaste(FunctieTaste)

Florin Birleanu
Florin Birleanu moderator

@alexmod Cand construiesti o variabila numita "a", prin instructiunea "a=x+1" in variabila "a" se va pune valoarea care era la acel moment in variabila "x", plus 1. Nu poti, deci, lega astfel variabila a de variabila x.


Insa expresia "x+1" este "legata" de valoarea lui "x". Cand "x" se schimba, si rezultatul expresiei "x+1" se schimba, nu? :-)


Asa ca poti scrie:


Aprinde(x, y); 

Aprinde(x+1, y); 

... etc.

Lix Ionut
Lix Ionut

Program:


var x1,y1,x2,y2
  x1=1
    y1=1
    x2=2
    y2=2
Aprinde(x1, y1)
Aprinde(x1, y2)
Aprinde(x2, y1)
Aprinde(x2, y2)




function FunctieTaste(ev)
{     
      var tasta = TastaApasata(ev)
      Stinge(x1, y1)
      Stinge(x1, y2)
      Stinge(x2, y1)
      Stinge(x2, y2)
      
            
      
      if ( (tasta == 'a') && (x1 > 1) && (x2 > 2) )
      {
             x1= x1-1
             x2= x2-1
      }
      if ( (tasta == 'd') && (x1 < 9) && (x2 < 10) )
       {
                    
              x1 = x1+1
              x2 = x2+1
              
              
              
      }
      if ( (tasta == 's') && (y1 > 1) && (y2 > 2) )
      {
             y1 = y1-1
             y2 = y2-1
      }
      if ( (tasta == 'w') && (y1 < 9) && (y2 < 10) )
       {
              y1 = y1+1
              y2 = y2+1
       }
      if ( (x2>=5)&&(y2>=5)&&(x1<=6)&&(y1<=6) )
      {
             Aprinde(x1, y1, ROSU)
             Aprinde(x1, y2, ROSU)
             Aprinde(x2, y1, ROSU)
             Aprinde(x2, y2, ROSU)
      }      
      else
      {
             Aprinde(x1, y1)
             Aprinde(x1, y2)
             Aprinde(x2, y1)
             Aprinde(x2, y2)
             
      }
}
AscultaTaste(FunctieTaste)

L-am facut sa schimbe culoarea doar daca intra in patratul din centru ( cele 4 puncte din centru). M-am cam complicat putin cu x1,x2,y1,y1 doar asa am putut so gandesc.

Florin Birleanu
Florin Birleanu moderator

@Lix Ionut Daca tot ti-ai dat seama ca te-ai complicat putin, ar fi o idee buna sa incerci sa simplifici programul astfel incat sa fie mai usor de inteles. :-)

culi1602
culi1602

Codul meu:


// Program deplasare punct din taste

// 1) Initializari:

var x = 1

var y = 1

Aprinde(x, y)

Aprinde(x+1, y)

Aprinde(x, y+1)

Aprinde(x+1, y+1)



// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev)

      Stinge(x, y)

      Stinge(x+1, y)

      Stinge(x, y+1)

      Stinge(x+1, y+1)

      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1


      }

      if ( (tasta == 'd') && (x < 9) ) 

       {

              x = x+1

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1

      }

      if ( (tasta == 'w') && (y < 9) ) 

       {

              y = y+1 

       }

       if ( (x>=3)&&(y>=3)&&(x<=7)&&(y<=7) )

      {

             Aprinde(x, y, ROSU)

 Aprinde(x+1, y, ROSU)

Aprinde(x, y+1, ROSU)

Aprinde(x+1, y+1, ROSU)



      }

      else

      {

             Aprinde(x, y)

Aprinde(x+1, y)

Aprinde(x, y+1)

Aprinde(x+1, y+1)

      }

}

AscultaTaste(FunctieTaste)


si daca in conditia lui if: if((x>=3)&&(y>=3)&&(x<=7)&&(y<=7)) am pune in loc de 3, 2 si in loc de 7, 8 patratul ar fi negru doar cind ar avea o fata lipita de marginea careului de 10/10



Ciprian123
Ciprian123

// Program deplasare punct din taste
// 1) Initializari:
var x = 1
var y = 1
var x2= x+1
var y2= y+1
Aprinde(x, y)
Aprinde(x,y2)
Aprinde(x2,y)
Aprinde(x2,y2)
// 2) Functia de tratare a apasarii tastelor:
function FunctieTaste(ev)
{
    var tasta = TastaApasata(ev)
      Stinge(x, y)
      Stinge(x,y2)
      Stinge(x2,y)
      Stinge(x2,y2)
      if ( (tasta == 'a') && (x > 1) && (x2 > 2) )
      {
             x = x-1
             x2= x2-1
      }
      if ( (tasta == 'd') && (x < 9) && (x2 <10) )
       {
              x = x+1
              x2= x2+1
      }
      if ( (tasta == 's') && (y > 1) && (y2 >2 ) )
      {
             y = y-1
             y2= y2-1
      }
      if ( (tasta == 'w') && (y < 9) && (y2 <10) )
      {
              y = y+1
              y2= y2+1
      }
             Aprinde(x, y)
             Aprinde(x,y2)
             Aprinde(x2,y)
             Aprinde(x2,y2)
      }
AscultaTaste(FunctieTaste)

Probabil avea mai mult sens daca foloseam x+1 si y+1 in loc de  x2 si y2

Florin Birleanu
Florin Birleanu moderator

@Ciprian123 Da, puteai folosi x+1 i y+1 in loc de x2 si y2. Si o alta observatie: in "if"-uri nu era necesar sa mai pui si conditiile cu x2 si y2 (caci ele oricum mereu sunt cu 1 mai mari decat x, respectiv y -- deci daca, de exemplu, x > 1, e evident ca si x2 > 2. :-)

Marin Constantin
Marin Constantin

// Program deplasare patrat din taste

// 1) Initializari:

x=1

y=1

Aprinde(x,y)

Aprinde(x, y+1)

Aprinde(x+1, y)

Aprinde(x+1,y+1)

// Functia de tratare a apasarii tastelor

function FunctieTaste(ev)

{

var tasta = TastaApasata(ev)

Stinge(x, y);

Stinge(x, y+1);

Stinge(x+1, y);

Stinge(x+1, y+1);

if ( (tasta == 'a') && (x > 1) )

{

x = x-1

}

if ( (tasta == 'd') && (x < 9) )

{

x = x+1

}

if ( (tasta == 's') && (y > 1) )

{

y = y-1

}

if ( (tasta == 'w') && (y < 9) )

{

y = y+1

}

if ( (x>=3)&&(y>=3)&&(x<=7)&&(y<=7) )

{

Aprinde(x, y, ROSU)

Aprinde(x,y+1, ROSU)

Aprinde(x+1, y, ROSU)

Aprinde(x+1,y+1, ROSU)

}

else

{

Aprinde(x,y)

Aprinde(x,y+1)

Aprinde(x+1,y)

Aprinde(x+1,y+1)

}

}

AscultaTaste(FunctieTaste)

JrJunioru
JrJunioru

// Program deplasare punct din taste

// 1) Initializari:

var x = 1

var y = 1

var x1 = 2

var y1 = 2

var x2 = 2

var y2 = 1

var x3 = 1

var y3 = 2

Aprinde(x, y)

Aprinde(x1, y1)

Aprinde(x2, y2)

Aprinde(x3, y3)

// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev)

      Stinge(x, y)

      Stinge(x1, y1)

      Stinge(x2, y2)

      Stinge(x3, y3)

      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1

             x1 = x1-1

             x2 = x2-1

             x3 = x3-1

      }

      if ( (tasta == 'd') && (x < 10) ) 

       {

              x = x+1

              x1 = x1+1

              x2 = x2+1

              x3 = x3+1

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1

             y1 = y1-1

             y2 = y2-1

             y3 = y3-1

      }

      if ( (tasta == 'w') && (y < 10) ) 

       {

              y = y+1 

              y1 = y1+1

              y2 = y2+1

              y3 = y3+1

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU)

             Aprinde(x1, y1, ROSU)

             Aprinde(x2, y2, ROSU)

             Aprinde(x3, y3, ROSU)

      }

      else

      {

             Aprinde(x, y)

             Aprinde(x1, y1)

             Aprinde(x2, y2)

             Aprinde(x3, y3)

      }

}

AscultaTaste(FunctieTaste)

Ai dorit un patratel am facut un patratel .. daca se poate face si mai scurt spune-mi iar eu o sa incerc sa-l optimizez..

Florin Birleanu
Florin Birleanu moderator

@JrJunioru (1) E OK. Are doar o mica problema: iese putin in afara ecranului de 10x10 in dreapta si in sus. :-) 


(2) Se putea simplifica un pic programul daca scriai ceva de genul:


Aprinde(x, y)

Aprinde(x, y+1)

Aprinde(x+1, y)

Aprinde(x+1, y+1)


Mult spor in continuare! :-)

Traian Antonovici
Traian Antonovici

si ce limbaj de programare este cel folosit pe site, suna ca un pseudocod:)


Traian Antonovici
Traian Antonovici

cum putem folosi code blocks de exemplu pentru a crea un joc ?


Andrei Popa
Andrei Popa

Salutari!

Am facut un joc labirint cu urmatoarele reguli, daca atingi peretii reiei jocul iar daca ajungi pe patratelul turcoaz castigi.

Have fun!


var x,y,tasta;

function RESET()

{

x=1;

  while(x<=10)

  {

    y=1;

    while(y<=10)

    {

      Aprinde(x,y,ALB);

      y=y+1;

    }

    x=x+1;

  }

}

x=y=1;

Aprinde(1,10);Aprinde(2,10);Aprinde(3,10);Aprinde(5,9);Aprinde(6,9);

Aprinde(7,9);Aprinde(8,9);Aprinde(9,9);Aprinde(10,9);Aprinde(2,8);

Aprinde(3,8);Aprinde(4,8);Aprinde(6,7);Aprinde(7,7);Aprinde(8,7);

Aprinde(9,7);Aprinde(1,6);Aprinde(2,6);Aprinde(3,6);Aprinde(4,6);

Aprinde(5,6);Aprinde(9,6);Aprinde(7,5);Aprinde(2,4);Aprinde(3,4);

Aprinde(4,4);Aprinde(5,4);Aprinde(6,4);Aprinde(7,4);Aprinde(8,4);

Aprinde(9,4);Aprinde(8,3);Aprinde(1,2);Aprinde(2,2);Aprinde(3,2);

Aprinde(4,2);Aprinde(5,2);Aprinde(6,2);Aprinde(8,2);Aprinde(10,2);

Aprinde(8,1);Aprinde(10,1);

Aprinde(x,y,ROSU);

Aprinde(10,10,TURCOAZ);

function buton(ev)

{

  tasta=TastaApasata(ev);

  Stinge(x,y);

  if((tasta=='a')&&(x>1)) { x=x-1; }

  if((tasta=='d')&&(x<10)) { x=x+1; }

  if((tasta=='s')&&(y>1)) { y=y-1; }

  if((tasta=='w')&&(y<10)) { y=y+1; }

  if((x<=10)&&(y<=10)) { Aprinde(x,y,ROSU); }

  if((x==8)&&(y==1)) { Aprinde(x,y); x=1; y=1; }

  if((x==10)&&(y==1)) { Aprinde(x,y); x=1; y=1; }

  if((x==8)&&(y==2)) { Aprinde(x,y); x=1; y=1; }

  if((x==10)&&(y==2)) { Aprinde(x,y); x=1; y=1; }

  if((x<=6)&&(y==2)) { Aprinde(x,y); x=1; y=1; }

  if((x==8)&&(y==3)) { Aprinde(x,y); x=1; y=1; }

  if((x!=1)&&(x!=10)&&(y==4)) { Aprinde(x,y); x=1; y=1; }

  if((x==7)&&(y==5)) { Aprinde(x,y); x=1; y=1; }

  if((x<=5)&&(y==6)) { Aprinde(x,y); x=1; y=1; }

  if((x==9)&&(y==6)) { Aprinde(x,y); x=1; y=1; }

  if((x==6)&&(y==7)) { Aprinde(x,y); x=1; y=1; }

  if((x==7)&&(y==7)) { Aprinde(x,y); x=1; y=1; }

  if((x==8)&&(y==7)) { Aprinde(x,y); x=1; y=1; }

  if((x==9)&&(y==7)) { Aprinde(x,y); x=1; y=1; }

  if((x==2)&&(y==8)) { Aprinde(x,y); x=1; y=1; }

  if((x==3)&&(y==8)) { Aprinde(x,y); x=1; y=1; }

  if((x==4)&&(y==8)) { Aprinde(x,y); x=1; y=1; }

  if((x>=5)&&(y==9)) { Aprinde(x,y); x=1; y=1; }

  if((x<=3)&&(y==10)) { Aprinde(x,y); x=1; y=1; }

  if((x==10)&&(y==10))

  {

    RESET();

    Aprinde(1,8);Aprinde(2,8);Aprinde(3,8);Aprinde(4,8);Aprinde(7,8);

    Aprinde(8,8);Aprinde(9,8);Aprinde(10,8);Aprinde(1,7);Aprinde(4,7);

    Aprinde(7,7);Aprinde(10,7);Aprinde(1,6);Aprinde(7,6);Aprinde(1,5);

    Aprinde(3,5);Aprinde(4,5);Aprinde(7,5);Aprinde(9,5);Aprinde(10,5);

    Aprinde(1,4);Aprinde(4,4);Aprinde(7,4);Aprinde(10,4);Aprinde(1,3);

    Aprinde(2,3);Aprinde(3,3);Aprinde(4,3);Aprinde(7,3);Aprinde(8,3);

    Aprinde(9,3);Aprinde(10,3);

  }

}

AscultaTaste(buton);

@Florin Birleanu Am un soi de intrebare, crezi ca as putea sa il fac pe niveluri?

Am incercat de nenumarate ori dar mi se blocheaza programul cand incerc sa introduc codul pentru un al doilea nivel, nu stiu unde mai exact sa il introduc. Mersi anticipat! :-D

MihaiBarbu3
MihaiBarbu3

Salut!

Eu am inteles tot mai putin AscultaTaste(FunctieTaste) de la final si am testat si fara ea nu se misca punctul cand apas o tasta si nu inteleg de ce, poti sa imi expliti?


Florin Birleanu
Florin Birleanu moderator

@MihaiBarbu3 Din mesajul tau inteleg ca nu ti-a pus probleme intelegerea constructiei lui "FunctieTaste". Functia numita de mine "FunctieTaste" in programul de mai sus nu este o functie predefinita recunoscuta de limbaj, ci este o functie pe care am construit-o acum in program si in ea am verificat ce tasta s-a apasat si am reactionat ca atare. E OK pana aici?


Mai ramane o singura problema: De unde sa stie calculatorul ca atunci cand se apasa vreo tasta de pe tastatura trebuie sa apeleze functia "FunctieTaste"? Raspuns: Nu stie! Dar daca apelez functia "AscultaTaste" si ii dau ca parametru pe "FunctieTaste" -- adica scriu in program AscultaTaste(FunctieTaste) -- ii spun practic calculatorului "de fiecare daca cand se apasa vreo tasta, apeleaza-mi functia FunctieTaste, construita de mine".


S-a mai lamurit vreun pic neclaritatea?

MihaiBarbu3
MihaiBarbu3

@Florin Birleanu Mai am o intrebare, de ce nu merge:

var y=1

var x=1

Aprinde(x,y)

function FT(ev)

{

var tasta = AT(ev)

Stinge(x,y)

if ( (tasta == 'a') ) && (x > 1)

{

x=x-1

}

if ( (tasta == 'w') ) && (y < 10)

{

  y=y+1

}

if ( (tasta == 's') ) && (y > 1)

{

  y=y-1

}

  if ( (tasta == 'd') ) && (x < 10)

  {

    x=x+1

  }

  if ( (tasta == 'e') ) && (y < 10)

    && (x < 10)

  {

    x=x+1

    y=y+1

  }

  if ( (tasta == 'q') ) && (x > 1)

    && (y < 10)

  {

    x=x-1

    y=y+1

  }

}

AT(FT)

Florin Birleanu
Florin Birleanu moderator

@MihaiBarbu3 @Florin Birleanu Programelul tau merge, doar ca:

(1) In "var tasta = AT(ev)" <-- cine e AT? (Trebuia sa folosesti functia predefinita TastaApasata, asa cum am scris in articol)

(2) La final de tot, in "AT(FT)" <-- cine e AT? (Trebuia sa folosesti functia predefinita AscultaTaste, asa cum am scris in articol :-); da stiu ca ma repet)

(3) In conditiile de la toate if-urile tale ai o problema cu echilibrarea parantezelor. Adica: ai grija ca numarul parantezelor deschise sa fie egal cu numarul parantezelor inchise, si, de asemenea, intreaga conditie trebuie sa se gaseasca intre paranteze.

(4) Imediat inainte de finalul functiei FT trebuie sa apelezi Aprinde(x, y) (<-- caci altfel punctul iti dispare de pe ecran (din cauza apelului functiei Stinge(x, y), de mai sus) si ai impresia ca programul nu face nimic)


Daca faci aceste modificari vei avea surpriza sa constati ca programul merge fain. Imi place ideea de deplasare pe diagonale in sus! :-)

CorinaM
CorinaM

Buna, Florin! Iata solutia mea! :)


//program deplasare patrat din taste


var x1 = 1

var y1 = 1

var x2 = 2

var y2 = 2

Aprinde(x1,y1)

Aprinde(x2,y2)

Aprinde(x1,y2)

Aprinde(x2,y1)

// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev)

      Stinge(x1, y1)

      Stinge(x2, y2)

      Stinge(x1,y2)

      Stinge(x2,y1)

      if ( (tasta == 'a') && (x1 > 1)&&(x2 > 2) )

      {

             x1 = x1-2

             x2 = x2-2

      }

      if ( (tasta == 'd') && (x1 < 10)&&(x2 < 9) )

       {

              x1 = x1+2

              x2 = x2+2

      }

      if ( (tasta == 's') && (y1 > 1)&&(y2 > 2) )

      {

             y1 = y1-2

             y2 = y2-2

      }

      if ( (tasta == 'w') && (y1 < 10)&&(y2 < 9) ) 

       {

              y1 = y1+2

              y2 = y2+2

       }

    Aprinde(x1,y1)

    Aprinde(x2,y2)

    Aprinde(x1,y2)

    Aprinde(x2,y1)  

}

AscultaTaste(FunctieTaste)


Florin Birleanu
Florin Birleanu moderator

@CorinaM Foarte fain! :-)


O indicatie de optimizare: Puteai folosi in loc de patru variabile doar doua. Iti dai seama cum? :-)

CorinaM
CorinaM

@Florin Birleanu @CorinaM Asa, nu?

//program deplasare patrat din taste


var x1 = 1

var y1 = 1

Aprinde(x1,y1)

Aprinde(x1+1,y1+1)

Aprinde(x1,y1+1)

Aprinde(x1+1,y1)

// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

  var tasta = TastaApasata(ev)

      Stinge(x1, y1)

      Stinge(x1+1, y1+1)

      Stinge(x1,y1+1)

      Stinge(x1+1,y1)

      if ( (tasta == 'a') && (x1 > 1) )

      {

             x1 = x1-2

      }

      if ( (tasta == 'd') && (x1 < 10) )

       {

              x1 = x1+2

       }

      if ( (tasta == 's') && (y1 > 1) )

      {

             y1 = y1-2

      }

      if ( (tasta == 'w') && (y1 < 10) ) 

       {

              y1 = y1+2

       }

    Aprinde(x1,y1)

    Aprinde(x1+1,y1+1)

    Aprinde(x1,y1+1)

    Aprinde(x1+1,y1)  

}

AscultaTaste(FunctieTaste)


Iti cer si eu un sfat: Ce sa invat mai departe. Unii spun ca html, apoi php, apoi C... Sunt putin dezorientata :) Multumesc pentru sfaturi. Cursul a fost super! O sa mai scotocesc pe aici. :)


Catalin Puricoi
Catalin Puricoi

Cam asta e cu programul. Cred ca pot sa il fac mai usor si o sa incerc. Am cateva intrebari despre site si limbajul de programare putem vorbi? 

// Program deplasare punct din taste

// 1) Initializari:

var x = 1

var y=1

Aprinde(x,y)

  Aprinde(x+1,y)

  Aprinde(x,y+1)

  Aprinde(x+1,y+1)

// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

      var tasta = TastaApasata(ev)

      Stinge(x,y)

  Stinge(x+1,y)

  Stinge(x,y+1)

  Stinge(x+1,y+1)

      if ( (tasta == 'a') && (x > 1 ))

      {

        x=x-1;

        Aprinde(x,y)

  Aprinde(x+1,y)

  Aprinde(x,y+1)

  Aprinde(x+1,y+1)

      }

      if ( (tasta == 'd') && (x < 9) ) 

       {

         x=x+1;

             Aprinde(x,y)

  Aprinde(x+1,y)

  Aprinde(x,y+1)

  Aprinde(x+1,y+1)

       }

      if ( (tasta == 's') && (y > 1) )

      {

        y=y-1;

             Aprinde(x,y)

  Aprinde(x+1,y)

  Aprinde(x,y+1)

  Aprinde(x+1,y+1)

      }

      if ( (tasta == 'w') && (y < 9) ) 

       {

         y=y+1;

              Aprinde(x,y)

  Aprinde(x+1,y)

  Aprinde(x,y+1)

  Aprinde(x+1,y+1)

      }

}

AscultaTaste(FunctieTaste)

Catalin Puricoi
Catalin Puricoi

Cam asta e cu programul. Cred ca il puteam face mai usor si o sa incerc sa fac asta. Am cateva intrebari despre site si limbajul de programare am putea vorbi? unde pot sa ti le pun? 
// Program deplasare patrat din taste
// 1) Initializari:
var x = 1
var y=1
Aprinde(x,y)
  Aprinde(x+1,y)
  Aprinde(x,y+1)
  Aprinde(x+1,y+1)
// 2) Functia de tratare a apasarii tastelor:
function FunctieTaste(ev)
{
      var tasta = TastaApasata(ev)
      Stinge(x,y)
  Stinge(x+1,y)
  Stinge(x,y+1)
  Stinge(x+1,y+1)
      if ( (tasta == 'a') && (x > 1 ))
      {
        x=x-1;
        Aprinde(x,y)
  Aprinde(x+1,y)
  Aprinde(x,y+1)
  Aprinde(x+1,y+1)
      }
      if ( (tasta == 'd') && (x < 9) ) 
       {
         x=x+1;
             Aprinde(x,y)
  Aprinde(x+1,y)
  Aprinde(x,y+1)
  Aprinde(x+1,y+1)
       }
      if ( (tasta == 's') && (y > 1) )
      {
        y=y-1;
             Aprinde(x,y)
  Aprinde(x+1,y)
  Aprinde(x,y+1)
  Aprinde(x+1,y+1)
      }
      if ( (tasta == 'w') && (y < 9) ) 
       {
         y=y+1;
              Aprinde(x,y)
  Aprinde(x+1,y)
  Aprinde(x,y+1)
  Aprinde(x+1,y+1)
      }
}
AscultaTaste(FunctieTaste)

razvandungureanu
razvandungureanu

Salutare ideea mea ar fi asta


// Program deplasare patrat din taste

// 1) Initializari:

var x,y

function AprindePatrat()

{

Aprinde(x,y);

  Aprinde(x,y+1);

  Aprinde(x+1,y);

  Aprinde(x+1,y+1);

}

function AprindePatratRosu()

{

  Aprinde(x,y, ROSU);

  Aprinde(x,y+1, ROSU);

  Aprinde(x+1,y, ROSU);

  Aprinde(x+1,y+1, ROSU);

}

function StingePatrat()

{

  Stinge(x,y);

  Stinge(x,y+1);

  Stinge(x+1,y);

  Stinge(x+1,y+1);

}


x=1

y=1

AprindePatrat()


// 2) Functia de tratare a apasarii tastelor:

function FunctieTaste(ev)

{

      var tasta = TastaApasata(ev)

      StingePatrat()

      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1

      }

      if ( (tasta == 'd') && (x < 9) ) 

       {

              x = x+1

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1

      }

      if ( (tasta == 'w') && (y < 9) ) 

       {

              y = y+1 

       }

       if ( (x>=3)&&(y>=3)&&(x<=7)&&(y<=7) )

      {

             AprindePatratRosu()

      }

      else

      {

             AprindePatrat()

      }

}

AscultaTaste(FunctieTaste)

MihaiIordache
MihaiIordache

Salutare,in mintea mea acest exercitiu a rasarit astfel:


var x1=2;

var y1=2;

var x ;

var y=1 ;


while(y<=2)

{x=1;

while(x<=2)

 {Aprinde(x,y)

  x=x+1;

 }

 y=y+1;

}x=1;

y=1;

// Sau pt aprinderea patratului din 4 puncte puteam sa scriu pur si simplu //Aprinde(x,y)

//Aprinde(x1,y)

//Aprinde(x,y1)

//Aprinde(x1,y1)


function FunctieTaste(ev)

{Stinge(x,y);

Stinge(x,y1);

Stinge(x1,y);

Stinge(x1,y1);

      var tasta = TastaApasata(ev)


      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1

             x1=x1-1

      }

      if ( (tasta == 'd') && (x < 10) ) 

       {

              x = x+1

              x1=x1+1

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1

             y1=y1-1

      }

      if ( (tasta == 'w') && (y < 10) ) 

       {

              y = y+1 

              y1=y1+1

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU)

             Aprinde(x1,y, ROSU)

             Aprinde(x,y1, ROSU)

             Aprinde(x1,y1, ROSU)

      }

      else

      {

             Aprinde(x,y)

             Aprinde(x1,y)

             Aprinde(x,y1)

             Aprinde(x1,y1)

      }

}

AscultaTaste(FunctieTaste)

ClaudiuSimon
ClaudiuSimon

Salut Florin

Mai sus ai spus:


"Ca exercitiu te-as ruga sa modifici programul astfel incat elementul care se plimba pe ecran sa nu mai fie doar un punct, ci un mic patratel format din 4 puncte. Ce zici? Accepti provocarea?"


Eu am incercat asa:


a) cu matrici:


var m = Matrice(2, 2);

var y = 0;

var x;

while (y < 2)

{

x = 0;

while (x < 2)

{

if ((((y+x)%2) === 0) || (((y+x)%2) === 1))

{

m[y][x] = 1;

}

else

{

m[y][x] = 1;

}

x = x+1;

}

y = y+1;

}

y = 0;

while (y < 2)

{

x = 0;

while (x < 2)

{

if (m[y][x]===1)

{

Aprinde(x+1, 2-y);

}

else

{

Stinge(x+1, 2-y);

}

x = x+1;

}

y = y+1;

}

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev);

      Stinge(x, y);

      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1;

      }

      if ( (tasta == 'd') && (x < 10) )

       {

              x = x+1;

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1;

      }

      if ( (tasta == 'w') && (y < 10) )

       {

              y = y+1;

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU);

      }

      else

      {

             Aprinde(x, y);

      }

}

AscultaTaste(FunctieTaste);



si


b) cu functii:


var m = Matrice(2, 2);

function AprindeEcran()

{

var y = 0;

       var x;

       while (y < 2)

       {

              x = 0;

              while (x < 2)

              {

                     if (m[y][x] == 1)

                     {

                            Aprinde(x+1, 2-y);

                     }

                     else

                     {

                            Stinge(x+1, 2-y);

                     }

                     x = x+1;

              }

              y = y+1;

       }

}



var y = 0;

var x;

while (y < 2)

{

       x = 0;

       while (x < 2)

       {

              if ((((y+x)%2) === 0) || (((y+x)%2) === 1))

              {

                     m[y][x] = 1;

              }

              else

              {

                     m[y][x] = 0;

              }

              x = x+1;

       }

       y = y+1;

}


AprindeEcran();

function FunctieTaste(ev)

{

var tasta = TastaApasata(ev);

    Stinge(x,y); 

      if ( (tasta == 'a') && (x > 1) )

      {

            x=x-1;

      }

      if ( (tasta == 'd') && (x < 10) ) 

       {

            x=x+1;

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y=y-1;

      }

      if ( (tasta == 'w') && (y < 10) ) 

       {

              y=y+1;

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU);

      }

      else

      {

             Aprinde(x, y);

      }

}

AscultaTaste(FunctieTaste);


Nu inteleg unde gresesc. 

Please help!



Florin Birleanu
Florin Birleanu moderator

@ClaudiuSimon


Pentru varianta a):


Pana la partea unde incepi sa definesti functia FunctieTaste, programul tau nu face altceva decat sa defineasca o matrice m de 2x2, sa puna valoarea 1 in toate elementele din ea (ceea ce putea fi facut mult mai simplu cu "m[0][0] = 1; m[0][1] = 1; m[1][0] = 1; m[1][1] = 1;") si apoi sa aprinda un patratel format din patru puncte in coltul din stanga-jos. Apoi, restul programului e lasat nemodificat (deci va deplasa pe ecran un singur punct, si anume pe cel situat la ultimele valori pentru x si y (adica 2 si 2)).


Pentru varianta b):


La fel ca varianta a), doar ca partea de afisare ai pus-o intr-o functie.


Sugestie:


Ce-ar fi ca in FunctieTaste in loc de Stinge(x, y) sa ai "Stinge(x, y); Stinge(x, y-1); Stinge(x-1, y-1); Stinge(x-1, y);", iar in loc de "Aprinde(x, y, ...)" sa ai cate patru instructiuni Aprinde, pentru fiecare dintre cele 4 perechi de coordonate?

ClaudiuSimon
ClaudiuSimon

@Florin Birleanu @ClaudiuSimon

Salut


Pai sugestia ta ar fi cam asa:

var m = Matrice(2, 2);

var y = 2;

var x = 2;

m[0][0] = 1;

m[1][1] = 1;

m[0][1] = 1;

m[1][0] = 1;

Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU);

Aprinde(x-1, y-1, ALBASTRU);

Aprinde(x-1, y, ALBASTRU);

function FunctieTaste(ev)

{

var tasta = TastaApasata(ev);

Stinge(x, y, ALBASTRU);

Stinge(x, y-1, ALBASTRU);

Stinge(x-1, y-1, ALBASTRU);

Stinge(x-1, y, ALBASTRU);

     if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1,

      }

      if ( (tasta == 'd') && (x < 10) )

       {

              x = x+1,

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1,

      }

      if ( (tasta == 'w') && (y < 10) )

       {

              y = y+1,

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU);

Aprinde(x, y-1, ROSU);

Aprinde(x-1, y-1, ROSU);

Aprinde(x-1, y, ROSU);

      }

      else

      {

            Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU);

Aprinde(x-1, y-1, ALBASTRU);

Aprinde(x-1, y, ALBASTRU);

      }

}

AscultaTaste(FunctieTaste);

ClaudiuSimon
ClaudiuSimon

@Florin Birleanu

Dar, am modificat putin si cele doua programe de mai sus:


var m = Matrice(2, 2);

function AprindeEcran()

{

var y = 2 ;

var x;

while (y <= 2)

     {

              x = 2;

              while (x <= 2)

              {

if ((m[0][0] == 1)&&(m[0][1]=1)&&(m[1][0]=1)&&(m[1][1]=1))

{

Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU); 

Aprinde(x-1, y-1, ALBASTRU); 

Aprinde(x-1, y, ALBASTRU);

                     }

                     else

                     {

Stinge(x, y, ALBASTRU);

Stinge(x, y-1, ALBASTRU); 

Stinge(x-1, y-1, ALBASTRU); 

Stinge(x-1, y, ALBASTRU);


                     }

                     x = x+1;

              }

              y = y+1;

       }

}


y = 0;

while (y < 2)

{

       x = 0;

       while (x < 2)

       {

                if ((((y+x)%2) === 1) && (((y+x)%2) === 0))

              {

                     m[y][x] = 1;

              }

              else

              {

                     m[y][x] = 1;

              }

              x = x+1;

       }

       y = y+1;

}

AprindeEcran();

function FunctieTaste(ev)

{

var tasta = TastaApasata(ev);

    Stinge(x, y, ALBASTRU);

Stinge(x, y-1, ALBASTRU); 

Stinge(x-1, y-1, ALBASTRU); 

Stinge(x-1, y, ALBASTRU);

      if ( (tasta == 'a') && (x > 1) )

      {

            x=x-1;

      }

      if ( (tasta == 'd') && (x < 10) ) 

       {

            x=x+1;

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y=y-1;

      }

      if ( (tasta == 'w') && (y < 10) ) 

       {

              y=y+1;

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU);

Aprinde(x, y-1, ROSU); 

Aprinde(x-1, y-1, ROSU); 

Aprinde(x-1, y, ROSU);

      }

      else

      {

             Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU); 

Aprinde(x-1, y-1, ALBASTRU); 

Aprinde(x-1, y, ALBASTRU);

      }

}

AscultaTaste(FunctieTaste);


si,


var m = Matrice(2, 2);

var y = 0;

var x;

while (y < 2)

{

x = 0;

while (x < 2)

{

if ((((y+x)%2) === 0) && (((y+x)%2) === 1))

{

m[y][x] = 1;

}

else

{

m[y][x] = 1;

}

x = x+1;

}

y = y+1;

}

y=2;

while (y <= 2)

{

x = 2;

while (x <= 2)

{

if ((m[0][0] == 1)&&(m[0][1]=1)&&(m[1][0]=1)&&(m[1][1]=1))

{

Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU); 

Aprinde(x-1, y-1, ALBASTRU); 

Aprinde(x-1, y, ALBASTRU);

}

else

{

Stinge(x, y, ALBASTRU);

Stinge(x, y-1, ALBASTRU); 

Stinge(x-1, y-1, ALBASTRU); 

Stinge(x-1, y, ALBASTRU);

}

x = x+1;

}

y = y+1;

}

function FunctieTaste(ev)

{

    var tasta = TastaApasata(ev);

      Stinge(x, y, ALBASTRU);

Stinge(x, y-1, ALBASTRU); 

Stinge(x-1, y-1, ALBASTRU); 

Stinge(x-1, y, ALBASTRU);

      if ( (tasta == 'a') && (x > 1) )

      {

             x = x-1;

      }

      if ( (tasta == 'd') && (x < 10) )

       {

              x = x+1;

      }

      if ( (tasta == 's') && (y > 1) )

      {

             y = y-1;

      }

      if ( (tasta == 'w') && (y < 10) )

       {

              y = y+1;

       }

       if ( (x>=3)&&(y>=3)&&(x<=8)&&(y<=8) )

      {

             Aprinde(x, y, ROSU);

Aprinde(x, y-1, ROSU); 

Aprinde(x-1, y-1, ROSU); 

Aprinde(x-1, y, ROSU);

      }

      else

      {

            Aprinde(x, y, ALBASTRU);

Aprinde(x, y-1, ALBASTRU); 

Aprinde(x-1, y-1, ALBASTRU); 

Aprinde(x-1, y, ALBASTRU);

      }

}

AscultaTaste(FunctieTaste);





Florin Birleanu
Florin Birleanu moderator

@ClaudiuSimon @Florin Birleanu Exact! (Doar ca acolo unde ai in "if"-uri instructiunile de modificare pentru variabilele x sau y trebuie sa le inchei cu punct si virgula, nu cu virgula.)

AlexDogaru
AlexDogaru

Salut pana la aceasta lectie nu am intampinat probleme dar acum nu inteleg :)

Florin Birleanu
Florin Birleanu moderator

@AlexDogaru Prin instructiunea "var tasta = TastaApasata(ev);" construiesc o variabila numita "tasta" si in ea pun valoarea returnata de functia "TastaApasata" careia ii transmit la parametru variabila "ev" (primita ca parametru in mod automat de functia "FunctieTaste"). "TastaApasata(ev)" va returna codul tastei care a fost apasata. Acest cod este salvat apoi in variabila "tasta".


^-- Stiu ca partea asta e nitel mai dificila, dar poti incerca sa o iei ca atare si s-o folosesti (chiar daca pentru moment n-o intelegi chiar bine).


Apoi "Stinge(x, y);" stinge punctul de la coordonatele (x, y), unde x si y sunt doua variabile care au fost definite mai sus si au initial valorile 1 si 1.


Apoi urmeaza o serie de "if"-uri (comanda explicata intr-o lectie anterioara). Primul "if" zice ca daca tasta apasata a fost 'a' (adica codul tastei apasate, memorat in variabila "tasta" este 'a') si nu ma aflu pe prima coloana din ecranul virtual, sa micsoreze cu 1 coordonata pe axa x a punctului, adica practic sa deplaseze punctul cu o pozitie la stanga scazand 1 din valoarea variabilei x. (Dar momentan punctul tot sters ramane de pe ecran, caci inca n-am dat nicio comanda de afisare.)


Similar functioneaza si urmatoarele 3 "if"-uri, doar ca se testeaza daca s-au apasat celelalte taste de directie (adica 'd' pentru dreapta, 's' pentru jos, 'w' pentru sus).


In ultimul "if" se face afisarea punctului pe ecran la noile coordonate. (Atentie! Daca nu s-a apasat niciuna dintre aceste 4 taste sau daca punctul se afla pe vreuna dintre marginile ecranului virtual, coordonatele punctului nu se vor modifica, asa ca punctul se va redesena in aceeasi pozitie din care a fost sters. Dar cum lucrurile aceastea se intampla foarte rapid, ochiul nu va vedea ca punctul a fost sters si apoi desenat din nou. Deci practic punctul nu se va misca din locul in care era.)

Puteam aici sa pun pur si simplu "Aprinde(x, y);". Ba chiar te sfatuiesc s-o faci, ca sa vezi ca merge.

Dar ca sa fac lucrurile mai interesante un pic, am zis sa colorez punctul cu rosu atunci cand se gaseste (in ecranul virtual de 10x10 puncte din dreapta simulatorului) in patratul ce are coltul stanga-jos la coordonatele (3, 3) si coltul dreapta-sus la coordonatele (8, 8) si sa desenez punctul cu negru daca se gaseste in exteriorul acestui patrat. 


Spune-mi, te rog, daca explicatiile mele de aici au mai adus ceva lumina asupra problemei. :-)

Florin Birleanu
Florin Birleanu moderator

@AlexDogaru Ai putea sa imi spui mai precis ce nu intelegi? Sau spune-mi cum intelegi, ca sa vad daca e in regula. :-)

AlexDogaru
AlexDogaru

Poi inteleg ca var x = 1 si var y =1 pentru ca la apasarea unei taste punctul sa se mute cu un patratel dar de la var tasta =TastaApasata(ev) in jos inclusiv var tasta nu mai inteleg :) si mersi pentru raspuns :)

Claudiu
Claudiu

ca si incepator vreau sa te intreb cum merge acest program cu keyword in romana. As dori sa fac acest program in visual c. Dar la tine nu gasesc nici macar functia main. Te rog sa imi explici in vc cu l-as face?

Florin Birleanu
Florin Birleanu moderator

@Claudiu Javascript nu este un limbaj atat de strict cum este Visual C++, asa ca nu am nevoie de o functie de genul "main". Toate instructiunile sunt executate in ordinea in care sunt intalnite (chiar daca definirile de variabile si de functii nu au niciun rezultat "vizibil" imediat in program).


Pentru a face acest program in C++ ar trebui sa intram in niste detalii care depasesc cu mult scopul unui curs introductiv. Unul dintre motivele pentru care am ales sa predau bazele programarii folosind cod Javascript rulat in browser a fost tocmai acela ca pentru a face programe similare ca complexitate (din punct de vedere al interfetei grafice si al interactiunii cu utilizatorul) intr-un limbaj de programare conventional cum e C++ ar trebui stapanite deja lucruri destul de avansate.


(Daca voi avea mai multe cereri voi lua in considerare posibilitatea scrierii unor articole de introducere in Visual C++.)

Trackbacks

  1. […] In sfarsit, in cea de-a opta lectie vei invata cum sa asculti in programul tau comenzi primite de la tastatura. Iata cum. […]