//=========================================================================================================================
#include<stdio.h>
//#include<conio.h>
#include<string.h>
#define u8 unsigned char
//=========================================================================================================================
int OccupyPolygon(int j,int k,int n,int m) //функція введення координат
{
printf("Coordinats 4 'x' "); //координати для хрестиків
scanf("%1d%1d", &j,&k);
printf("coordinats 4 '0' "); //координати для нуликів
scanf("%1d%1d", &n,&m);
return j,k,n,m;
}
//=========================================================================================================================
int CheckPolygon(int j,int k,int n,int m) //перевірка введених значень на валідність
{
if((j==0) || (k==0) || (n==0) || (m==0)){
printf("wrong!!!try again!!!");
return 0;}
if((j == n) && (k == m)){
printf("This quater is occupied by 'x' !!! ");
return 0;}
if((j > 3) || (k > 3) || (n > 3) || (m > 3)){
printf("wrong!!!try again!!!");
return 0;}
return 1;
}
//=========================================================================================================================
char PrintPolygon(int j,int k,int n,int m,char **buf)//заповнення клітинок за координатами
// і виведення на екран
{
if(buf[j][k]=='*')
buf[j][k]='x';
else printf("Occupied already!!!");
if(buf[n][m]=='*')
buf[n][m]='0';
else printf("Occupied already!!!");
for(int v=1;v<4;v++){
printf("%s \n",buf[v]);
}
return **buf;
}
//========================================================================================================================
u8 cmp(char* buff, char c)
{
for(int i=1;i<4;i++){
if ( buff[i] != c &&
buff[i + 3] != c && //0 1 2 3
buff[i + 6] != c) //4 5 6 7
return 0;
else break;}
//8 9 10 11
return 1; //12 13 14 15
}
//===============================================================================================
int crosscheck(char* buf,char c)
{
if(((buf[1]==c) && (buf[7]==c) && (buf[13]==c)) ||
((buf[3]==c) && (buf[7]==c) && (buf[11]==c))){
return 1;
}
return 0;
}
//========================================================================================================================
int ChoseWinner(char** buf)
{
char* s= " xxx";
char f= 'x';
char* q= " 000";
char o= '0';
if((strstr(buf[1],s)!= NULL) || (strstr(buf[2],s)!=NULL) || (strstr(buf[3],s)!=NULL)
|| (cmp((char *)buf,f)!= 0) || (crosscheck((char*)buf,f)!=0)){
printf("x winz!");
return 1;}
else if((strstr(buf[1],q)!= NULL) || (strstr(buf[2],q)!=NULL) || (strstr(buf[3],q)!=NULL)
|| (cmp((char *)buf,o)!= 0) || (crosscheck((char* )buf,o)!=0)){
printf("0 winz!");
return 1;
}
return 0;
}
//========================================================================================================================
int main()
{
int i=1,j,k,n,m;
char buf[4][4]={" ***"," ***"," ***"};
for(i;i<9;i++){
OccupyPolygon(j,k,n,m);
if(CheckPolygon(j,k,n,m)==0){
i--; continue;
}
PrintPolygon(j,k,n,m,(char **)buf);
if(ChoseWinner((char **)buf)==0){
i--; continue;
}
}
//getch();
return 0;
}