Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <winbgim.h>
- #include <stdlib.h>
- #include <cmath>
- using namespace std;
- #define MAX 8
- #define JUCATOR1 1
- #define JUCATOR2 2
- #define POSIBIL 3
- #define LATURA 96
- #define MARGINE_V 60
- #define MARGINE_O 30
- #define debug(x,y) cout<<x<<' '<<y<<'\n';
- int tabla[MAX][MAX];
- int scor_j1, scor_j2, timp_j, mutari_ramase;
- int culoare_fundal, culoare_j1, culoare_j2, culoare_lin, culoare_posibil;
- bool timp_expirat, desfasurare_joc;
- void meniuPrincipal()
- {
- }
- void initializareTabla()
- {
- scor_j1 = scor_j2 = 0;
- for(int i = 0; i < MAX; i++)
- if(i%2 == 1)
- {
- // jucator negru
- tabla[0][i] = JUCATOR2;
- tabla[1][i] = 0;
- // jucator alb
- tabla[MAX-2][i] = JUCATOR1;
- tabla[MAX-1][i] = 0;
- }
- else
- {
- // jucator negru
- tabla[0][i] = 0;
- tabla[1][i] = JUCATOR2;
- // jucator alb
- tabla[MAX-2][i] = 0;
- tabla[MAX-1][i] = JUCATOR1;
- }
- for(int i = 2; i < MAX-3; i++)
- for(int j = 0; j < MAX; j++) tabla[i][j] = 0; // zone libere
- }
- void chenarTablaDeJoc()
- {
- //am descoperit prin experiment ca instructiunile urmatoare creeaza un model interesant
- char* p="t";
- setfillpattern(p,GREEN);
- //latura estica
- int x1=LATURA*MAX+MARGINE_O+1,x2=x1+10,y1=MARGINE_V,y2=10+MAX*LATURA+MARGINE_V;
- bar(x1,y1,x2,y2);
- //latura nordica
- x1=MARGINE_O;x2=LATURA*MAX+MARGINE_O+11;y2=MARGINE_V;y1=y2-10;
- bar(x1,y1,x2,y2);
- //latura sudica
- x1=MARGINE_O;x2=LATURA*MAX+MARGINE_O+10;y1=MAX*LATURA+MARGINE_V+1;y2=y1+10;
- bar(x1,y1,x2,y2);
- //latura vestica
- x1=MARGINE_O-10;x2=MARGINE_O-1;y1=MARGINE_V-11;y2=LATURA*MAX+MARGINE_V+11;
- bar(x1,y1,x2,y2);
- }
- void desenareMeniuJoc()
- {
- //desenare tabla de joc
- int culoare;
- for(int i = 0; i < MAX; i++)
- for(int j = 0; j < MAX; j++)
- {
- int x1, y1, x2, y2;
- x1 = j*LATURA + MARGINE_O;
- y1 = i*LATURA + MARGINE_V;
- x2 = (j+1)*LATURA + MARGINE_O;
- y2 = (i+1)*LATURA + MARGINE_V;
- if(tabla[i][j] == JUCATOR2) culoare = culoare_j2;
- else if(tabla[i][j] == JUCATOR1) culoare = culoare_j1;
- else culoare = culoare_fundal;
- setfillstyle(SOLID_FILL, culoare);
- bar(x1,y1,x2,y2);
- setcolor(culoare_lin);
- rectangle(x1,y1,x2,y2);
- }
- chenarTablaDeJoc();
- }
- int turaJucator() { return mutari_ramase%2 + 1; }
- bool esteInauntru(int linie, int coloana) { return linie >= 0 && linie < MAX && coloana >= 0 && coloana < MAX; }
- bool esteBlocat(int linie, int coloana)
- {
- int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
- int blocaje = 0;
- for(int d = 0; d < 4; d++)
- {
- int i = linie + di[d];
- int j = coloana + dj[d];
- if(i < 0 || i >= MAX || j < 0 || j >= MAX || tabla[i][j] != 0) blocaje++;
- }
- return blocaje == 4;
- }
- void determinaPozitie(int &linie, int &coloana)
- {
- int x, y;
- x = mousex();
- y = mousey();
- linie = floor((1.0*y-MARGINE_V)/LATURA);
- coloana = floor((1.0*x-MARGINE_O)/LATURA);
- }
- void desenarePiesa(int linie, int coloana, int cod)
- {
- int x1, x2, y1, y2, culoare;
- x1 = coloana*LATURA+MARGINE_O;
- y1 = linie*LATURA+MARGINE_V;
- x2 = (coloana+1)*LATURA+MARGINE_O;
- y2 = (linie+1)*LATURA+MARGINE_V;
- if(cod == 1) culoare = culoare_j1;
- else if(cod == 2) culoare = culoare_j2;
- else if(cod == 3) culoare = culoare_posibil;
- else if(cod == 0) culoare = culoare_fundal;
- setfillstyle(SOLID_FILL, culoare);
- bar(x1,y1,x2,y2);
- setcolor(culoare_lin);
- rectangle(x1,y1,x2,y2);
- }
- void stergerePiesa(int linie, int coloana)
- {
- int x1, x2, y1, y2;
- tabla[linie][coloana] = 0;
- x1 = coloana*LATURA+MARGINE_O;
- y1 = linie*LATURA+MARGINE_V;
- x2 = (coloana+1)*LATURA+MARGINE_O;
- y2 = (linie+1)*LATURA+MARGINE_V;
- setfillstyle(SOLID_FILL, culoare_fundal);
- bar(x1,y1,x2,y2);
- setcolor(culoare_lin);
- rectangle(x1,y1,x2,y2);
- }
- void desenarePosibile(int linie, int coloana)
- {
- int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
- for(int d = 0; d < 4; d++)
- {
- int i = linie + di[d];
- int j = coloana + dj[d];
- if(esteInauntru(i,j) && tabla[i][j] == 0)
- {
- tabla[i][j] = POSIBIL;
- desenarePiesa(i,j,POSIBIL);
- }
- }
- }
- void stergePosibile(int linie, int coloana)
- {
- int di[4] = {-1,-1,1,1}, dj[4] = {-1,1,-1,1};
- for(int d = 0; d < 4; d++)
- {
- int i = linie + di[d];
- int j = coloana + dj[d];
- if(esteInauntru(i,j) && tabla[i][j] == POSIBIL)
- {
- tabla[i][j] = 0;
- desenarePiesa(i,j,0);
- }
- }
- }
- void mutarePiesa()
- {
- bool mutare_corecta = false;
- bool skip_mutare = false;
- do
- {
- if(ismouseclick(WM_LBUTTONDOWN))
- {
- clearmouseclick(WM_LBUTTONDOWN);
- int linie1, coloana1;
- determinaPozitie(linie1,coloana1);
- if(esteInauntru(linie1,coloana1) && tabla[linie1][coloana1] == turaJucator())
- {
- desenarePosibile(linie1,coloana1);
- do
- {
- if(ismouseclick(WM_LBUTTONDOWN))
- {
- clearmouseclick(WM_LBUTTONDOWN);
- int linie2, coloana2;
- determinaPozitie(linie2,coloana2);
- if(esteInauntru(linie2,coloana2) && abs(linie1-linie2) == 1 && abs(coloana1-coloana2) == 1 && (tabla[linie2][coloana2] == 0 || tabla[linie2][coloana2] == POSIBIL))
- {
- mutare_corecta = true;
- tabla[linie1][coloana1] = 0;
- stergerePiesa(linie1,coloana1);
- tabla[linie2][coloana2] = turaJucator();
- desenarePiesa(linie2,coloana2,turaJucator());
- }
- if(mutare_corecta == false) break;
- }
- else if(ismouseclick(WM_RBUTTONDOWN)) break;
- }while(timp_expirat == false && desfasurare_joc == true && mutare_corecta == false && skip_mutare == false);
- stergePosibile(linie1,coloana1);
- }
- }
- else if(ismouseclick(WM_RBUTTONDOWN))
- {
- clearmouseclick(WM_RBUTTONDOWN);
- int linie1, coloana1;
- determinaPozitie(linie1,coloana1);
- if(tabla[linie1][coloana1] != 0 && esteInauntru(linie1,coloana1) && esteBlocat(linie1,coloana1))
- {
- if(tabla[linie1][coloana1] == JUCATOR1) scor_j2++;
- else scor_j1++;
- stergerePiesa(linie1,coloana1);
- }
- else
- {
- timp_j -= 0;
- }
- }
- }while(timp_expirat == false && desfasurare_joc == true && mutare_corecta == false && skip_mutare == false);
- mutari_ramase++;
- }
- int main()
- {
- initwindow(1200,900);
- // setari default
- culoare_j1 = WHITE;
- culoare_j2 = DARKGRAY;
- culoare_lin = BLACK;
- culoare_fundal = LIGHTGRAY;
- culoare_posibil = LIGHTGREEN;
- mutari_ramase = 30;
- timp_expirat = false; desfasurare_joc = true;
- initializareTabla();
- desenareMeniuJoc();
- // joc
- while(1)
- {
- mutarePiesa();
- }
- getch();
- closegraph();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement