Cod sursa(job #190596)

Utilizator kojocojocaru aurelian kojo Data 23 mai 2008 16:50:41
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.25 kb

#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);
}