- 每下一个棋子,判断一次结果。
- 判断方法:以刚下的棋子为中心,判断水平,垂直,2条对角线,共4个方向,每个方向上的9个棋子是否有连续同色五子。
以15行15列2维数组存棋子为例,白子为1,黑子为-1(大概没搞反吧,有点不记得了)。
//把下的棋子坐标传入,返回值表示结果
public bool isVectory(int row, int col)
{
//本层循环判断4个方向
for(int i = 0; i < 4; i++)
{
//定义2个变量,计数同色棋子
int zcount = 0;
int fcount = 0;
//- 判断水平方向,从 col-4,到 col+4 9个棋子
for (int j = -4; j <= 4; j++)
{
//越界判断
if(col+j>=0 && col + j <= 14)
{
//遇到白子
if (chess[row, col + j] == 1)
{
fcount = 0;
zcount++;
}
////遇到黑子
else if(chess[row, col + j] == -1)
{
zcount = 0;
fcount++;
}
//没有棋子,2个变量赋0
else
{
fcount = 0;
zcount = 0;
continue;
}
//黑子5个
if(fcount==5)
{
MessageBox.Show("black vectory");
return true;
}
//白子5个
if(zcount == 5)
{
MessageBox.Show("white vectory");
return true;
}
}
}
//| 判断垂直方向
for (int j = -4; j <= 4; j++)
{
if (row + j >= 0 && row + j <= 14)
{
if (chess[row+j,col] == 1)
{
fcount = 0;
zcount++;
}
else if (chess[row + j, col] == -1)
{
zcount = 0;
fcount++;
}
else
{
fcount = 0;
zcount = 0;
continue;
}
if (fcount == 5)
{
MessageBox.Show("black vectory");
return true;
}
if (zcount == 5)
{
MessageBox.Show("white vectory");
return true;
}
}
}
// / 判断对角线方向
for (int j = -4; j <= 4; j++)
{
if (row - j >= 0 && row - j <= 14 && col + j >= 0 && col + j <= 14)
{
if (chess[row - j, col + j] == 1)
{
fcount = 0;
zcount++;
}
else if (chess[row - j, col + j] == -1)
{
zcount = 0;
fcount++;
}
else
{
fcount = 0;
zcount = 0;
continue;
}
if (fcount == 5)
{
MessageBox.Show("black vectory");
return true;
}
if (zcount == 5)
{
MessageBox.Show("white vectory");
return true;
}
}
}
// \ 判断对角线方向
for (int j = -4; j <= 4; j++)
{
if (row + j >= 0 && row + j <= 14 && col + j >= 0 && col + j <= 14)
{
if (chess[row + j, col + j] == 1)
{
fcount = 0;
zcount++;
}
else if (chess[row + j, col + j] == -1)
{
zcount = 0;
fcount++;
}
else
{
fcount = 0;
zcount = 0;
continue;
}
if (fcount == 5)
{
MessageBox.Show("black vectory");
return true;
}
if (zcount == 5)
{
MessageBox.Show("white vectory");
return true;
}
}
}
}
return false;
}