private void InitEdges(int iMaxEdges) { int i = 0, j = 0; for (i = 0; i < Length; i++) { for (j = 0; j < Width; j++) { int iEdges = RandomGenerator.Next(iMaxEdges - 1) + 1; while (iEdges > 0) { int iEdge = RandomGenerator.Next(Width); if (!m_aEdges[i, j, iEdge]) { m_aEdges[i, j, iEdge] = true; iEdges--; } } } } }
//implements a two cycle map private int AssignStacksToAgents() { //first we create a cycle of all but one m_lAgentStacks = new List <List <int> >(); int iCurrentStack = 0; bool bSmallAgent = false; List <int> lStacks = null; for (int i = 0; i < Arms - 1; i++) { double dRand = RandomGenerator.NextDouble(); bSmallAgent = dRand < 0.0; int cStacks = 0; if (bSmallAgent) { cStacks = RandomGenerator.Next(2) + 3; } else { cStacks = RandomGenerator.Next(MaxStacksPerAgent / 2) + MaxStacksPerAgent / 2 + 3; } lStacks = new List <int>(); for (int j = 0; j < cStacks; j++) { lStacks.Add(iCurrentStack + j); } m_lAgentStacks.Add(lStacks); iCurrentStack += cStacks - 1; } m_lAgentStacks.Last().Add(0); int iConnectStack1 = RandomGenerator.Next(iCurrentStack / 2); int iConnectStack2 = RandomGenerator.Next(iCurrentStack / 2) + iCurrentStack / 2; //now we cut the cycle in half lStacks = new List <int>(); lStacks.Add(iConnectStack1); lStacks.Add(iCurrentStack + 1); lStacks.Add(iConnectStack2); m_lAgentStacks.Add(lStacks); m_lPublicStacks = new List <int>(); for (int iStack = 0; iStack < iCurrentStack + 1; iStack++) { int cReachingArms = 0; foreach (List <int> l in m_lAgentStacks) { if (l.Contains(iStack)) { cReachingArms++; } } if (cReachingArms > 1) { m_lPublicStacks.Add(iStack); } } return(iCurrentStack + 2); }