コード例 #1
0
    /*public List<BlockModel> GenerateLoop(){
     *  start = DateTime.Now;
     *  List<BlockModel> loop =  Generate(new List<BlockModel>(), validPositions[Random.Range(0,validPositions.Count)], HexDirectionHelper.Random());
     *  TimeSpan timeItTook = DateTime.Now - start;
     *  Debug.Log(timeItTook);
     *  return loop;
     * }*/

    public List <BlockModel> GenerateLoop()
    {
        int               nbFail = 0;
        int               nbOk   = 0;
        double            sum    = 0;
        double            sumSq  = 0;
        List <BlockModel> loop   = new List <BlockModel>();
        int               length = 5; //Mathf.RoundToInt(Mathf.Sqrt((float)validPositions.Count)*4f);

        for (int i = 0; i < 100; i++)
        {
            Pos          pos;
            HexDirection dir;
            while (true)
            {
                pos = validPositions[Random.Range(0, validPositions.Count)];
                dir = HexDirectionHelper.Random();
                Pos prev = GetNextPos(pos, dir.Opposite());
                if (gridValid.Exist(prev.x, prev.z))
                {
                    break;
                }
            }
            start = DateTime.Now;
            try {
                List <BlockModel> newLoop = Generate(pos, dir, length);
                if (newLoop.Count > loop.Count)
                {
                    loop = newLoop;
                }
            }catch (Exception ex) {
                //Debug.Log(ex);
                nbFail++;
                continue;
            }
            nbOk++;
            TimeSpan timeItTook = DateTime.Now - start;
            double   s          = timeItTook.TotalSeconds;
            sum   += s;
            sumSq += s * s;
        }
        double avg   = sum / (double)nbOk;
        double stdev = Math.Sqrt(sumSq / (double)nbOk - avg * avg);

        Debug.Log("nbFail:" + nbFail);
        Debug.Log("nbOk:" + nbOk);
        Debug.Log("avg:" + avg);
        Debug.Log("stdev:" + stdev);
        return(loop);
    }
コード例 #2
0
 void Fill()
 {
     foreach (Pos pos in validPositions)
     {
         if (grid.Exist(pos.x, pos.z))
         {
             continue;
         }
         HexDirection dir1 = HexDirectionHelper.Random();
         HexDirection dir2 = HexDirectionHelper.Random();
         while (dir2 == dir1)
         {
             dir2 = HexDirectionHelper.Random();
         }
         grid.Add(pos.x, pos.z, new BlockModel(pos.x, pos.z, dir1, dir2));
     }
 }