Exemple #1
0
    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);
    }
Exemple #2
0
    private IEnumerator getValueMultiLayerPurge(int layer, float purgeRate)
    {
        _PM = TreeSelector.getBestMethodMultiLayerPurge(layer, purgeRate);

        _HasEnded = true;

        yield return(new WaitForEndOfFrame());
    }
Exemple #3
0
    private IEnumerator getMinValueOnce()
    {
        _PM = TreeSelector.getMinPlaceMethod_OL();

        _HasEnded = true;

        yield return(new WaitForEndOfFrame());
    }
Exemple #4
0
    private IEnumerator randomChoose()
    {
        PlaceMethod pm = PlaceMethodGenerator.getRandomPlaceMethod();

        _PM = pm;
        //Debug.Log(pm);
        _HasEnded = true;
        yield return(new WaitForEndOfFrame());
    }
Exemple #5
0
 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");
 }
Exemple #6
0
    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);
            }
        }
    }
Exemple #7
0
    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("只够最简算法");
        }
    }
Exemple #8
0
    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);
    }