开局的图片中,作为获胜方的最后一子并没有显示出来。不过跟判断胜负的函数无关。可以在上面的程序进行设计是否显示出。这里用的是十五×十五的棋盘。
int isWin(char chess[15][15], int n, int m)//n代表最近一次落点的行坐标,m代表列坐标
{ int a=0,i,b=n,c=m,g=1;//g值的变化用来判断最近一次落点的坐标附件是否有四颗与之
相连的棋子,a作为返回值,如果a为1,则获胜,当然这里只提供一种思路,是否使用自己斟酌,a作为判断胜负条件需要在上面实现。
while(1){
for(i=0;i<4;i++)//横向上的判断
{ c--;
if(c<0||c>14)
break;
if(chess[n][c]==chess[n][m])
{
g++;
}
if(chess[n][c]!=chess[n][m])
{
break;
}
}
c=m;
for(i=0;i<4;i++)//横向上的判断
{ c++;
if(c<0||c>14)
break;
if(chess[n][c]==chess[n][m])
{
g++;
}
if(chess[n][c]!=chess[n][m])
break;
}
if(g>=5)
{
a=1;
break;
}
if(g<5)
{
g=1;
c=m;
b=n;
}
for(i=0;i<4;i++)//纵向上的判断
{ b--;
if(b<0||b>14)
break;
if(chess[b][m]==chess[n][m])
{
g++;
}
if(chess[b][m]!=chess[n][m])
{
break;
}
}
b=n;
for(i=0;i<4;i++)//纵向上的判断
{ b++;
if(b<0||b>14)
break;
if(chess[b][m]==chess[n][m])
{
g++;
}
if(chess[b][m]!=chess[n][m])
break;
}
if(g>=5)
{
a=1;
break;
}
if(g<5)
{
g=1;
c=m;
b=n;
}
for(i=0;i<4;i++)//左上到右下的直线上的判断
{ b--;
c--;
if(b<0||b>15||c<0||c>14)
break;
if(chess[b][c]==chess[n][m])
{
g++;
}
if(chess[b][c]!=chess[n][m])
{
break;
}
}
b=n;
c=m;
for(i=0;i<4;i++)//左上到右下的直线判断
{ b++;
c++;
if(b<0||b>14||c<0||c>14)
break;
if(chess[b][c]==chess[n][m])
{
g++;
}
if(chess[b][c]!=chess[n][m])
break;
}
if(g>=5)
{
a=1;
break;
}
if(g<5)
{
g=1;
c=m;
b=n;
}
for(i=0;i<4;i++)//右上到左下的直线上的判断
{ b--;
c++;
if(b<0||b>15||c<0||c>14)
break;
if(chess[b][c]==chess[n][m])
{
g++;
}
if(chess[b][c]!=chess[n][m])
{
break;
}
}
b=n;
c=m;
for(i=0;i<4;i++)//右上到左下的直线判断
{ b++;
c--;
if(b<0||b>14||c>0||c<15)
break;
if(chess[b][c]==chess[n][m])
{
g++;
}
if(chess[b][c]!=chess[n][m])
break;
}
if(g>=5)
{
a=1;
break;
}
if(g<5)
{
g=1;
c=m;
b=n;
}
break;
}
return a;
}