五子棋判定胜败代码纠错
五子棋判定胜负代码纠错
一旦我下在(2,0)(1,1)(0,2),马上显示白棋胜,为什么?代码如下(我是横竖撇捺四个方向遍历的)
void CMyView::Judge(CPoint point)
{ //获取鼠标指向数组位置,即中心位置
int x=(point.x-30)/20;
int y=(point.y-30)/20;
//计算开始判断的坐标 xx,yy
int xx,yy,a,i,j;
xx=yy=0;
//横向判断
for(i=0;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[j][y];
//五个都是白棋
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
//五个都是黑棋
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
}
//竖向判断
for(i=0;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[x][j];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
}
//向右下角
//判断起点位置
if(x<y)
{ yy=y-x;
xx=0;
}
else
{ xx=x-y;
yy=0;
}
//参数over=1时退出循环
int over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx+i)<19||(yy+i)<19)
{
a=a+wzq[xx+i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
//到了边界
else
over=1;
}
xx+=1;
yy+=1;
}while(over==0);
//向左下角
if(x+y<18)
{ xx=x+y;
yy=0;
}
else
{ yy=x+y-18;
xx=18;
}
over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx-i)>=0||(yy+i)<19)
{
a=a+wzq[xx-i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
//到了边界
else
over=1;
}
xx-=1;
yy+=1;
}while(over==0);
}
------解决方案--------------------
是要散分麽?
------解决方案--------------------
可兼或
不可兼或
并且
《逻辑学》

------解决方案--------------------
结贴散分吧,沾点喜气,嘿嘿。
一旦我下在(2,0)(1,1)(0,2),马上显示白棋胜,为什么?代码如下(我是横竖撇捺四个方向遍历的)
void CMyView::Judge(CPoint point)
{ //获取鼠标指向数组位置,即中心位置
int x=(point.x-30)/20;
int y=(point.y-30)/20;
//计算开始判断的坐标 xx,yy
int xx,yy,a,i,j;
xx=yy=0;
//横向判断
for(i=0;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[j][y];
//五个都是白棋
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
//五个都是黑棋
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
}
//竖向判断
for(i=0;i<15;i++)
{
a=0;
for(j=i;j<i+5;j++)
{
a=a+wzq[x][j];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
}
//向右下角
//判断起点位置
if(x<y)
{ yy=y-x;
xx=0;
}
else
{ xx=x-y;
yy=0;
}
//参数over=1时退出循环
int over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx+i)<19||(yy+i)<19)
{
a=a+wzq[xx+i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
//到了边界
else
over=1;
}
xx+=1;
yy+=1;
}while(over==0);
//向左下角
if(x+y<18)
{ xx=x+y;
yy=0;
}
else
{ yy=x+y-18;
xx=18;
}
over=0;
do
{
a=0;
for(i=0;i<5;i++)
{
if((xx-i)>=0||(yy+i)<19)
{
a=a+wzq[xx-i][yy+i];
if(a==5)
{
AfxMessageBox("白棋胜!");
return;
}
if(a==-5)
{
AfxMessageBox("黑棋胜!");
return;
}
}
//到了边界
else
over=1;
}
xx-=1;
yy+=1;
}while(over==0);
}
------解决方案--------------------
是要散分麽?
------解决方案--------------------
可兼或
不可兼或
并且
《逻辑学》
------解决方案--------------------
结贴散分吧,沾点喜气,嘿嘿。