Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <conio.h>
- #include <graphics.h> ///graficele
- #include <ctime> /// time(),srand()
- #include <stdio.h> ///pentru sprintf
- #include <stdlib.h> ///getch() si altele
- #include <cmath>
- using namespace std;
- int a[10][10],Lungime,Spatii,random;
- char key;
- void Start(int Lungime);
- void Final(int Lungime);
- int Score(int Lungime);
- int GenerareNumar();
- void GenerarePozitie(int Valoare);
- void DirectieStanga();
- void DirectieDreapta();
- void DirectieSus();
- void DirectieJos();
- void Spatiile(int &Spatii);
- int Validare();
- int Validare()
- {
- for(int i=1; i<=Lungime-1; i++)
- for(int j=1; j<=Lungime-1; j++)
- if(a[i][j]==a[i][j+1] || a[i][j]==a[i+1][j] || a[i][j]==0)
- return 1;
- return 0;
- }
- void Spatiile(int &Spatii) ///Casute ramase goale
- {
- Spatii=0;
- for(int i=1; i<=Lungime; i++)
- for(int j=1; j<=Lungime; j++)
- if(a[i][j]==0)
- Spatii++;
- }
- int GenerareNumar() ///Viitor Numar pus intr-o casuta goala
- {
- srand(time(NULL)+random);
- random++;
- int Numar=rand()%5;
- if(Numar<4)
- return 1;
- else
- return 2;
- }
- void GenerarePozitie(int Valoare) /// Viitoare Pozitie a Numarului pus intr-o casuta goala
- {
- srand(time(NULL)+random);
- random++;
- int Pozitie=rand()%Spatii+1;
- while(a[(Pozitie-1)/Lungime+1][(Pozitie-1)%Lungime+1]!=0 && Spatii>0)
- {
- Pozitie++;
- }
- if(Spatii>0)
- a[(Pozitie-1)/Lungime+1][(Pozitie-1)%Lungime+1]=Valoare;
- }
- void Start(int Lungime) ///Generarea Primelor 2 casute
- {
- int Numar;
- Numar=GenerareNumar();
- GenerarePozitie(Numar);
- Spatii--;
- while(Spatii>-1)
- {
- Numar=GenerareNumar();
- GenerarePozitie(Numar);
- cout<<endl;
- for(int i=1; i<=Lungime; i++)
- {
- for(int j=1; j<=Lungime; j++)
- cout<<pow(2,a[i][j])<<" ";
- cout<<endl;
- }
- Spatiile(Spatii);
- key=_getch();
- if(key=='a' || key=='A') ///Stanga
- DirectieStanga();
- if(key=='d' || key=='D') ///Dreapta
- DirectieDreapta();
- if(key=='w' || key=='W') ///Sus
- DirectieSus();
- if(key=='s' || key=='S') ///Jos
- DirectieJos();
- if(Validare())
- Spatii=1;
- else
- Spatii=-1;
- system("CLS");
- }
- }
- void DirectieStanga() ///Cand apesi Stanga (A)
- {
- for(int i=1; i<=Lungime; i++)
- for(int j=1; j<=Lungime; j++)
- {
- int contor=j+1,ok=0;
- while(a[i][contor]==0 && contor<=Lungime) ///Cautare prima casuta nenula dupa a[i][j]
- contor++;
- if(contor==Lungime+1)
- {
- j=Lungime+1;
- ok=2;
- }
- if(a[i][j]==a[i][contor] && a[i][j]!=0 && ok==0)
- {
- a[i][j]++;
- ok=1;
- a[i][contor]=0;
- }
- if(a[i][j]==0 && ok==0)
- {
- a[i][j]=a[i][contor];
- j--;
- a[i][contor]=0;
- }
- }
- }
- void DirectieDreapta() ///Cand apesi Dreapta (D)
- {
- for(int i=Lungime; i>=1; i--)
- for(int j=Lungime; j>=1; j--)
- {
- int contor=j-1,ok=0;
- while(a[i][contor]==0 && contor>0) ///Cautare prima casuta nenula dupa a[i][j]
- contor--;
- if(contor==0)
- {
- j=0;
- ok=2;
- }
- if(a[i][j]==a[i][contor] && a[i][j]!=0 && ok==0)
- {
- a[i][j]++;
- ok=1;
- a[i][contor]=0;
- }
- if(a[i][j]==0 && ok==0)
- {
- a[i][j]=a[i][contor];
- j++;
- a[i][contor]=0;
- }
- }
- }
- void DirectieSus() ///Cand apesi Sus (W)
- {
- for(int i=1; i<=Lungime; i++)
- for(int j=1; j<=Lungime; j++)
- {
- int contor=j+1,ok=0;
- while(a[contor][i]==0 && contor<=Lungime) ///Cautare prima casuta nenula dupa a[i][j]
- contor++;
- if(contor==Lungime+1)
- {
- j=Lungime+1;
- ok=2;
- }
- if(a[j][i]==a[contor][i] && a[j][i]!=0 && ok==0)
- {
- a[j][i]++;
- ok=1;
- a[contor][i]=0;
- }
- if(a[j][i]==0 && ok==0)
- {
- a[j][i]=a[contor][i];
- j--;
- a[contor][i]=0;
- }
- }
- }
- void DirectieJos() ///Cand apesi Jos (S)
- {
- for(int i=Lungime; i>=1; i--)
- for(int j=Lungime; j>=1; j--)
- {
- int contor=j-1,ok=0;
- while(a[contor][i]==0 && contor>0) ///Cautare prima casuta nenula dupa a[i][j]
- contor--;
- if(contor==0)
- {
- j=0;
- ok=2;
- }
- if(a[j][i]==a[contor][i] && a[j][i]!=0 && ok==0)
- {
- a[j][i]++;
- ok=1;
- a[contor][i]=0;
- }
- if(a[j][i]==0 && ok==0)
- {
- a[j][i]=a[contor][i];
- j++;
- a[contor][i]=0;
- }
- }
- }
- void Final(int Lungime)
- {
- cout<<endl;
- for(int i=1; i<=Lungime; i++)
- {
- for(int j=1; j<=Lungime; j++)
- cout<<pow(2,a[i][j])<<" ";
- cout<<endl;
- }
- cout<<"Scorul tau este: "<<Score(Lungime);
- delay(100000);
- }
- int Score(int Lungime)
- {
- int scor=0;
- for(int i=1; i<=Lungime; i++)
- for(int j=1; j<=Lungime; j++)
- scor=scor+pow(2,a[i][j]);
- return scor;
- }
- int main()
- {
- cout<<"Jocul 2048 se va genera in L x L. Introduceti L:";
- cin>>Lungime;
- Spatii=Lungime*Lungime;
- Start(Lungime);
- Final(Lungime);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement