Calculatoare
Lucrare la INFORMATICA - limbaj de programare PascalColegiul National “ Gheorghe Sincai” Tetris MD Profilul: matematica – informatica, intensiv informatica Limbaje de programare Borland Pascal este numele compilatorului si mediului integrat de dezvoltare pentru limbajul Pascal produs de firma Borland. Lansat in 1984 sub numele de Turbo Pascal, a ajuns repede unul dintre cele mai populare medii de dezvoltare pentru PC. Borland Pascal 7.0, lansat in 1992, a cuprins si un mediu de dezvoltare pentru Microsoft Windows. Borland Pascal a fost precursorul limbajului si mediului de dezvoltare Borland Delphi. Programarea este o ramura foarte importanta a informaticii care se ocupa cu crearea programelor (software) necesare pentru marea majoritate a activitatilor realizate cu ajutorul calculatorului. Un limbaj de programare este o tehnica de comunicare standardizata pentru transmiterea de instructiuni catre un computer. Un limbaj de programare are definite un set de reguli sintactice si semantice. Un limbaj da posibilitatea programatorului sa specifice cu ce fel de date va lucra computerul si ce actiuni va executa acesta in anumite situatii precizate. CategoriiDupa modul de specificare a instructiunilor:
Dupa nivelul de abstractizare (care cuantifica usurinta cu care pot fi citite de catre programatori):
Lista de limbaje de programareLimbaje generaleLimbaje care pot fi folosite (cel putin teoretic) in scrierea oricarui tip de programe: (QuickBasic, GW-BASIC, Visual Basic) BASICC C++ C# Clips Cobol Fortran Haskell Java JavaScript LISP Pascal (si ObjectPascal, folosit de Borland Delphi) Perl PHP Prolog Python Ruby Seed7 Scriptol Tcl/TK CSS XHTML Limbaje cu o tinta bine definita - de obicei folosite pentru interactiunea cu un anumit program sau sistem. ActionScript - limbajul de scripting folosit de Macromedia Flash ASP (si ASP.NET) - pentru scripting web FoxPro MIVA SCRIPT SQL - pentru interactiunea cu bazele de date relationale ExecutiaPentru executarea unui program scris intr-un limbaj oarecare, exista, in principiu, doua abordari: compilare sau interpretare. Unele limbaje se preteaza bine la compilare; de exemplu limbajele clasice: Pascal, Fortran, C. Alte limbaje sint in mod predilect interpretate, de ex. BASIC, PHP, SQL. Multe limbaje moderne combina compilarea cu interpretarea: codul sursa este compilat intr-un limbaj binar numit bytecode, care la rulare este interpretat de catre o masina virtuala. De remarcat faptul ca unele interpretoare de limbaje pot folosi compilatoare just-in-time, care transforma codul in limbaj masina chiar inaintea executarii. Algoritm (notiunea are la origine numele matematicianului persan Al-Khwarizmi), in matematica si informatica teoretica, reprezinta o metoda univoca prin care se descriu, pe rand, pasii necesari pentru rezolvarea unei probleme. Algoritmul este notiunea fundamentala a informaticii. Totul este construit in jurul algoritmilor si al structurilor de date, cum ar fi listele sau grafurile. ProprietatiCele mai importante proprietati ale unui algoritm sunt urmatoarele: finitudinea este proprietatea algoritmului de a se termina intr-un numar finit de pasi. Exista si 'algoritmi' care nu se termina intr-un numar finit de pasi, dar acestia se numesc metode algoritmice. corectitudinea este proprietatea algoritmului de a furniza o solutie corecta a problemei date. generalitatea este proprietatea unui algoritm de a rezolva o clasa de probleme, si nu doar o problema particulara. Spre exemplu, un algoritm care rezolva ecuatia x2 + 5x − 6 = 0 este mai putin general decat unul care rezolva ecuatia ax2 + bx + c = 0. claritatea este proprietatea algoritmului de a descrie cu exactitate pasii pe care ii parcurge in rezolvarea problemei, fara ambiguitati. optimalitatea este proprietatea unui algoritm de a se termina dupa un numar minim de pasi. Spre exemplu, daca se cere sa se calculeze suma primelor n numere naturale, putem aplica formula de calcul, si astfel algoritmul se termina intr-un singur pas, pe cand, daca am aduna toate numerele de la 1 la n, s-ar termina in n pasi. Clasificarea algoritmilorIn functie de modul de implementare, un algoritm poate fi: recursiv sau iterativ serial sau paralel deterministic sau aleator (probabilistic) poate furniza rezultatul exact sau doar o aproximare a acestuia In functie de paradigma utilizata pot fi:
algoritmi backtracking algoritmi divide et impera algoritmi de programare dinamica algoritmi greedy algoritmi probabilisti, algoritmi genetici, algoritmi euristici Despre aplicatie Programul se numeste “Tetris_MD” si este facut in limbajul de programare Pascal. Tetris_MD este un joc realizat dupa modelul bine-cunoscutului joc Tetris. Tetris_MD presupune programul propriu-zis (sursa Pascal) si un fisier text in care sunt salvate recordurile. Imediat dupa lansarea in executie a programului se deschide pagina de inceput a proiectului, cu titlul “Lucrare de atestat”. Dupa apasarea tastei ENTER, apare numele realizatorului, numele profesorului indrumator, numele liceului, clasa si profilul, precum si un chenar “start aplicatie”. Pentru deschiderea aplicatiei, cu ajutorul mouse-ului se da click in chenarul “start aplicatie”. Dupa deschiderea aplicatiei, se intra in pagina “Meniu principal” in care apar cinci optiuni: -“Joc nou” -“Recorduri” -“Despre joc” -“Conf. taste” -“Iesire” Optiunea “Recorduri” se apeleaza din meniul principal cu ajutorul mouse-ului si are ca efect afisarea recordurilor. Aceste recorduri sunt cele mai bune 10 punctaje realizate. Recordurile sunt afisate in ordine descrescatoare. Dupa apelarea optiunii Recorduri, pe ecran apare textul “Apasati ENTER”. Dupa apasarea tastei ENTER, pentru a reveni la meniul principal, se da click pe butonul “Inapoi”. Optiunea “Despre joc” se apeleaza tot cu ajutorul mouse-ului, la fel ca celelalte optiuni, dand click in chenarul “Despre joc”. Pe ecran va aparea numele jocului: “Tetris_MD”, informatii despre originea jocului (cunoscutul joc Tetris la care s-au adus mici modificari) si regulile jocului: piesele de joc trebuie aranjate in spatiul de joc in asa fel incat sa se completeze cel putin cate o linie pe orizontala. fiecare linie completata valoreaza un anumit numar de puncte, puncte ce se adauga la scor, pentru ca jucatorul sa-si poata masura abilitatile, in comparatie cu ceilalti jucatori. piesele se pot deplasa la dreapta si la stanga cu ajutorul tastelor ‘4’ si piesele se pot roti la stanga cu 90 prin apasarea tastei ‘5’. Pe langa acestea mai apare butonul “Inapoi” cu ajutorul caruia putem reveni la meniul principal. Prin apelarea optiunii “Conf. taste”, pe ecran vor aparea toate tastele care sunt necesare rularii aplicatiei, impreuna cu rolul lor:
Prin butonul “Inapoi” se revine la meniul principal. Optiunea “Iesire” se apeleaza din meniul principal cu ajutorul mouse-ului si are ca efect imediat parasirea aplicatiei. Cea mai importanta optiune a meniului principal este ”Joc Nou”. Ea se apeleaza tot cu ajutorul mouse-ului si lanseaza in executie jocul propriu-zis. La lansarea in executie a jocului pe ecran va aparea bine plasat in centru spatiul de joc. Regulile jocului sunt simple. Spatiul de joc este format din patratele, asemanator tablei de sah, doar ca are dimensiunile 20x10. Fiecare camp poate fi plin (acoperit de o caramida) sau gol. In centru sus apar diferite piese pe care jucatorul le poate manevra dupa bunul plac, astfel el le va deplasa unde doreste. El poate muta piesa la dreapta, la stanga, poate sa accelereze coborarea si o poate roti la stanga cu 90 . Piesele pot cadea pana la intalnirea altei piese sau pana la intalnirea solului. Scopul jocului este de a acumula cat mai multe puncte. Punctele se acumuleaza atunci cand se umple un rand intreg. Dupa ce piesa a ajuns pe sol (randul de jos) sau a intalnit o alta piesa si a completat un rand, randul plin va disparea si tot ce se afla deasupra va cobori in mod automat cu o pozitie mai jos. Jocul dureaza pana cand urmatoarea piesa nu mai are loc in centrul spatiului de joc, pe primele linii.
Alaturi de spatiul de joc vor mai aparea in partea din dreapta si punctajul realizat pana in acel moment, precum si piesa ce urmeaza sa apara dupa fixarea piesei curente, nivelul si numarul de linii care trebuie completate pana la trecerea la nivelul urmator. In partea stanga, vor aparea texte informative despre iesirea sau intreruperea jocului. In cazul in care in centru sus este pozitionata o anumita piesa si piesa urmatoare nu mai are loc, jocul se termina, pe ecran aparand textul “GAME OVER”, palpaind de cateva ori, dupa care se afiseaza textul “Apasati ”s” ”. Dupa ce se apasa tasta “s”, in coltul din dreapta jos apare un chenar cu textul ”Inapoi”. Pentru a reveni la meniul principal, dati click pe acest chenar. Daca, in timpul jocului, vreti sa reveniti la meniul principal, apasati tasta “s” si se procedeaza ca in cazul in care se termina jocul (dati click pe chenarul “Inapoi”). Daca doriti sa iesiti din aplicatie, apasati tasta “q”. ATENTIE: daca apasati “s”, jocul se pierde. De fiecare data cand un joc se termina, scorul se memoreaza intr-un vector. La apelarea procedurii “Recorduri”, vectorul este ordonat descrescator si pe ecran apar cele mai bune 10 recorduri. Descrierea programului Programul Pascal (codul sursa) este impartit intr-un numar mare de proceduri, proceduri enumerate mai jos. Practic, programul principal nu face decat sa apeleze procedura “pagina1” si sa initializeze unele variabile. Procedura “Piesa” creaza fiecare piesa in parte, in functie de o variabila “p”. Acesta reprezinta valoarea unui element al vectorului “v”, ales aleator. Vectorul “v” are 23 de elemente si reprezinta codul culorii pe care o are o piesa. Faptul ca vectorul are 23 de elemente nu inseamna ca avem 23 de piese diferite. Avem 7 piese care au fiecare una sau mai multe pozitii diferite (maxim 4). In functie de valoarea parametrilor “p”, “x” si “y”, procedura piesa atribuie unor elemente ale matricei “a” anumite valori, iar la afisarea acesteia, patratelele vor avea diferite culori, reprezentand diferite piese. Procedura “Anulpiesa” are cam acelasi efect ca si procedura “Piesa”, doar ca in functie de valoarea parametrilor, atribuie unor elemente ale matricei “a” valoarea 11, deoarece 11 este codul culorii spatiului de joc. Astfel, la afisarea matricii, anumite patratele vor aparea necolorate (colorate ca si spatiul de joc). Procedura “Verif” verifica daca pe o anumita linie a spatiului de joc sunt ocupate toate patratelele (daca in matricea “a”, toate elementele de pe o linie sunt diferite de 11. Daca un element din matrice are valoarea 11 inseamna ca pe acea pozitie nu este nici o caramida a unei piese). Daca sunt ocupate toate patratelele, scorul este marit cu un anumit numar de puncte, se emite un anumit sunet, linia este stearsa si tot ce se afla deasupra liniei coboara cu un nivel. Scorul se calculeaza astfel: 30 de puncte pentru fiecare linie completata in nivelul I, iar apoi pentru fiecare nivel, scorul pentru fiecare linie se mareste cu 5 puncte. Procedura “Gril” face ca dupa fiecare modificare a pozitiei unei piese, spatiul de joc sa apara ca o “pagina in patratele”. Procedura “Records” are ca efect principal afisarea celor mai bune 10 punctaje obtinute. In primul rand, daca scorul jucatorului este mai mare decat 0, atunci scrie scorul la sfarsitul fisierului “record.int”. Apoi coloreaza tot ecranul albastru deschis si citeste toate scorurile din fisierul “record.int” si le memoreaza in vectorul “r”. Ordoneaza vectorul “r” in ordine descrescatoare si afiseaza primele 10 elemente ale vectorului “r” (cele mai mari 10 punctaje obtinute). Procedura “Game_Over” verifica daca piesa urmatoare poate fi pusa in centrul spatiului de joc. Daca elementele spatiului de joc din centru sunt ocupate, atunci afiseaza pe ecran textul “Game Over”. Procedura “Stanga” deplaseaza piesa la stanga. Prima data sterge piesa, apeland procedura “anulpiesa”, dupa care ,cu ajutorul procedurei “piesa” deseneaza piesa in stanga, deplasata cu o coloana. Daca piesa nu poate fi deplasata la stanga, procedura nu are nici un efect. Procedura “Dreapta” este asemanatoare cu procedura “stanga”, doar ca in loc sa deplaseze piesa la stanga, ea deplaseaza piesa la dreapta cu o coloana. Procedura “Jos” are ca efect coborarea piesei cu un nivel, daca aceasta poate sa coboare (nu a ajuns pe ultima linie a spatiului de joc sau nu are pe nivelul imediat urmator o alta piesa). Se procedeaza exact ca la procedurile “stanga” si “dreapta”: se sterge piesa prin apelarea procedurii “anulpiesa” dupa care se deseneaza piesa cu un nivel mai jos. Prin procedura “Rotire”, piesa este rotita la stanga cu 90 . Dupa cum am spus la inceput, avem un vector “v” care contine codurile culorilor pentru fiecare pozitie a fiecarei piese. Prin apelarea procedurii “rotire”, se sterge piesa, si se deseneaza piesa care are codul din urmatorul element al vectorului “v”. Daca urmatorul element din vector are codul pentru o alta piesa, atunci se deseneaza piesa curenta care are codul cel mai mic memorat intr-un element al vectorului “v”. Procedura “Ceasca” deseneaza o ceasca de cafea in partea stanga atunci cand jucatorul pune pauza. Procedura “Joc” este jocul propriu-zis si apeleaza toate celelalte proceduri descrise pana acum. Pentru inceput initializeaza variabila “sc” cu 0, variabila care reprezinta scorul. Deseneaza spatiul in care va aparea piesa urmatoare si scorul si creaza spatiul de joc. Urmeaza jocul: -alege o piesa (de la 1 la 23); -pune piesa in spatiul de joc si o sterge de la “piesa urmatoare”, unde alege alta piesa -citeste o tasta, care poate fi “4”, ”6”, ”2”, ”p”, ”s”, ”q” sau ”5” (daca tasta apasata nu se regaseste printre cele 7 taste, ea nu are nici un efect) -fiecare dintre cele 7 taste are un efect specific: deplaseaza piesa la stanga, la dreapta, in jos, pune pauza, opreste jocul pentru a reveni la meniul principal, inchide aplicatia sau roteste piesa. -daca se apasa tastele de trei ori consecutiv piesa coboara un nivel -daca nu se apasa nici o tasta, piesa coboara automat cate un nivel -se verifica daca, dupa ce a ajuns o piesa pe sol (nivelul de jos) sau a intalnit o alta piesa, s-a completat o linie sau mai multe. In caz afirmativ, se elimina linia corespunzatoare, se mareste scorul, scade numarul de linii (afisat sub scor) care trebuie completate pentru a trece la nivelul urmator si eventual creste nivelul. Procedura “Pa” este procedura care deseneaza meniul principal (cele 5 chenare: Joc nou, Recorduri, Despre joc, Conf. taste si Iesire cu textele corespunzatoare). Procedura “Pp” este procedura care realizeaza lucrul cu mouse-ul in cadrul meniului si revenirea la meniul principal. Procedura “Pagina1” creeaza pagina de inceput si face legatura dintre aceasta si aplicatie, prin intermediul chenarului “ Start Aplicatie”. Trecerea se face dand click cu ajutorul mouse-ului pe butonul de legatura. Programul principal este foarte simplu: initializeaza modul graph, initializeaza unele variabile care contorizeaza viteza de rulare a pieselor, nivelul, numarul de linii care trebuie completate pana la trecerea la nivelul urmator si bonusul pentru completarea mai multor linii in acelasi timp si apeleaza procedura “pagina1” dupa care inchide modul graph. Sursa Pascal uses Graph,crt,dos,d_mouse; type tip=record c:byte; x,y:integer; end; mtip=array[0..20,0..20]of tip; const v:array[1..23]of byte=(4,2,18,5,21,7,23,39,55,6,22,38,54,1,17,14,30,46,62,12,28,44,60); var grDriver: Integer; grMode: Integer; 30:begin a[x+2,y].c:=14; a[x,y].c:=14; a[x+1,y].c:=14; a[x+1,y+1].c:=14; end; 46:begin a[x+1,y].c:=14; a[x+1,y+1].c:=14; a[x+1,y+2].c:=14; a[x,y+1].c:=14; end; 62:begin a[x,y+1].c:=14; a[x+1,y].c:=14; a[x+1,y+1].c:=14; a[x+2,y+1].c:=14; end; 12:begin a[x,y].c:=12; a[x+1,y+1].c:=12; a[x+1,y].c:=12; end; 28:begin a[x,y+1].c:=12; a[x+1,y].c:=12; a[x+1,y+1].c:=12; end; 44:begin a[x,y].c:=12; a[x,y+1].c:=12; a[x+1,y+1].c:=12; end; 60:begin a[x,y].c:=12; a[x,y+1].c:=12; a[x+1,y].c:=12; end; end; end; procedure anulpiesa(p:byte;x,y:integer;var a:mtip); begin case p of 4:begin a[x,y].c:=11; a[x+1,y].c:=11; a[x,y+1].c:=11; a[x+1,y+1].c:=11; end; 2:begin a[x,y+1].c:=11; a[x,y+2].c:=11; a[x+1,y].c:=11; a[x+1,y+1].c:=11; end; 18:begin a[x,y].c:=11; a[x+1,y].c:=11; a[x+1,y+1].c:=11; a[x+2,y+1].c:=11; end; 5:begin a[x+1,y+1].c:=11; a[x+1,y+2].c:=11; a[x,y].c:=11; a[x,y+1].c:=11; end; 21:begin a[x,y+1].c:=11; a[x+1,y+1].c:=11; a[x+1,y].c:=11; a[x+2,y].c:=11; end; 7:begin a[x+1,y].c:=11; a[x+2,y].c:=11; a[x,y].c:=11; a[x+2,y+1].c:=11; end; 23:begin a[x,y+2].c:=11; a[x+1,y].c:=11; a[x+1,y+2].c:=11; a[x+1,y+1].c:=11; end; 39:begin a[x+1,y+1].c:=11; a[x+2,y+1].c:=11; a[x,y+1].c:=11; a[x,y].c:=11; end; 55:begin a[x+1,y].c:=11; a[x,y+2].c:=11; a[x,y].c:=11; a[x,y+1].c:=11; end; 6:begin a[x+1,y+1].c:=11; a[x+2,y+1].c:=11; a[x,y+1].c:=11; a[x+2,y].c:=11; end; 22:begin a[x,y].c:=11; a[x,y+1].c:=11; a[x+1,y+2].c:=11; a[x,y+2].c:=11; end; 38:begin a[x+1,y].c:=11; a[x+2,y].c:=11; a[x,y].c:=11; a[x,y+1].c:=11; end; 54:begin a[x+1,y].c:=11; a[x+1,y+1].c:=11; a[x,y].c:=11; a[x+1,y+2].c:=11; end; 1:begin a[x+1,y].c:=11; a[x+2,y].c:=11; a[x,y].c:=11; a[x+3,y].c:=11; end; 17:begin a[x,y].c:=11; a[x,y+1].c:=11; a[x,y+2].c:=11; a[x,y+3].c:=11; end; 14:begin a[x,y].c:=11; a[x,y+1].c:=11; a[x,y+2].c:=11; a[x+1,y+1].c:=11; end; 30:begin a[x+2,y].c:=11; a[x,y].c:=11; a[x+1,y].c:=11; a[x+1,y+1].c:=11; end; 46:begin a[x+1,y].c:=11; a[x+1,y+1].c:=11; a[x+1,y+2].c:=11; a[x,y+1].c:=11; end; 62:begin a[x,y+1].c:=11; a[x+1,y].c:=11; a[x+1,y+1].c:=11; a[x+2,y+1].c:=11; end; 12:begin a[x,y].c:=11; a[x+1,y+1].c:=11; a[x+1,y].c:=11; end; 28:begin a[x,y+1].c:=11; a[x+1,y].c:=11; a[x+1,y+1].c:=11; end; 44:begin a[x,y].c:=11; a[x,y+1].c:=11; a[x+1,y+1].c:=11; end; 60:begin a[x,y].c:=11; a[x,y+1].c:=11; a[x+1,y].c:=11; end; end; end; Procedure verif(k:byte;var s:boolean); begin i:=5; s:=true; repeat if a[k,i].c=11 then s:=false; inc(i); until (s=false)or(i=17); if s then begin for i:=k downto 2 do for j:=5 to 16 do a[i,j].c:=a[i-1,j].c; for i:=1 to 20 do a[1,i].c:=11; setcolor(15); str(sc,scor); outtextXY(580,235,scor); setcolor(red); sc:=sc+30; str(sc,scor); outtextXY(580,235,scor); o:=200; repeat sound(o); delay(30); o:=o+50; until o=850; nosound; if (sc-bonus) mod 300 = 0 then begin viteza:=viteza-50; setcolor(15); str(niv,scor); outtextXY(580,315,Scor); setcolor(red); inc(niv); str(niv,scor); outtextXY(580,315,Scor); end; end; end; procedure gril(var x,y:integer); begin setlinestyle(0,1,1); setcolor(13); for i:=1 to 19 do begin line(x,y,x+240,y); y:=y+20; end; y:=40; x:=x+20; for i:=1 to 11 do begin line(x,y,x,y+400); x:=x+20; end; end; procedure records; begin settextstyle(0,0,1); outtextxy(150,400,'Pentru vizualizarea recordurilor apasati r.'); assign(f,'record.int'); append(f); if sc>0 then writeln(f,sc); close(f); assign(f,'record.int'); reset(f); begin z:=0; setfillstyle(1,lightblue); bar(0,0,640,480); i:=0; while not eof(f) do begin inc(i); readln(f,r[i]); end; z:=i; repeat s:=true; for i:=1 to z-1 do if r[i]<r[i+1] then begin aux:=r[i]; r[i]:=r[i+1]; r[i+1]:=aux; s:=false; end; until s=true; k:=0; setcolor(red); settextstyle(1,0,1); for i:=1 to 10 do begin k:=k+30; outtextXY(30,k,'Locul '); str(i,l); outtextXY(78,k,l); str(r[i],scor); outtextXY(120,k,scor); end; i:=0; outtextxy(320,380,'Apasati ENTER'); repeat outtextXY(44,30,'Locul 1'); inc(i); if i mod 2 =0 then begin setcolor(lightblue); delay(100); end else begin setcolor(red); delay(150); end; until keypressed; end; close(f); end; procedure game_over(var a,b:mtip;var ss:boolean); begin x:=1; ss:=true; for i:=1 to 4 do for j:=1 to 4 do if (b[i,j].c<>11) and (a[i,j+10].c<>11) then ss:=false; if ss=false then begin cleardevice; repeat inc(i); if i mod 2=0 then setbkcolor(lightblue) else setbkcolor(lightred); delay(30); settextstyle(0,0,10); setcolor(yellow); outtextXY(320,150,'Game'); outtextXY(320,250,'Over'); until i=30; t:='s'; end; end; procedure stanga(var a:mtip;var k:integer); begin if y>5 then if (k=4)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=2)and(a[x,y].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=18)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=18)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=5)and(a[x,y-1].c=11)and(a[x+1,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=21)and(a[x,y].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=7)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=23)and(a[x,y+1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=39)and(a[x,y-1].c=11)and(a[x+1,y].c=11)and(a[x+2,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=55)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=6)and(a[x,y].c=11)and(a[x+1,y].c=11)and(a[x+2,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=22)and(a[x,y-1].c=11)and(a[x+1,y+1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=38)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=54)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=1)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y-1].c=11)and(a[x+3,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=17)and(a[x,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=14)and(a[x,y-1].c=11)and(a[x+1,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=30)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=46)and(a[x,y].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=62)and(a[x,y].c=11)and(a[x+1,y-1].c=11)and(a[x+2,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=12)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=28)and(a[x,y].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=44)and(a[x,y-1].c=11)and(a[x+1,y].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end else if (k=60)and(a[x,y-1].c=11)and(a[x+1,y-1].c=11) then begin anulpiesa(k,x,y,a); dec(y); piesa(k,x,y,a); end; until (x>240)and(x<400)and(y>440)and(y<475); pa; pp; end; Begin grDriver := Detect; InitGraph(grDriver, grMode,' '); viteza:=300; niv:=1; contor:=0; bonus:=0; pagina1; readln; CloseGraph; end. Bibliografie Donald E. Knuth - Arta Programarii Calculatoarelor (ed. 2), Volumul 1: Algoritmi Fundamentali Herbert S. Wilf - Algorithms and Complexity (PDF Document) Martin Davis - The Undecidable: Basic Papers On Undecidable Propostions, Unsolvable Problems and Computable Functions, Raven Press, New York, 1965 Tudor Sorin – Manual de informatica cls a X-a, Editura L&S 2000 Bogdan Batog si Catalin Drula – Tehnici de programare, cls a X-a, Editura L&S Informat, 1988
|