Advertisement
Guest User

Untitled

a guest
May 21st, 2019
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.94 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement