コード例 #1
0
ファイル: checkers.c プロジェクト: K-Sicher/Checkers
// Can this move happen
int NextChainValid(int board[9][8], int x[4])
{
	if (board[x[3] + 1][x[4] + 1] == Opponent (board[x[3]][x[4]]) || board [x[3] + 1][x[4] + 1] == Opponent (board[x[3]][x[4]] + 2))
		return 1;
	else if (board[x[3] + 1][x[4] - 1] == Opponent (board[x[3]][x[4]]) || board[x[3] + 1][x[4] - 1] == Opponent (board[x[3]][x[4]] + 2))
		return 1;
	else if (board[x[3] - 1][x[4] + 1] == Opponent (board[x[3]][x[4]]) || board[x[3] - 1][x[4] + 1] == Opponent (board[x[3]][x[4]] + 2))
		return 1;
	else if (board[x[3] - 1][x[4] - 1] == Opponent (board[x[3]][x[4]]) || board[x[3] - 1][x[4] - 1] == Opponent (board[x[3]][x[4]] + 2))
		return 1;
	else
		return 0;
}
コード例 #2
0
int AlphaBetaPruning::AlphaBetaMin(Board &BBoard, int Depth, ePlayer eCurrentPlayer)
{
    Move m[8];
    int iNumberOfValidMoves = FillValidMoves(m, BBoard);
    int iRetValue;
    if (Depth == 0 || iNumberOfValidMoves == 0)
    {
        iRetValue = BBoard.Evaluate(eCurrentPlayer);
        goto ret;
    }

    int iMinValue = INF;
    for (int i = 0; i < iNumberOfValidMoves; i++)
    {
        Move &x = m[i];
        BBoard.ReflectMove(x, Opponent(eCurrentPlayer));
        iMinValue = min(iMinValue, AlphaBetaMax(BBoard, Depth-1, eCurrentPlayer));
        BBoard.RemoveMove(x);
        if (iMinValue <= m_iAlpha)
        {
            iRetValue = m_iAlpha;
            goto ret;
        }
        m_iBeta = min(m_iBeta, iMinValue);
    }
    iRetValue = iMinValue;
ret:
    return iRetValue;
}