public static int getBestResultPurge(LiuheChessBoard lcb, PlaceMethod pm, int layer, bool isAI, float purgeRate) { if (layer <= 0) { LiuheChessBoard lcbTemp = PlaceMethodGenerator.getPlacedChessBoard(pm, lcb); return(GameBoardEvaluator.evaluateGameBoard_MK0(lcbTemp)); } else { LiuheChessBoard lcbTemp = PlaceMethodGenerator.getPlacedChessBoard(pm, lcb); List <PlaceMethod> pms = PlaceMethodGenerator.getPurchedMethods(lcb, purgeRate, isAI); List <int> results = new List <int>(); foreach (PlaceMethod p in pms) { results.Add(getBestResult(lcbTemp.getCopy(), p, layer - 1, !isAI)); } if (isAI) { int minvalue = results[0]; for (int i = 1; i < results.Count; i++) { if (results[i] < minvalue) { minvalue = results[i]; } } return(minvalue); } else { int maxvalue = results[0]; for (int i = 1; i < results.Count; i++) { if (results[i] > maxvalue) { maxvalue = results[i]; } } return(maxvalue); } } }
public static PlaceMethod getMinPlaceMethod_OL() { List <PlaceMethod> pms = PlaceMethodGenerator.getAllValidPlaceMethod(GameManager._Main._GameBoard.getCopy()); LiuheChessBoard lcb2 = GameManager._Main._GameBoard.getCopy(); LiuheChessBoard lcbTemp = PlaceMethodGenerator.getPlacedChessBoard(pms[0], lcb2.getCopy()); int minNum = 0; int minValue = GameBoardEvaluator.evaluateGameBoard_MK0(lcbTemp); List <PlaceMethod> _NPM = new List <PlaceMethod>(); _NPM.Add(pms[0]); for (int i = 1; i < pms.Count; i++) { int temp; lcbTemp = PlaceMethodGenerator.getPlacedChessBoard(pms[i], lcb2.getCopy()); temp = GameBoardEvaluator.evaluateGameBoard_MK0(lcbTemp); //Debug.Log("评分为"+temp); if (temp < minValue) { minNum = i; minValue = temp; _NPM = new List <PlaceMethod>(); _NPM.Add(pms[i]); } else if (temp == minValue) { _NPM.Add(pms[i]); } } int iend = (int)Random.Range(0, _NPM.Count); return(_NPM[iend]); }
public static List <PlaceMethod> getPurchedMethods(LiuheChessBoard lcb, float purchRate, bool isAI) { List <PlaceMethod> pms = getAllValidPlaceMethod(lcb); int purchNum = (int)(pms.Count * purchRate); if (purchNum == pms.Count) { purchNum--; } List <int> results = new List <int>(); foreach (PlaceMethod p in pms) { LiuheChessBoard lcb2 = PlaceMethodGenerator.getPlacedChessBoard(p, lcb.getCopy()); results.Add(GameBoardEvaluator.evaluateGameBoard_MK0(lcb2)); } if (isAI) { //是ai,从小到大 for (int i = 0; i < pms.Count; i++) { for (int j = i; j < pms.Count; j++) { if (results[i] > results[j]) { int temp = results[i]; results[i] = results[j]; results[j] = temp; PlaceMethod pm = pms[i]; pms[i] = pms[j]; pms[j] = pm; } } } } else { //是人,从大到小 for (int i = 0; i < pms.Count; i++) { for (int j = i; j < pms.Count; j++) { if (results[i] < results[j]) { int temp = results[i]; results[i] = results[j]; results[j] = temp; PlaceMethod pm = pms[i]; pms[i] = pms[j]; pms[j] = pm; } } } } for (int i = 0; i < purchNum; i++) { pms.RemoveAt(pms.Count - 1); } return(pms); }