private void trnsBtn_Click(object sender, EventArgs e)
 {
     if (transForm.ShowDialog() == DialogResult.OK)
     {
         m = new MarkovMapper(transForm.Transitions);
         mapperInitialized = true;
         UpdateTransitionDisplay();
     }
 }
Exemple #2
0
        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();
        }