// 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; }
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; }