public int alpha_beta(State aState, ref int alpha, ref int beta, int depth, int passed) { int alpha_img=alpha; int beta_img=beta; int best_value1 = -50000; int best_value2 = 50000; if (depth == 0) { aState.EstValue = (int)evaluation(aState); return aState.EstValue; } for (int i = 1; i < aState.AvailablePosition[0].Count + 1; i++) { aState.GenerateSingle(i);//if this child has been generated, the function won't generate it more int value = alpha_beta(aState.Child[i], ref alpha_img, ref beta_img, depth - 1, 0); if (aState.NextPlayer != Enemy)//get min { if (value < best_value2)//update best_value2 { best_value2 = value; } if (best_value2 < beta )//pruning { aState.EstValue = best_value2; return best_value2; } } else//get max { if (value > best_value1) { best_value1 = value; } if (best_value1 > beta)//pruning { aState.EstValue = best_value1; return best_value1; } } } if (aState.AvailablePosition[0].Count == 0)//No step to move next; { aState.GenerateSingle(0); int value = alpha_beta(aState.Child[0], ref beta_img, ref alpha_img, depth - 1, 0); if (aState.NextPlayer != Enemy) { best_value2 = value; aState.EstValue = best_value2; } else { best_value1 = value; aState.EstValue=best_value1; } } //Not pruning, change alpha and beta; if (aState.NextPlayer != Enemy)//get min { beta = best_value2; aState.EstValue = beta; return beta; } else { beta = best_value1; aState.EstValue = beta; return beta; } }
public int alpha_beta(State aState, ref int alpha, ref int beta, int depth, int passed) { int alpha_img = alpha; int beta_img = beta; int best_value1 = -50000; int best_value2 = 50000; if (depth == 0) { aState.EstValue = (int)evaluation(aState); return(aState.EstValue); } for (int i = 1; i < aState.AvailablePosition[0].Count + 1; i++) { aState.GenerateSingle(i);//if this child has been generated, the function won't generate it more int value = alpha_beta(aState.Child[i], ref alpha_img, ref beta_img, depth - 1, 0); if (aState.NextPlayer != Enemy) //get min { if (value < best_value2) //update best_value2 { best_value2 = value; } if (best_value2 < beta) //pruning { aState.EstValue = best_value2; return(best_value2); } } else//get max { if (value > best_value1) { best_value1 = value; } if (best_value1 > beta)//pruning { aState.EstValue = best_value1; return(best_value1); } } } if (aState.AvailablePosition[0].Count == 0)//No step to move next; { aState.GenerateSingle(0); int value = alpha_beta(aState.Child[0], ref beta_img, ref alpha_img, depth - 1, 0); if (aState.NextPlayer != Enemy) { best_value2 = value; aState.EstValue = best_value2; } else { best_value1 = value; aState.EstValue = best_value1; } } //Not pruning, change alpha and beta; if (aState.NextPlayer != Enemy)//get min { beta = best_value2; aState.EstValue = beta; return(beta); } else { beta = best_value1; aState.EstValue = beta; return(beta); } }