public static LiuheChessBoard getPlacedChessBoard(PlaceMethod _PM, LiuheChessBoard lcb) { if (_PM == null) { Debug.Log("没有准备好!!"); } foreach (PlaceAction pa in _PM._Actions) { switch (pa.type) { case PLACE_TYPE.NONE: //Debug.Log("什么也不做"); break; case PLACE_TYPE.ADD: //Debug.Log("新增棋子!"); lcb.addNewChessUnSafe(pa.x, pa.y, pa.direction, pa.ownner); break; case PLACE_TYPE.MOVE: //Debug.Log("什么也不做-->现在还没有写移动"); break; default: break; } } return(lcb); }
private IEnumerator getValueMultiLayerPurge(int layer, float purgeRate) { _PM = TreeSelector.getBestMethodMultiLayerPurge(layer, purgeRate); _HasEnded = true; yield return(new WaitForEndOfFrame()); }
private IEnumerator getMinValueOnce() { _PM = TreeSelector.getMinPlaceMethod_OL(); _HasEnded = true; yield return(new WaitForEndOfFrame()); }
private IEnumerator randomChoose() { PlaceMethod pm = PlaceMethodGenerator.getRandomPlaceMethod(); _PM = pm; //Debug.Log(pm); _HasEnded = true; yield return(new WaitForEndOfFrame()); }
private IEnumerator printResulr() { for (int i = 0; i < 10; i++) { yield return(new WaitForSeconds(0.5f)); } _PM = new PlaceMethod().setNone(); _HasEnded = true; Debug.Log("finfished"); }
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 IEnumerator getResult() { _PM = null; _HasEnded = false; //Debug.Log(Time.time); //Debug.Log("I'm thinking..."); //选择评估算法 _Process = getValueMultiLayerPurge(2, 0.9f); StartCoroutine(_Process); for (int i = 0; i < 15; i++) { if (_HasEnded) { Debug.Log("结果已经算出 -- " + (0.5 + i * 0.5f) + "s以内"); break; } else { Debug.Log("经过时间+" + i * 0.5f + "s"); yield return(new WaitForSeconds(0.5f)); } } StopCoroutine(_Process); if (_HasEnded) { Debug.Log(_PM); doPlace(); Debug.Log("实现了优质算法"); } else { Debug.Log("只够最简算法"); } }
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); }