Ti-am vorbit in articolul trecut despre cum poti sa programezi celebrul joc Snake folosind doar informatiile prezentate in tutorialele de programare pentru incepatori pe care le-am publicat pana acum pe site. (Mai precis, am programat jocul Snake folosind doar informatiile din posterul de aici.) Daca ai parcus articolul, iti amintesti desigur ca jocului nostru ii lipsea ceva. Azi ii vom da viata (asa cum am aratat in lectia despre animatii).
Asa cum vei vedea, programul este aproape identic cu cel din articolul trecut. Exista doar trei diferente:
1) Am introdus o noua functie, FunctieDesenare, iar in program am apelat StartAnimatie(FunctieDesenare).
2) Instructiunile ce se executau in cazul apasarii tastei P le-am mutat in functia de desenare (care se va apela in mod automat de 4 ori pe secunda).
3) Am introdus niste instructiuni suplimentare in functia FunctieDesenare pentru a verifica daca jocul s-a incheiat, caz in care animatia trebuie intrerupta.
Codul sursa al programului il poti descarca de aici. Dupa ce ai facut-o, te rog sa il introduci in simulatorul online de la adresa https://igotopia.ro/programez-online (pe care te rog sa il deschizi intr-o fereastra noua).
Gata? Zi “abracadabra” (sau “supercalifragilisticexpialidocius”, daca esti fan “Mary Poppins”) si apasa butonul “Executa…”. Vei vedea cum pe ecranul virtual apare bordura gri, marul verde si sarpele ce se deplaseaza catre dreapta. Controleaza-l folosind tastele W-A-S-D pe post de sageti (sus-stanga-jos-dreapta).
ATENTIE: Jocul acesta poate crea dependenta! 🙂
Nu mai ai rabdare? Apasa butonul “Reseteaza…”, dupa care apasa “Executa…”. Si nu uita sa ai mana stanga pe tastele “sageti” W-A-S-D!
// Joc SNAKE 2.0
// (^-- la fel ca 1.0, dar cu animatie)
// 1. Date:
// --> sarpele:
// coordonatele elementelor
var sarpeX = Vector(64);
var sarpeY = Vector(64);
// lungimea sarpelui (adica numarul de elemente)
var sarpeN;
// directia de mers
var directie; // 0-Est, 1-Nord, 2-Vest, 3-Sud
// --> marul:
// coordonatele marului
var marX;
var marY;
// 2. Functii:
function AfiseazaBordura()
{
var i = 1;
while (i<=10)
{
Aprinde(i, 1, GRI);
Aprinde(i, 10, GRI);
Aprinde(1, i, GRI);
Aprinde(10, i, GRI);
i = i+1;
}
}
function AfiseazaSarpe()
{
var i;
Aprinde(sarpeX[0], sarpeY[0], GRI);
i = 1;
while (i < sarpeN)
{
Aprinde(sarpeX[i], sarpeY[i], NEGRU);
i = i+1;
}
}
function AfiseazaMarNou()
{
var nrAleator;
nrAleator = 1+
(
((sarpeX[0]+sarpeY[0])*7)%
(8*8 - sarpeN)
);
var contor = 1;
var x;
var y;
y = 2;
while (y<=9)
{
x = 2;
while (x<=9)
{
var e_sarpe = 0; // fals
var i = 0;
while (i<sarpeN)
{
if ((sarpeX[i]==x) &&
(sarpeY[i]==y))
{
e_sarpe = 1; // adevarat
}
i = i+1;
}
if (e_sarpe == 0) // nu e sarpe
{
if (contor == nrAleator)
{
marX = x;
marY = y;
}
contor = contor+1;
}
x = x+1;
}
y = y+1;
}
Aprinde(marX, marY, VERDE);
}
function FunctieTaste(ev)
{
var tasta = TastaApasata(ev);
// schimba directia
if ((tasta == 'a')&&(directie!=0))
directie = 2;
if ((tasta == 'd')&&(directie!=2))
directie = 0;
if ((tasta == 'w')&&(directie!=3))
directie = 1;
if ((tasta == 's')&&(directie!=1))
directie = 3;
// avanseza
if (tasta == 'p')
{
// continutul a fost mutat
// in FunctieDesenare()
}
}
function FunctieDesenare()
{
var jocTerminat = 0; //fals
if (TimpScurs(1000/4)==1)
{
var nouX = sarpeX[0];
var nouY = sarpeY[0];
if (directie==0) nouX= nouX+1;
if (directie==2) nouX= nouX-1;
if (directie==1) nouY= nouY+1;
if (directie==3) nouY= nouY-1;
if ((nouX==marX)&&(nouY==marY))
sarpeN = sarpeN+1;
else
Stinge(sarpeX[sarpeN-1],
sarpeY[sarpeN-1]);
var i = sarpeN-1;
while (i>=1)
{
sarpeX[i] = sarpeX[i-1];
sarpeY[i] = sarpeY[i-1];
i = i-1;
}
sarpeX[0] = nouX;
sarpeY[0] = nouY;
Aprinde(sarpeX[1], sarpeY[1], NEGRU);
Aprinde(sarpeX[0], sarpeY[0], GRI);
if ((sarpeX[0]==marX)&&
(sarpeY[0]==marY))
AfiseazaMarNou();
jocTerminat = 0; //fals
if ((sarpeX[0]==1)||
(sarpeX[0]==10)||
(sarpeY[0]==1)||
(sarpeY[0]==10))
jocTerminat = 1; //adevarat
i = 1;
while (i <= sarpeN-1)
{
if ((sarpeX[0]==sarpeX[i])&&
(sarpeY[0]==sarpeY[i]))
jocTerminat = 1; //adevarat
i = i+1;
}
if (jocTerminat == 1)
{
Aprinde(marX, marY, ROSU);
AscultaTaste();
}
}
if (jocTerminat==0)
Animeaza(FunctieDesenare);
else
{}
}
// 3. Program:
// --> bordura
AfiseazaBordura();
// --> initializeaza sarpele
sarpeN = 3;
sarpeX[0]= 5; sarpeX[1]= 4; sarpeX[2]= 3;
sarpeY[0]= 5; sarpeY[1]= 5; sarpeY[2]= 5;
directie = 0;
AfiseazaSarpe();
// --> initializeaza marul
AfiseazaMarNou();
// --> tastatura
AscultaTaste(FunctieTaste);
// --> animatie
StartAnimatie(FunctieDesenare);
Super, nu-i asa? Te provoc sa modifici programul astfel incat capul sarpelui sa nu mai fie gri, ci albastru. Nu e greu, nu?…
Ti-a placut? Da share. Si lasa-mi intr-un comentariu ce jocuri ti-ai mai dori sa vezi “disecate” pas cu pas aici, in Igotopia — taramul unde gandurile tale capata forma.
Florin