private void trnsBtn_Click(object sender, EventArgs e) { if (transForm.ShowDialog() == DialogResult.OK) { m = new MarkovMapper(transForm.Transitions); mapperInitialized = true; UpdateTransitionDisplay(); } }
private async void genBtn_ClickAsync(object sender, EventArgs e) { Random rand = new Random(); if (!mapperInitialized) { m = new MarkovMapper(transForm.defaultTransitions); } UpdateTransitionDisplay(); // Start at the top left, assigning states as we go along State initState; if (rand.NextDouble() > 0.5) { initState = State.SEA; } else { initState = State.LAND; } var topLeft = storage[new Tuple <int, int>(0, 0)]; if (topLeft.Type == State.EMPTY) { topLeft.SetType(initState); } var emptyLocations = Locations.Where(t => storage[t].Type == State.EMPTY).ToList(); Hex currentHex = storage[new Tuple <int, int>(0, 0)]; emptyLocsLbl.Text = emptyLocations.Count.ToString(); Stack <Tuple <int, int> > hexCoordStack = new Stack <Tuple <int, int> >(); var nbs = GetNeighborCoords(currentHex).Where(c => storage[c].Type == State.EMPTY).ToList(); nbs.Shuffle(); foreach (var eNeighb in nbs) { hexCoordStack.Push(eNeighb); } while (hexCoordStack.Count != 0) { var nextHexCoord = hexCoordStack.Pop(); var nextHex = storage[nextHexCoord]; if (nextHex.Type != State.EMPTY) { continue; } //var nextHexAssignedNeighbors = nextHex.Neighbors() // .SelectMany(nhn => GetNeighborCoords(nhn)).Where(nexth => storage[nexth].Type != State.EMPTY); var nextHexAssignedNeighbors = GetNeighborCoords(nextHex).Where(nh => storage[nh].Type != State.EMPTY); var neighborHexes = nextHexAssignedNeighbors.Select(n => storage[n]); foreach (var n in neighborHexes) { if (n.Distance(nextHex) != 1) { int rr = 0; } } Hex filledNeighbor = null; if (nextHexAssignedNeighbors.Count() > 0) { filledNeighbor = storage[nextHexAssignedNeighbors.First()]; } //if( filledNeighbor == null) { // filledNeighbor = currentHex; //} if (!storage[nextHexCoord].Neighbors().Contains(filledNeighbor)) { int k = nextHexAssignedNeighbors.Count(); } await DrawNewState(filledNeighbor, nextHexCoord); lblDistance.Text = nextHex.Distance(filledNeighbor).ToString(); if (nextHex.Distance(filledNeighbor) != 1) { int j = nextHex.Distance(filledNeighbor); return; } currentHex = nextHex; var inbs = GetNeighborCoords(currentHex).Where(c => storage[c].Type == State.EMPTY).ToList(); inbs.Shuffle(); foreach (var eNeighb in inbs) { hexCoordStack.Push(eNeighb); } stackDepthLbl.Text = hexCoordStack.Count().ToString(); emptyLocations = Locations.Where(t => storage[t].Type == State.EMPTY).ToList(); var empties = emptyLocations.Count; var counts = storage.Values.GroupBy(s => s.Type).ToDictionary(gdc => gdc.Key, gdc => gdc.Count()); emptyLocsLbl.Text = counts.ContainsKey(State.EMPTY) ? counts[State.EMPTY].ToString() : "0"; numSeaTxt.Text = counts.ContainsKey(State.SEA) ? counts[State.SEA].ToString() : "0"; numLandTxt.Text = counts.ContainsKey(State.LAND) ? counts[State.LAND].ToString() : "0"; numHillTxt.Text = counts.ContainsKey(State.HILL) ? counts[State.HILL].ToString() : "0"; numMtnText.Text = counts.ContainsKey(State.MOUNTAIN) ? counts[State.MOUNTAIN].ToString() : "0"; numEmptyTxt.Text = emptyLocsLbl.Text; if (empties == 0) { break; } } UpdateDetailsText(); MessageBox.Show("Done!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Refresh(); }
private async void genBtn_ClickAsync(object sender, EventArgs e) { InitializeGrid(); Random rand = new Random(); if (!mapperInitialized) { m = new MarkovMapper(transForm.defaultTransitions); } UpdateTransitionDisplay(); // Start at the top left, assigning states as we go along State initState; if (rand.NextDouble() > 0.5) { initState = State.SEA; } else { initState = State.LAND; } var topLeft = storage[new Tuple <int, int>(0, 0)]; if (topLeft.Type == State.EMPTY) { topLeft.SetType(initState); } var emptyLocations = Locations.Where(t => storage[t].Type == State.EMPTY).ToList(); Hex currentHex = topLeft; Stack <Tuple <int, int> > hexCoordStack = new Stack <Tuple <int, int> >(); var nbs = GetNeighborCoords(currentHex).Where(c => storage[c].Type == State.EMPTY).ToList(); nbs.Shuffle(); foreach (var eNeighb in nbs) { hexCoordStack.Push(eNeighb); } while (hexCoordStack.Count != 0) { var nextHexCoord = hexCoordStack.Pop(); var nextHex = storage[nextHexCoord]; if (nextHex.Type != State.EMPTY) { continue; } var nextHexAssignedNeighbors = GetNeighborCoords(nextHex).Where(nh => storage[nh].Type != State.EMPTY); var neighborHexes = nextHexAssignedNeighbors.Select(n => storage[n]); Hex filledNeighbor = null; if (nextHexAssignedNeighbors.Count() > 0) { filledNeighbor = storage[nextHexAssignedNeighbors.First()]; } await DrawNewState(filledNeighbor, nextHexCoord); currentHex = nextHex; var inbs = GetNeighborCoords(currentHex).Where(c => storage[c].Type == State.EMPTY).ToList(); inbs.Shuffle(); foreach (var eNeighb in inbs) { hexCoordStack.Push(eNeighb); } emptyLocations = Locations.Where(t => storage[t].Type == State.EMPTY).ToList(); var empties = emptyLocations.Count; if (empties == 0) { break; } } MessageBox.Show("Done!", "Status", MessageBoxButtons.OK, MessageBoxIcon.Information); this.Refresh(); }