Тема: Хрестики - нулики на безмежному полі
Привіт)
в мене виникла помилка при перевірці умови на перемогу гравців...помилка полягає в наступному:
відрахунок 5-х хрестиків/нуликів починається з головної діагоналі, тобто якщо почати ставити хрестик вище на одну клітинку від головної діагоналі то на стільки ж більше потрібно буде доставити хрестиків внизу(надіюсь зрозуміло пояснив )
вот код перевірки умов(P.S.можу скинути весь проект якщо знадобиться):
//---Натиск лівою клавішею на віконечку(розміщення хрестика або нулика)
void MousePressed(int button,int state,int x,int y)
{
if(button==GLUT_LEFT_BUTTON && state==GLUT_DOWN)
{
A.row=y/A.scale;
A.col=x/A.scale;
if(a[A.row][A.col].value==-1)
a[A.row][A.col].value=A.gamer;
else
return ;
CheckVertical();
CheckHorizontal();
CheckMainDiagonal();
CheckNotMainDiagonal();
CheckAll();
A.gamer=!A.gamer;
++A.count;
PrintCard();
}
}
//---функція для перевірки по вертикалі
void CheckVertical()
{
bool state=0;
for(int i=A.row;i<A.row+4;i++)
{
if(a[i][A.col].value==A.gamer){}
else
{
state=1;
break;
}
}
if(!state)
{
exit(1);
cout<<"Вертикальна перемога у "<<A.gamer<<endl;
}
}
//---Функція для перевірки по горизонталі
void CheckHorizontal()
{
bool state=0;
for(int i=A.col;i<A.col+4;i++)
{
if(a[A.row][i].value==A.gamer){}
else
{
state=1;
break;
}
}
if(!state)
{
cout<<"Горизонтальна перемога перемога у "<<A.gamer<<endl;
exit(1);
}
}
//---Функція для перевірки на головній діагоналі
void CheckMainDiagonal()
{
bool state=0;
for(int i=A.col;i<A.col+4;i++)
{
if(a[i][i].value==A.gamer){}
else
{
state=1;
break;
}
}
if(!state)
{
cout<<"Дiагональна перемога перемога у "<<A.gamer<<endl;
exit(1);
}
for(int i=A.col;i<A.col+4;i++)
{
if(a[i][i].value==!A.gamer){}
else
{
state=1;
break;
}
}
if(!state)
{
cout<<"Діагональна перемога у "<<!A.gamer<<endl;
exit(1);
}
}
//---Функція для перевірки на бічній діагоналі
void CheckNotMainDiagonal()
{
bool state=0;
for(int i=A.row,j=A.col-1;i<A.col+4;i++,j++)
{
if(a[i][j].value==A.gamer){}
else
{
state=1;
break;
}
}
if(!state)
{
cout<<"Перемога по бiчнiй дiагоналi у "<<A.gamer<<endl;
exit(1);
}
}
//---Функція для перевірки нічиї
void CheckAll()
{
if(A.count>=A.rozm*A.rozm-1)
{
cout<<"НIЧИЯ!!!"<<endl;
exit(1);
}
}