Advertisement
Guest User

Untitled

a guest
Dec 11th, 2018
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.68 KB | None | 0 0
  1. #include <iostream>
  2. #include <winbgim.h>
  3. #include <stdlib.h>
  4. #include <cmath>
  5. using namespace std;
  6.  
  7. #define MAX 8
  8. #define JUCATOR1 1
  9. #define JUCATOR2 2
  10. #define POSIBIL 3
  11. #define LATURA 96
  12. #define MARGINE_V 60
  13. #define MARGINE_O 30
  14.  
  15. #define debug(x,y) cout<<x<<' '<<y<<'\n';
  16.  
  17. int tabla[MAX][MAX];
  18. int scor_j1, scor_j2, timp_j, mutari_ramase;
  19. int culoare_fundal, culoare_j1, culoare_j2, culoare_lin, culoare_posibil;
  20. bool timp_expirat, desfasurare_joc;
  21. void meniuPrincipal()
  22. {
  23.  
  24. }
  25. void initializareTabla()
  26. {
  27. scor_j1 = scor_j2 = 0;
  28.  
  29. for(int i = 0; i < MAX; i++)
  30. if(i%2 == 1)
  31. {
  32. // jucator negru
  33. tabla[0][i] = JUCATOR2;
  34. tabla[1][i] = 0;
  35.  
  36. // jucator alb
  37. tabla[MAX-2][i] = JUCATOR1;
  38. tabla[MAX-1][i] = 0;
  39. }
  40. else
  41. {
  42. // jucator negru
  43. tabla[0][i] = 0;
  44. tabla[1][i] = JUCATOR2;
  45.  
  46. // jucator alb
  47. tabla[MAX-2][i] = 0;
  48. tabla[MAX-1][i] = JUCATOR1;
  49. }
  50.  
  51. for(int i = 2; i < MAX-3; i++)
  52. for(int j = 0; j < MAX; j++) tabla[i][j] = 0; // zone libere
  53. }
  54. void chenarTablaDeJoc()
  55. {
  56. //am descoperit prin experiment ca instructiunile urmatoare creeaza un model interesant
  57. char* p="t";
  58. setfillpattern(p,GREEN);
  59. //latura estica
  60. int x1=LATURA*MAX+MARGINE_O+1,x2=x1+10,y1=MARGINE_V,y2=10+MAX*LATURA+MARGINE_V;
  61. bar(x1,y1,x2,y2);
  62. //latura nordica
  63. x1=MARGINE_O;x2=LATURA*MAX+MARGINE_O+11;y2=MARGINE_V;y1=y2-10;
  64. bar(x1,y1,x2,y2);
  65. //latura sudica
  66. x1=MARGINE_O;x2=LATURA*MAX+MARGINE_O+10;y1=MAX*LATURA+MARGINE_V+1;y2=y1+10;
  67. bar(x1,y1,x2,y2);
  68. //latura vestica
  69. x1=MARGINE_O-10;x2=MARGINE_O-1;y1=MARGINE_V-11;y2=LATURA*MAX+MARGINE_V+11;
  70. bar(x1,y1,x2,y2);
  71. }
  72. void desenareMeniuJoc()
  73. {
  74. //desenare tabla de joc
  75. int culoare;
  76.  
  77. for(int i = 0; i < MAX; i++)
  78. for(int j = 0; j < MAX; j++)
  79. {
  80. int x1, y1, x2, y2;
  81. x1 = j*LATURA + MARGINE_O;
  82. y1 = i*LATURA + MARGINE_V;
  83.  
  84. x2 = (j+1)*LATURA + MARGINE_O;
  85. y2 = (i+1)*LATURA + MARGINE_V;
  86.  
  87. if(tabla[i][j] == JUCATOR2) culoare = culoare_j2;
  88. else if(tabla[i][j] == JUCATOR1) culoare = culoare_j1;
  89. else culoare = culoare_fundal;
  90.  
  91. setfillstyle(SOLID_FILL, culoare);
  92. bar(x1,y1,x2,y2);
  93.  
  94. setcolor(culoare_lin);
  95. rectangle(x1,y1,x2,y2);
  96. }
  97. chenarTablaDeJoc();
  98.  
  99.  
  100.  
  101. }
  102.  
  103. int turaJucator() { return mutari_ramase%2 + 1; }
  104.  
  105. bool esteInauntru(int linie, int coloana) { return linie >= 0 && linie < MAX && coloana >= 0 && coloana < MAX; }
  106.  
  107. bool esteBlocat(int linie, int coloana)
  108. {
  109. int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
  110. int blocaje = 0;
  111.  
  112. for(int d = 0; d < 4; d++)
  113. {
  114. int i = linie + di[d];
  115. int j = coloana + dj[d];
  116.  
  117. if(i < 0 || i >= MAX || j < 0 || j >= MAX || tabla[i][j] != 0) blocaje++;
  118. }
  119.  
  120. return blocaje == 4;
  121. }
  122.  
  123. void determinaPozitie(int &linie, int &coloana)
  124. {
  125. int x, y;
  126. x = mousex();
  127. y = mousey();
  128.  
  129. linie = floor((1.0*y-MARGINE_V)/LATURA);
  130. coloana = floor((1.0*x-MARGINE_O)/LATURA);
  131. }
  132.  
  133. void desenarePiesa(int linie, int coloana, int cod)
  134. {
  135. int x1, x2, y1, y2, culoare;
  136. x1 = coloana*LATURA+MARGINE_O;
  137. y1 = linie*LATURA+MARGINE_V;
  138.  
  139. x2 = (coloana+1)*LATURA+MARGINE_O;
  140. y2 = (linie+1)*LATURA+MARGINE_V;
  141.  
  142. if(cod == 1) culoare = culoare_j1;
  143. else if(cod == 2) culoare = culoare_j2;
  144. else if(cod == 3) culoare = culoare_posibil;
  145. else if(cod == 0) culoare = culoare_fundal;
  146.  
  147. setfillstyle(SOLID_FILL, culoare);
  148. bar(x1,y1,x2,y2);
  149.  
  150. setcolor(culoare_lin);
  151. rectangle(x1,y1,x2,y2);
  152. }
  153.  
  154. void stergerePiesa(int linie, int coloana)
  155. {
  156. int x1, x2, y1, y2;
  157.  
  158. tabla[linie][coloana] = 0;
  159.  
  160. x1 = coloana*LATURA+MARGINE_O;
  161. y1 = linie*LATURA+MARGINE_V;
  162.  
  163. x2 = (coloana+1)*LATURA+MARGINE_O;
  164. y2 = (linie+1)*LATURA+MARGINE_V;
  165.  
  166. setfillstyle(SOLID_FILL, culoare_fundal);
  167. bar(x1,y1,x2,y2);
  168.  
  169. setcolor(culoare_lin);
  170. rectangle(x1,y1,x2,y2);
  171. }
  172.  
  173. void desenarePosibile(int linie, int coloana)
  174. {
  175. int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
  176.  
  177. for(int d = 0; d < 4; d++)
  178. {
  179. int i = linie + di[d];
  180. int j = coloana + dj[d];
  181.  
  182. if(esteInauntru(i,j) && tabla[i][j] == 0)
  183. {
  184. tabla[i][j] = POSIBIL;
  185. desenarePiesa(i,j,POSIBIL);
  186. }
  187. }
  188. }
  189.  
  190. void stergePosibile(int linie, int coloana)
  191. {
  192. int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
  193.  
  194. for(int d = 0; d < 4; d++)
  195. {
  196. int i = linie + di[d];
  197. int j = coloana + dj[d];
  198.  
  199. if(esteInauntru(i,j) && tabla[i][j] == POSIBIL)
  200. {
  201. tabla[i][j] = 0;
  202. desenarePiesa(i,j,0);
  203. }
  204. }
  205. }
  206.  
  207. void mutarePiesa()
  208. {
  209. bool mutare_corecta = false;
  210. bool skip_mutare = false;
  211.  
  212. do
  213. {
  214. if(ismouseclick(WM_LBUTTONDOWN))
  215. {
  216. clearmouseclick(WM_LBUTTONDOWN);
  217.  
  218. int linie1, coloana1;
  219. determinaPozitie(linie1,coloana1);
  220.  
  221. if(esteInauntru(linie1,coloana1) && tabla[linie1][coloana1] == turaJucator())
  222. {
  223. desenarePosibile(linie1,coloana1);
  224.  
  225. do
  226. {
  227. if(ismouseclick(WM_LBUTTONDOWN))
  228. {
  229. clearmouseclick(WM_LBUTTONDOWN);
  230.  
  231. int linie2, coloana2;
  232. determinaPozitie(linie2,coloana2);
  233.  
  234. if(esteInauntru(linie2,coloana2) && abs(linie1-linie2) == 1 && abs(coloana1-coloana2) == 1 && (tabla[linie2][coloana2] == 0 || tabla[linie2][coloana2] == POSIBIL))
  235. {
  236. mutare_corecta = true;
  237.  
  238. tabla[linie1][coloana1] = 0;
  239. stergerePiesa(linie1,coloana1);
  240.  
  241. tabla[linie2][coloana2] = turaJucator();
  242. desenarePiesa(linie2,coloana2,turaJucator());
  243. }
  244.  
  245. if(mutare_corecta == false) break;
  246. }
  247. else if(ismouseclick(WM_RBUTTONDOWN)) break;
  248. }while(timp_expirat == false && desfasurare_joc == true && mutare_corecta == false && skip_mutare == false);
  249.  
  250. stergePosibile(linie1,coloana1);
  251. }
  252. }
  253. else if(ismouseclick(WM_RBUTTONDOWN))
  254. {
  255. clearmouseclick(WM_RBUTTONDOWN);
  256.  
  257. int linie1, coloana1;
  258. determinaPozitie(linie1,coloana1);
  259.  
  260. if(tabla[linie1][coloana1] != 0 && esteInauntru(linie1,coloana1) && esteBlocat(linie1,coloana1))
  261. {
  262. if(tabla[linie1][coloana1] == JUCATOR1) scor_j2++;
  263. else scor_j1++;
  264.  
  265. stergerePiesa(linie1,coloana1);
  266. }
  267. else
  268. {
  269. timp_j -= 0;
  270. }
  271. }
  272. }while(timp_expirat == false && desfasurare_joc == true && mutare_corecta == false && skip_mutare == false);
  273.  
  274. mutari_ramase++;
  275. }
  276.  
  277. int main()
  278. {
  279. initwindow(1200,900);
  280.  
  281. // setari default
  282. culoare_j1 = WHITE;
  283. culoare_j2 = DARKGRAY;
  284. culoare_lin = BLACK;
  285. culoare_fundal = LIGHTGRAY;
  286. culoare_posibil = LIGHTGREEN;
  287.  
  288. mutari_ramase = 30;
  289.  
  290. timp_expirat = false; desfasurare_joc = true;
  291.  
  292. initializareTabla();
  293. desenareMeniuJoc();
  294.  
  295. // joc
  296. while(1)
  297. {
  298. mutarePiesa();
  299. }
  300.  
  301. getch();
  302. closegraph();
  303. return 0;
  304. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement