#include<iostream.h>
#include<graphics.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<dos.h>
#include<alloc.h>
int a,tub[7][8];
void initial()
{
setcolor(1);
rectangle(129,179,411,361);
for(int i=1;i<=6;i++)
for(int j=1;j<=7;j++)
{setcolor(1);
int x1=90+j*40,y1=150+i*30,x2=90+j*40+40,y2=150+i*30+30;
rectangle(x1,y1,x2,y2);x1++;y1++;x2--;y2--;rectangle(x1,y1,x2,y2);x1++;y1++;x2--;y2--;
setcolor(7);
while(y1<=y2)
{delay(5);rectangle(x1,y1,x2,y2);x1++;y1++;x2--;y2--;}
}
}
int verific()
{for(int i=1;i<=7;i++)
if(tub[1][i]==0)
return 1;
return 0;
}
int citire(char q[2])
{char x[11],p[222]="";int y;
cin>>x;
if(strlen(x)!=1)
{bar(1,1,640,100);
outtextxy(4,4,"valoarea introdusa nu este corecta, introduceti alta valoare ");return citire(q);}
else
{y=x[0]-'0';
if(y>7||y<1)
{bar(1,1,640,100);
outtextxy(4,4,"valoarea introdusa nu este corecta, introduceti alta valoare ");return citire(q);}
else
if(tub[1][y])
{bar(1,1,640,100);
strcat(p,"pe coloana ");strcat(p,q);strcat(p," nu se mai pot introduce piese, alegeti alta coloana");
outtextxy(4,4,p);return citire(q);}
else return y;
}
}
/* subprogramul citire citeste coloana si verifica daca valoarea introdusa e corecta
returneaza numarul coloanei in care vrea gamerul sa puna piesa
*/
int atrib(int y,int a)
{int ga=0;
for(int i=6;i>=1&&!ga;i--)
if(tub[i][y]==0)
{tub[i][y]=a;ga=1;}
int x1=90+y*40+2,x2=90+y*40+40-2,y2=150+(i+2)*30-2,y1=150+(i+1)*30+2;
while(y1<=y2)
{delay(50);
rectangle(x1,y1,x2,y2);x1++;y1++;x2--;y2--;}
return i+1;
}
int verif(int x,int y)
{int i=x,s=0,j;
while(tub[i][y]==tub[x][y])
{s++;i++;}
if(s>=4)
return 1;
i=x;s=0;j=y;
while(tub[i][j]==tub[x][y])
{i--;j--;s++;}
i=x;j=y;
while(tub[i][j]==tub[x][y])
{i++;j++;s++;}
if(s>4)
return 1;
i=x;s=0;j=y;
while(tub[i][j]==tub[x][y])
{i--;j++;s++;}
i=x;j=y;
while(tub[i][j]==tub[x][y])
{i++;j--;s++;}
if(s>4)
return 1;
i=y;j=y;s=0;
while(tub[x][i]==tub[x][y])
{i--;s++;}
while(tub[x][j]==tub[x][y])
{j++;s++;}
if(s>4)
return 1;
return 0;
}
void joc_secund(int a)
{int y;
char q[2],p[222]="";
if(a==1)
setcolor(4);
else
setcolor(14);
itoa(a,q,10);
if(verific())
{strcat(p,"jucatorul ");strcat(p,q);strcat(p," introduce numarul coloanei pe care vrea sa puna piesa \n");
outtextxy(10,4,p);y=citire(q);}
int x=atrib(y,a);// in matrice se pune a(1 sau 2) pe coloana y; x- numarul coloanei
/*..........................
..
.................................
..................................
*/
if(verif(x,y)) // verific daca nu cumva s-a terminat jocul
{char v[222]="";
setfillstyle(SOLID_FILL,BLACK);
bar(0,0,640,100);
strcat(v,"jocul s-a terminat, a castigat jucatorul ");strcat(v,q);
outtextxy(4,4,v);getch();}
else
{//getimage(0,0,kojo);
setfillstyle(SOLID_FILL,BLACK);bar(0,0,640,100);joc_secund(a%2+1);}
}
void main()
{ randomize();
a=(random(10000)/5000+1);
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "c:\\borlandc\\bgi");
initial();
joc_secund(a);
}