SHARE
TWEET

Untitled

a guest May 21st, 2019 54 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <graphics.h> ///graficele
  4. #include <ctime>   /// time(),srand()
  5. #include <stdio.h> ///pentru sprintf
  6. #include <stdlib.h> ///getch() si altele
  7. #include <cmath>
  8. using namespace std;
  9. int a[10][10],Lungime,Spatii,random;
  10. char key;
  11. void Start(int Lungime);
  12. void Final(int Lungime);
  13. int Score(int Lungime);
  14. int GenerareNumar();
  15. void GenerarePozitie(int Valoare);
  16. void DirectieStanga();
  17. void DirectieDreapta();
  18. void DirectieSus();
  19. void DirectieJos();
  20. void Spatiile(int &Spatii);
  21. int Validare();
  22. int Validare()
  23. {
  24.     for(int i=1; i<=Lungime-1; i++)
  25.         for(int j=1; j<=Lungime-1; j++)
  26.             if(a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j] || a[i][j]==0)
  27.                 return 1;
  28.     return 0;
  29. }
  30. void Spatiile(int &Spatii) ///Casute ramase goale
  31. {
  32.     Spatii=0;
  33.     for(int i=1; i<=Lungime; i++)
  34.         for(int j=1; j<=Lungime; j++)
  35.             if(a[i][j]==0)
  36.                 Spatii++;
  37. }
  38. int GenerareNumar() ///Viitor Numar pus intr-o casuta goala
  39. {
  40.     srand(time(NULL)+random);
  41.     random++;
  42.     int Numar=rand()%5;
  43.     if(Numar<4)
  44.         return 1;
  45.     else
  46.         return 2;
  47. }
  48. void GenerarePozitie(int Valoare) /// Viitoare Pozitie a Numarului pus intr-o casuta goala
  49. {
  50.     srand(time(NULL)+random);
  51.     random++;
  52.     int Pozitie=rand()%Spatii+1;
  53.     while(a[(Pozitie-1)/Lungime+1][(Pozitie-1)%Lungime+1]!=0 && Spatii>0)
  54.     {
  55.         Pozitie++;
  56.     }
  57.     if(Spatii>0)
  58.         a[(Pozitie-1)/Lungime+1][(Pozitie-1)%Lungime+1]=Valoare;
  59.  
  60. }
  61. void Start(int Lungime) ///Generarea Primelor 2 casute
  62. {
  63.     int Numar;
  64.     Numar=GenerareNumar();
  65.     GenerarePozitie(Numar);
  66.     Spatii--;
  67.     while(Spatii>-1)
  68.     {
  69.         Numar=GenerareNumar();
  70.         GenerarePozitie(Numar);
  71.         cout<<endl;
  72.         for(int i=1; i<=Lungime; i++)
  73.         {
  74.             for(int j=1; j<=Lungime; j++)
  75.                 cout<<pow(2,a[i][j])<<" ";
  76.             cout<<endl;
  77.         }
  78.         Spatiile(Spatii);
  79.         key=_getch();
  80.         if(key=='a' || key=='A') ///Stanga
  81.             DirectieStanga();
  82.         if(key=='d' || key=='D') ///Dreapta
  83.             DirectieDreapta();
  84.         if(key=='w' || key=='W') ///Sus
  85.             DirectieSus();
  86.         if(key=='s' || key=='S') ///Jos
  87.             DirectieJos();
  88.         if(Validare())
  89.             Spatii=1;
  90.             else
  91.                 Spatii=-1;
  92.         system("CLS");
  93.     }
  94. }
  95. void DirectieStanga() ///Cand apesi Stanga (A)
  96. {
  97.     for(int i=1; i<=Lungime; i++)
  98.         for(int j=1; j<=Lungime; j++)
  99.         {
  100.             int contor=j+1,ok=0;
  101.             while(a[i][contor]==0 && contor<=Lungime) ///Cautare prima casuta nenula dupa a[i][j]
  102.                 contor++;
  103.             if(contor==Lungime+1)
  104.             {
  105.                 j=Lungime+1;
  106.                 ok=2;
  107.             }
  108.             if(a[i][j]==a[i][contor] && a[i][j]!=0 && ok==0)
  109.             {
  110.                 a[i][j]++;
  111.                 ok=1;
  112.                 a[i][contor]=0;
  113.             }
  114.             if(a[i][j]==0 && ok==0)
  115.             {
  116.                 a[i][j]=a[i][contor];
  117.                 j--;
  118.                 a[i][contor]=0;
  119.             }
  120.         }
  121. }
  122. void DirectieDreapta() ///Cand apesi Dreapta (D)
  123. {
  124.     for(int i=Lungime; i>=1; i--)
  125.         for(int j=Lungime; j>=1; j--)
  126.         {
  127.             int contor=j-1,ok=0;
  128.             while(a[i][contor]==0 && contor>0) ///Cautare prima casuta nenula dupa a[i][j]
  129.                 contor--;
  130.             if(contor==0)
  131.             {
  132.                 j=0;
  133.                 ok=2;
  134.             }
  135.             if(a[i][j]==a[i][contor] && a[i][j]!=0 && ok==0)
  136.             {
  137.                 a[i][j]++;
  138.                 ok=1;
  139.                 a[i][contor]=0;
  140.             }
  141.             if(a[i][j]==0 && ok==0)
  142.             {
  143.                 a[i][j]=a[i][contor];
  144.                 j++;
  145.                 a[i][contor]=0;
  146.             }
  147.         }
  148. }
  149. void DirectieSus() ///Cand apesi Sus (W)
  150. {
  151.     for(int i=1; i<=Lungime; i++)
  152.         for(int j=1; j<=Lungime; j++)
  153.         {
  154.             int contor=j+1,ok=0;
  155.             while(a[contor][i]==0 && contor<=Lungime) ///Cautare prima casuta nenula dupa a[i][j]
  156.                 contor++;
  157.             if(contor==Lungime+1)
  158.             {
  159.                 j=Lungime+1;
  160.                 ok=2;
  161.             }
  162.             if(a[j][i]==a[contor][i] && a[j][i]!=0 && ok==0)
  163.             {
  164.                 a[j][i]++;
  165.                 ok=1;
  166.                 a[contor][i]=0;
  167.             }
  168.             if(a[j][i]==0 && ok==0)
  169.             {
  170.                 a[j][i]=a[contor][i];
  171.                 j--;
  172.                 a[contor][i]=0;
  173.             }
  174.         }
  175. }
  176. void DirectieJos() ///Cand apesi Jos (S)
  177. {
  178.     for(int i=Lungime; i>=1; i--)
  179.         for(int j=Lungime; j>=1; j--)
  180.         {
  181.             int contor=j-1,ok=0;
  182.             while(a[contor][i]==0 && contor>0) ///Cautare prima casuta nenula dupa a[i][j]
  183.                 contor--;
  184.             if(contor==0)
  185.             {
  186.                 j=0;
  187.                 ok=2;
  188.             }
  189.             if(a[j][i]==a[contor][i] && a[j][i]!=0 && ok==0)
  190.             {
  191.                 a[j][i]++;
  192.                 ok=1;
  193.                 a[contor][i]=0;
  194.             }
  195.             if(a[j][i]==0 && ok==0)
  196.             {
  197.                 a[j][i]=a[contor][i];
  198.                 j++;
  199.                 a[contor][i]=0;
  200.             }
  201.         }
  202. }
  203. void Final(int Lungime)
  204. {
  205.     cout<<endl;
  206.     for(int i=1; i<=Lungime; i++)
  207.     {
  208.         for(int j=1; j<=Lungime; j++)
  209.             cout<<pow(2,a[i][j])<<" ";
  210.         cout<<endl;
  211.     }
  212.     cout<<"Scorul tau este: "<<Score(Lungime);
  213.     delay(100000);
  214. }
  215. int Score(int Lungime)
  216. {
  217.     int scor=0;
  218.     for(int i=1; i<=Lungime; i++)
  219.         for(int j=1; j<=Lungime; j++)
  220.             scor=scor+pow(2,a[i][j]);
  221.     return scor;
  222. }
  223. int main()
  224. {
  225.     cout<<"Jocul 2048 se va genera in L x L. Introduceti L:";
  226.     cin>>Lungime;
  227.     Spatii=Lungime*Lungime;
  228.     Start(Lungime);
  229.     Final(Lungime);
  230.     return 0;
  231. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top