/*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); }
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)); } }