关于C语言编写五子棋的一个问题,只有人人对战功能,但是不能判断输赢,不知道错在哪里

2024-11-27 01:30:41
推荐回答(1个)
回答1:

提供一个方法:下了这颗棋子,就一这颗棋子为中心,统计各个方向(水平的,竖直的,左上到右下的,右上到坐下的)的连续的棋子数;
/*函数说明,wuzi[15][15]不用说了吧,i,j:为刚下的棋子的位置,ch:下的是什么棋子,是#还是*??返回值是构成5个连续的棋子否?是为1.这个函数还请你斟酌一下,有错误望指正*/
int fun(int wuzi[15][15],int i,int j,char ch)
{
int a,b,count;

/*统计水平方向的棋子数*/
a=i;b=j;count=0;
while(b>=0)
{
if(wuzi[a][b--]==ch) count++;
else break;
}

b=j+1;
while(b<15)
{
if(wuzi[a][b++]==ch) count++;
else break;
}
if(count>=5) return 1;

else
a=i;b=j; count=0;

/*统计竖直方向的棋子数*/

while(a>=0)
{
if(wuzi[a--][b]==ch) count++;
else break;
}

a=i+1;
while(a<15)
{
if(wuzi[a++][b]==ch) count++;
else break;
}
if(count>=5) return 1;
else
a=i;b=j; count=0;

/*统计左上方到右下方方向的棋子数*/
while(a>=0&&b>=0)
{
if(wuzi[a--][b--]==ch) count++;
else break;
}

a=i+1;b=j+1;
while(a<15&&b<15)
{
if(wuzi[a++][b++]==ch) count++;
else break;

}
if(count>=5) return 1;
else
a=i;b=j;count=0;

/*统计左下方到右上方方向的棋子数*/

while(a<15&&b>=0)
{
if(wuzi[a++][b--]==ch) count++;
else break;
}

a=i-1;b=j+1;
while(a>=0&&b<15)
{
if(wuzi[a--][b++]==ch) count++;
else break;

}

if(count>=5) return 1;
return 0;
}