📄 cchessmove.h
字号:
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//向后
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.y = ptFrom.y - 1; ptTo.y >= 0; ptTo.y -- )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//横向
ptTo.y = ptFrom.y ;
//向左
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.x = ptFrom.x - 1; ptTo.x >= 0; ptTo.x -- )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//向右
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.x = ptFrom.x + 1; ptTo.x <= 8; ptTo.x ++ )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
break;
//==========生成黑炮的着法
case BLACK_P:
//ptHalf用来存储炮是否有隔子打子的中间子
//纵向
ptTo.x = ptFrom.x ;
//向后
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.y = ptFrom.y + 1; ptTo.y <= 9; ptTo.y ++ )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//向前
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.y = ptFrom.y - 1; ptTo.y >= 0; ptTo.y -- )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//横向
ptTo.y = ptFrom.y ;
//向右
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.x = ptFrom.x - 1; ptTo.x >= 0; ptTo.x -- )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
//向左
ptHalf.x = -1; //标志尚未发现中间子
for( ptTo.x = ptFrom.x + 1; ptTo.x <= 8; ptTo.x ++ )
{
if( ptHalf.x == -1 ) // 无中间子
{
if( ! HaveMan( ptTo ) )
{
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
else // if( HaveMan( ptTo ) )
{
ptHalf.x = ptTo.x ;
ptHalf.y = ptTo.y ;
}
}
else // 已有中间子
{
if( HaveMan( ptTo ) )
{
if( ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
break;
}
}
}
break;
//==========生成红相的着法
case RED_X:
if( ptFrom.x == 0 )
{
if( ! HaveFriend(2, 4, fSide) && ! HaveMan(1, 3) )
AddMoveToQueue( ptFrom, 2, 4, nDepth );
if( ! HaveFriend(2, 0, fSide) && ! HaveMan(1, 1) )
AddMoveToQueue( ptFrom, 2, 0, nDepth );
}
else if( ptFrom.x == 2 )
{
if( ptFrom.y == 4 )
{
if( ! HaveFriend(0, 2, fSide) && ! HaveMan(1, 3) )
AddMoveToQueue( ptFrom, 0, 2, nDepth );
if( ! HaveFriend(4, 2, fSide) && ! HaveMan(3, 3) )
AddMoveToQueue( ptFrom, 4, 2, nDepth );
}
else // ptFrom.y == 0
{
if( ! HaveFriend(0, 2, fSide) && ! HaveMan(1, 1) )
AddMoveToQueue( ptFrom, 0, 2, nDepth );
if( ! HaveFriend(4, 2, fSide) && ! HaveMan(3, 1) )
AddMoveToQueue( ptFrom, 4, 2, nDepth );
}
}
else if( ptFrom.x == 4 )
{
if( ! HaveFriend(2, 4, fSide) && ! HaveMan(3, 3) )
AddMoveToQueue( ptFrom, 2, 4, nDepth );
if( ! HaveFriend(2, 0, fSide) && ! HaveMan(3, 1) )
AddMoveToQueue( ptFrom, 2, 0, nDepth );
if( ! HaveFriend(6, 4, fSide) && ! HaveMan(5, 3) )
AddMoveToQueue( ptFrom, 6, 4, nDepth );
if( ! HaveFriend(6, 0, fSide) && ! HaveMan(5, 1) )
AddMoveToQueue( ptFrom, 6, 0, nDepth );
}
else if( ptFrom.x == 6 )
{
if( ptFrom.y == 4 )
{
if( ! HaveFriend(4, 2, fSide) && ! HaveMan(5, 3) )
AddMoveToQueue( ptFrom, 4, 2, nDepth );
if( ! HaveFriend(8, 2, fSide) && ! HaveMan(7, 3) )
AddMoveToQueue( ptFrom, 8, 2, nDepth );
}
else // ptFrom.y == 0
{
if( ! HaveFriend(4, 2, fSide) && ! HaveMan(5, 1) )
AddMoveToQueue( ptFrom, 4, 2, nDepth );
if( ! HaveFriend(8, 2, fSide) && ! HaveMan(7, 1) )
AddMoveToQueue( ptFrom, 8, 2, nDepth );
}
}
else // x == 8
{
if( ! HaveFriend(6, 4, fSide) && ! HaveMan(7, 3) )
AddMoveToQueue( ptFrom, 6, 4, nDepth );
if( ! HaveFriend(6, 0, fSide) && ! HaveMan(7, 1) )
AddMoveToQueue( ptFrom, 6, 0, nDepth );
}
break;
//==========生成黑象的着法
case BLACK_X:
if( ptFrom.x == 0 )
{
if( ! HaveFriend(2, 5, fSide) && ! HaveMan(1, 6) )
AddMoveToQueue( ptFrom, 2, 5, nDepth );
if( ! HaveFriend(2, 9, fSide) && ! HaveMan(1, 8) )
AddMoveToQueue( ptFrom, 2, 9, nDepth );
}
else if( ptFrom.x == 2 )
{
if( ptFrom.y == 5 )
{
if( ! HaveFriend(0, 7, fSide) && ! HaveMan(1, 6) )
AddMoveToQueue( ptFrom, 0, 7, nDepth );
if( ! HaveFriend(4, 7, fSide) && ! HaveMan(3, 6) )
AddMoveToQueue( ptFrom, 4, 7, nDepth );
}
else // ptFrom.y == 9
{
if( ! HaveFriend(0, 7, fSide) && ! HaveMan(1, 8) )
AddMoveToQueue( ptFrom, 0, 7, nDepth );
if( ! HaveFriend(4, 7, fSide) && ! HaveMan(3, 8) )
AddMoveToQueue( ptFrom, 4, 7, nDepth );
}
}
else if( ptFrom.x == 4 )
{
if( ! HaveFriend(2, 5, fSide) && ! HaveMan(3, 6) )
AddMoveToQueue( ptFrom, 2, 5, nDepth );
if( ! HaveFriend(2, 9, fSide) && ! HaveMan(3, 8) )
AddMoveToQueue( ptFrom, 2, 9, nDepth );
if( ! HaveFriend(6, 5, fSide) && ! HaveMan(5, 6) )
AddMoveToQueue( ptFrom, 6, 5, nDepth );
if( ! HaveFriend(6, 9, fSide) && ! HaveMan(5, 8) )
AddMoveToQueue( ptFrom, 6, 9, nDepth );
}
else if( ptFrom.x == 6 )
{
if( ptFrom.y == 5 )
{
if( ! HaveFriend(4, 7, fSide) && ! HaveMan(5, 6) )
AddMoveToQueue( ptFrom, 4, 7, nDepth );
if( ! HaveFriend(8, 7, fSide) && ! HaveMan(7, 6) )
AddMoveToQueue( ptFrom, 8, 7, nDepth );
}
else // ptFrom.y == 9
{
if( ! HaveFriend(4, 7, fSide) && ! HaveMan(5, 8) )
AddMoveToQueue( ptFrom, 4, 7, nDepth );
if( ! HaveFriend(8, 7, fSide) && ! HaveMan(7, 8) )
AddMoveToQueue( ptFrom, 8, 7, nDepth );
}
}
else // x == 8
{
if( ! HaveFriend(6, 5, fSide) && ! HaveMan(7, 6) )
AddMoveToQueue( ptFrom, 6, 5, nDepth );
if( ! HaveFriend(6, 9, fSide) && ! HaveMan(7, 8) )
AddMoveToQueue( ptFrom, 6, 9, nDepth );
}
break;
//==========生成红仕的着法
case RED_S:
if( ptFrom.x == 3 )
{
if( ! HaveFriend( 4, 1, fSide ) )
AddMoveToQueue( ptFrom, 4, 1, nDepth );
}
else if( ptFrom.x == 4 )
{
if( ! HaveFriend( 3, 2, fSide ) )
AddMoveToQueue( ptFrom, 3, 2, nDepth );
if( ! HaveFriend( 3, 0, fSide ) )
AddMoveToQueue( ptFrom, 3, 0, nDepth );
if( ! HaveFriend( 5, 2, fSide ) )
AddMoveToQueue( ptFrom, 5, 2, nDepth );
if( ! HaveFriend( 5, 0, fSide ) )
AddMoveToQueue( ptFrom, 5, 0, nDepth );
}
else // ptFrom.x == 5
{
if( ! HaveFriend( 4, 1, fSide ) )
AddMoveToQueue( ptFrom, 4, 1, nDepth );
}
break;
//==========生成黑士的着法
case BLACK_S:
if( ptFrom.x == 3 )
{
if( ! HaveFriend( 4, 8, fSide ) )
AddMoveToQueue( ptFrom, 4, 8, nDepth );
}
else if( ptFrom.x == 4 )
{
if( ! HaveFriend( 3, 7, fSide ) )
AddMoveToQueue( ptFrom, 3, 7, nDepth );
if( ! HaveFriend( 3, 9, fSide ) )
AddMoveToQueue( ptFrom, 3, 9, nDepth );
if( ! HaveFriend( 5, 7, fSide ) )
AddMoveToQueue( ptFrom, 5, 7, nDepth );
if( ! HaveFriend( 5, 9, fSide ) )
AddMoveToQueue( ptFrom, 5, 9, nDepth );
}
else // ptFrom.x == 5
{
if( ! HaveFriend( 4, 8, fSide ) )
AddMoveToQueue( ptFrom, 4, 8, nDepth );
}
break;
//==========生成红兵的着法
case RED_B:
//向前
ptTo.x = ptFrom.x ;
ptTo.y = ptFrom.y + 1 ;
if( ptTo.y <=9 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
if( ptFrom.y >= 5 ) //兵已过河
{
ptTo.y = ptFrom.y ;
//向左
ptTo.x = ptFrom.x - 1 ;
if( ptTo.x >=0 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
//向右
ptTo.x = ptFrom.x + 1 ;
if( ptTo.x <=8 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
break;
//==========生成黑卒的着法
case BLACK_B:
//向前
ptTo.x = ptFrom.x ;
ptTo.y = ptFrom.y - 1 ;
if( ptTo.y >=0 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
if( ptFrom.y <= 4 ) //兵已过河
{
ptTo.y = ptFrom.y ;
//向右
ptTo.x = ptFrom.x - 1 ;
if( ptTo.x >=0 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
//向左
ptTo.x = ptFrom.x + 1 ;
if( ptTo.x <=8 && ! HaveFriend( ptTo, fSide ) )
AddMoveToQueue( ptFrom, ptTo, nDepth );
}
break;
} // end switch
} // end if( CChessBoard[x][y] != 0 )
} // end for x 0 to 8, y 0 to 9
return nMoveCount; // 返回当前深度的走法总数
}
inline void AddMoveToQueue( POINT ptFrom, POINT ptTo, int nDepth )
{
MoveList[nDepth][nMoveCount].ptFrom.x = ptFrom.x ;
MoveList[nDepth][nMoveCount].ptFrom.y = ptFrom.y ;
MoveList[nDepth][nMoveCount].ptTo.x = ptTo.x ;
MoveList[nDepth][nMoveCount].ptTo.y = ptTo.y ;
nMoveCount ++;
}
inline void AddMoveToQueue( POINT ptFrom, BYTE x, BYTE y, int nDepth )
{
MoveList[nDepth][nMoveCount].ptFrom.x = ptFrom.x ;
MoveList[nDepth][nMoveCount].ptFrom.y = ptFrom.y ;
MoveList[nDepth][nMoveCount].ptTo.x = x ;
MoveList[nDepth][nMoveCount].ptTo.y = y ;
nMoveCount ++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -