start     Articole     Despre mine    

Programeaza si joaca Memory Matrix online

Iata ca deja ti-am pus la dispozitie in articolele anterioare toate uneltele de care ai nevoie pentru a putea construi jocuri destul de interesante. In articolul de azi vei vedea cum m-am folosit de lectiile trecute pentru a construi un joc de Memory Matrix pe care il poti configura si juca direct in browser.

Iata codul sursa al programului. (Caseta de simulare se gaseste sub el.)

 // --------------------------------  
 // |  Joc MEMORY MATRIX online  |  
 // --------------------------------  
 // -> variabilele:  
 var tabla; // 10x10, {0:alb, 1:negru, 2:alb acoperit, 3: negru acoperit}  
 var cursorx; // {1, 2, 3, ..., 10}  
 var cursory; // {1, 2, 3, ..., 10}  
 var stare_joc; // {0: asteapta, 1: arata piese, 2: ghiceste piese; 3: joc terminat}  
 var contor; // pentru contorizarea timpului  
 var nr_piese; // numarul de piese negre de pe tabla  
 var nr_click; // numarul de incercari de ghicire facute  
 // -> functiile:  
 function InitializeazaTabla()  
 {  
  var i;  
  var j;  
  i = 0;  
  while (i<10)  
  {  
   j = 0;  
   while (j<10)  
   {  
    tabla[i][j] = 2; // 2: alb acoperit  
    j = j+1;  
   }  
   i = i+1;  
  }  
  var p = 1;  
  while (p <= nr_piese)  
  {  
   var poz = 1 + NrAleator(10*10-p);  
   i = 0;  
   while (i<10)  
   {  
    j = 0;  
    while (j<10)  
    {  
     if (tabla[i][j]==2)  
     {  
      if (poz > 0)  
      {  
       poz = poz - 1;  
       if (poz == 0)       
       {  
        tabla[i][j] = 3; // 3: negru acoperit  
       }  
      }  
     }  
     j = j+1;  
    }  
    i = i+1;  
   }  
   p = p+1;  
  }  
 }  
 function DeseneazaTabla(nr)  
 {  
  var i;  
  var j;  
  i = 0;  
  while (i<10)  
  {  
   j = 0;  
   while (j<10)  
   {  
    if (nr == 0) // <-- tabla asa cum e  
    {  
         if (tabla[i][j] == 0)  
      Aprinde(j+1,10-i, ALB);  
         else if (tabla[i][j] == 1)  
      Aprinde(j+1,10-i, NEGRU);  
        else // if ((tabla[i][j]==2)||(tabla[i][j]==3))  
      Aprinde(j+1,10-i, GRI);  
    }  
    else // if (nr == 1) // <-- tabla revelata  
    {  
        if ((tabla[i][j]==0)||(tabla[i][j]==2))  
      Aprinde(j+1,10-i, ALB);  
         else //if ((tabla[i][j]==1)||(tabla[i][j]==3))  
      Aprinde(j+1,10-i, NEGRU);  
    }  
    j = j+1;  
   }  
   i = i+1;  
  }  
 }  
 function DeseneazaCursor(nr)  
 {  
  var i = 10-cursory;  
  var j = cursorx-1;  
  if (tabla[i][j] >= 2)  
   Aprinde(cursorx, cursory, ROSU);  
  else if (tabla[i][j] == 1)  
   Aprinde(cursorx, cursory, ALBASTRU);  
  else // if (tabla[i][j] == 0)  
   Aprinde(cursorx, cursory, GALBEN);  
 }  
 function FunctieDesenare()  
 {  
  if (TimpScurs(1000/10) == 1)  
  {  
   if (stare_joc == 0) // 0: asteapta  
   {  
    if (contor<10)  
    {  
     contor = contor+1;  
     DeseneazaTabla(0);  
    }  
    else //if (contor==10)  
    {  
     stare_joc = 1;  
     contor = 0;  
     DeseneazaTabla(1);  
    }  
   }  
   else if (stare_joc == 1) // 1: arata piese  
   {  
    if (contor<10)  
    {  
     contor = contor+1;  
     DeseneazaTabla(1);  
    }  
    else //if (contor==10)  
    {  
     stare_joc = 2;  
     contor = 0;  
     DeseneazaTabla(0);  
     DeseneazaCursor();  
    }  
   }  
   else if (stare_joc == 2) // 2: ghiceste piese  
   {  
    DeseneazaTabla(0);  
    DeseneazaCursor();  
   }  
   else //if (stare_joc == 3) // 3: joc terminat  
   {  
    DeseneazaTabla(0);  
   }  
  }  
  Animeaza(FunctieDesenare);  
 }  
 function FunctieTaste(ev)  
 {  
  var tasta = TastaApasata(ev);  
  if (stare_joc == 2) // 2: ghiceste piese  
  {  
   if ((tasta == 'a')&&(cursorx>1))  
    cursorx = cursorx - 1;  
   if ((tasta == 'd')&&(cursorx<10))  
    cursorx = cursorx + 1;  
   if ((tasta == 'w')&&(cursory<10))  
    cursory = cursory + 1;  
   if ((tasta == 's')&&(cursory>1))  
    cursory = cursory - 1;  
   if (tasta == 'p')  
   {  
    var i = 10-cursory;  
    var j = cursorx-1;  
    if (tabla[i][j]>=2)  
    {  
     tabla[i][j] = tabla[i][j]-2;  
     nr_click = nr_click+1;  
     if (nr_click==nr_piese)  
     {  
      stare_joc = 3; // 3: joc terminat  
     }  
    }  
   }  
  }  
 }  
 // -> programul:  
 // --> initializari:  
 tabla = Matrice(10, 10);  
 cursorx = 5;  
 cursory = 6;  
 stare_joc = 0; // 0: asteapta  
 contor = 0;  
 nr_piese = 7;  
 nr_click = 0;  
 // --> start joc:  
 InitializeazaTabla();  
 DeseneazaTabla(0);  
 StartAnimatie(FunctieDesenare);  
 AscultaTaste(FunctieTaste);  

 

Daca nu ai rabdare sa-l scrii tu cu mana ta, atunci foloseste copy&paste pentru a completa programul de mai sus in caseta de text urmatoare. (Dar promite-ti mai intai ca te vei uita peste program si te vei stradui sa-l intelegi :-).) Asa cum ai putut vedea din cod, pentru a muta cursorul folosesti tastele A, D, S si W, iar pentru a intoarce piesa de sub cursor apesi tasta P.

(Browserul tau nu suporta Canvas!…)

 

Ce ai zice acum sa modifici numarul de puncte negre ale caror pozitii trebuie sa le memorezi? Dar daca ai vrea sa faci cursorul verde in loc de rosu, cum ai face? (Nu uita: inainte de a apasa din nou butonul “Executa…” apasa butonul “Reseteaza…” pana cand pe micul ecran virtual din dreapta apare grilajul cu toate punctele albe.)

 

Daca exista ceva ce nu ai inteles din acest articol, atunci iti recomand cu caldura cartea Cum programezi un joc de la zero, pe care o poti cumpara in format electronic de aici. In plus, eu sunt aici si imi face placere sa raspund intrebarilor tale.





0 comments