关于对五子棋斜方向的代码错误问题

ffhelly 2009-03-23 08:41:10
现在我做的是判断左斜的。。
思路是 点到一个点 然后判断这个点前面4个点 和后面4个点之间 有没有坐标值相等的。

我的代码如下。。。
怎么判断 都是FALSE 请高手帮忙指点修改一下。

private bool InclinedKing(int x, int y, int colors)
{
int p = 35;
int h = 0, k = 0;
int h1 = 0, k1 = 0;
for (int t = 1; t <= 4; t++)
{

if (x - p * t < 0) break; else h = x - p * t;
if (y - p * t < 0) break; else k = y - p * t;
}
for (int z = 1; z <= 4; z++)
{

if (x + p * z > 516) break; else h1 = x + p * z;
if (y + p * z > 516) break; else k1 = y + p * z;
}
for (int i = 0; i < 9; i++)
{
if (k + p * i > 516) continue;
if (h + p * i > 516) continue;
int index = 1;

for (int j = 1; j < 5; j++)
{
if (k + p * j > 516) continue;
if (h + p * j > 516) continue;
if (h + p * j + p * i > 516) continue;
if (k + p * i + p * j > 516) continue;
//int xxx = h + p * i;
// int xx = k + p * i;
// int xxxx = h + p * j+p*i;
// int x1 = k + p * j+p*i;
if(pp[h+p*i,k+p*i]==colors&&pp[(h+p*i)+j*p,(k+p*i)+j*p]==colors)
{
index++;
if (index == 4)
{
return true;
}
else
{
index = 1;
}
}

}
}
return false;
}
...全文
105 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffhelly 2009-03-24
  • 打赏
  • 举报
回复
再顶
ffhelly 2009-03-23
  • 打赏
  • 举报
回复
顶一下。。。
ffhelly 2009-03-23
  • 打赏
  • 举报
回复
看不懂。。。
Sfly_189 2009-03-23
  • 打赏
  • 举报
回复
void CMainWnd::IsWinner(int pos,int chess)
{
int updowncount=0;
int leftrightcount=0;
int leftxiecount=0;
int rightxiecount=0;
int oldi=0;

BOOL m_bUp=TRUE;
BOOL m_bDown=TRUE;
BOOL m_bLeft=TRUE;
BOOL m_bRight=TRUE;
BOOL m_bLeftUp=TRUE;
BOOL m_bRightDown=TRUE;
BOOL m_bLeftDown=TRUE;
BOOL m_bRightUp=TRUE;
//上数
for(int i=1;i!=5;i++)
{
if(m_nChess[pos-i*20]==chess)
{
if(m_bUp)
{
if(pos-i*20>0)
updowncount++;
}
}
else
{
m_bUp=FALSE;
break;
}
}
//下数
for(int i=1;i!=5;i++)
{
if(m_nChess[pos+i*20]==chess)
{
if(m_bDown)
{
if(pos+i*20<300)
updowncount++;
}
}
else
{
m_bDown=FALSE;
break;
}
}
if(updowncount>=4)
{
if(chess==BLACK)
MessageBox(_T("Black is winner"),_T("Res"),MB_OK);
else if(chess==RED)
MessageBox(_T("Red is winner"),_T("Res"),MB_OK);
IngoreMouseMsg();
}

//左右数
for(int i=1;i!=5;i++)
{
if(m_nChess[pos-i]==chess)
{
if(m_bLeft)
{
if(pos-i>=(int)(pos/20)*20)
leftrightcount++;
}

}
else
{
m_bLeft=FALSE;
break;
}
}
for(int i=1;i!=5;i++)
{
if(m_nChess[pos+i]==chess)
{
if(m_bRight)
{
if(pos+i<(int)(pos/20)*20+20)
leftrightcount++;
}
}
else
{
m_bRight=FALSE;
break;
}
}
if(leftrightcount>=4)
{
if(chess==BLACK)
MessageBox(_T("Black is winner"),_T("Res"),MB_OK);
else if(chess==RED)
MessageBox(_T("Red is winner"),_T("Res"),MB_OK);
IngoreMouseMsg();
}

//正斜着数
for(int i=1;i!=5;i++)
{
if(m_nChess[pos-i*20-i]==chess)
{
if(m_bLeftUp)
{
if(pos-i*20-i>0)
rightxiecount++;
}
}
else
{
m_bLeftUp=FALSE;
break;
}
}
for(int i=1;i!=5;i++)
{
if(m_nChess[pos+i*20+i]==chess)
{
if(m_bRightDown)
{
if(pos+i*20+i<300)
rightxiecount++;
}
}
else
{
m_bRightDown=FALSE;
break;
}
}
if(rightxiecount>=4)
{
if(chess==BLACK)
MessageBox(_T("Black is winner"),_T("Res"),MB_OK);
else if(chess==RED)
MessageBox(_T("Red is winner"),_T("Res"),MB_OK);
IngoreMouseMsg();
}

//反斜着数
for(int i=1;i!=5;i++)
{
if(m_nChess[pos+i*20-i]==chess)
{
if(m_bLeftDown)
{
if(pos+i*20-i<300)
leftxiecount++;
}
}
else
{
m_bLeftDown=FALSE;
break;
}
}
for(int i=1;i!=5;i++)
{
if(m_nChess[pos-i*20+i]==chess)
{
if(m_bRightUp)
{
if(pos-i*20+i>0)
leftxiecount++;
}
}
else
{
m_bRightUp=FALSE;
break;
}
}
if(leftxiecount>=4)
{
if(chess==BLACK)
MessageBox(_T("Black is winner"),_T("Res"),MB_OK);
else if(chess==RED)
MessageBox(_T("Red is winner"),_T("Res"),MB_OK);
IngoreMouseMsg();
}

return ;
}
ffhelly 2009-03-23
  • 打赏
  • 举报
回复
顶一下。。
ffhelly 2009-03-23
  • 打赏
  • 举报
回复
COLORS是棋子的颜色 只有1和2 1是黑 2是白

H和K是以点击后倒退4位的 X,Y的坐标 ( 分开来处理的 )

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧