Esempio n. 1
0
        private void DiscoverRoutes(Path path)
        {
            Pillar lastPosition = path.Last();

            _nearestPillars.SetPillars(lastPosition);

            if (_nearestPillars.HasAny)
            {
                Pillar[] nearestPositions = _nearestPillars.Pillars;

                Pillar[] steppablePositions = _rules.Steppable(nearestPositions, lastPosition);

                if (steppablePositions.Length == 1)
                {
                    path.Increase(steppablePositions[0]);

                    DiscoverRoutes(path);
                }
                else if (1 < steppablePositions.Length)
                {
                    foreach (var newBranch in steppablePositions)
                    {
                        int cloneIndex = Clone(path);

                        DiscoverRoutes(_results[cloneIndex]);
                    }
                }
            }
        }
        private bool StepOrBuild(Pillar lastPosition, Pillar beforeLastPosition)
        {
            _nearestPillars.SetPillars(lastPosition, beforeLastPosition);

            Pillar[] steppablePositions = _rules.Steppable(_nearestPillars.Pillars, lastPosition);

            if (0 < steppablePositions.Length)
            {
                lastPosition = _map.GetField(steppablePositions[PyramidGame.Random.Next(0, steppablePositions.Length)]);

                Step(lastPosition);

                return(true);
            }
            else
            {
                Pillar[] buildablePos = _rules.Buildable(_nearestPillars.Pillars, lastPosition);

                if (buildablePos.Length != 0)
                {
                    lastPosition = _map.GetField(buildablePos[PyramidGame.Random.Next(0, buildablePos.Length)]);
                }

                Build(lastPosition);

                return(false);
            }
        }