List <Coordinate> GenerateObstaclesCoordinates(Node[] validChoices)
    {
        var allNodes = validChoices.ToList();

        allNodes.Insert(0, startNode);
        allNodes.Insert(allNodes.Count, endNode);

        var obstaclesCoordinatesList = new List <Coordinate>();

        int numberOfObstacles = GameManagerData.GetNumberOfObstacles();

        for (int index = 0; index < numberOfObstacles; index++)
        {
            var obstacleCoordiateIsValid = false;
            while (!obstacleCoordiateIsValid && validChoices.Any())
            {
                var node = GetRandomNode(validChoices);

                obstacleCoordiateIsValid = IsPathExcist(allNodes, node, startNode, endNode);

                if (obstacleCoordiateIsValid)
                {
                    obstaclesCoordinatesList.Add(GetCoordinates(node));
                    node.isWalkable = false;
                }

                validChoices = validChoices.Except(new Node[] { node }).ToArray();
            }
        }

        return(obstaclesCoordinatesList);
    }
示例#2
0
 private void PopulateData()
 {
     numberOfTheRuns.text = GetNumberOfTheRuns();
     boardSize.text       = GameManagerData.GetBoardSize().ToString();
     obstacleCount.text   = GameManagerData.GetNumberOfObstacles().ToString();
     algorithmsUsed.text  = GetUsedAlgorithms();
     numberOfFieldsCheckedForFirstAlghoritm.text  = GetNumberOfCheckedFields(CurrentAlgorithmType.A_star);
     numberOfFieldsCheckedForSecondAlghoritm.text = GetNumberOfCheckedFields(CurrentAlgorithmType.Greedy_suboptimal);
     timeSpentForFirstRunner.text  = GetTimeSpent("Runner1");
     timeSpentForSecondRunner.text = GetTimeSpent("Runner2");
 }
    void SetInputValue()
    {
        var fieldType = GetComponent <InputFieldTyperController>().fieldType;

        if (fieldType == InputFieldEnums.InputFieldsTypes.BoardInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetBoardSize();

            GameManagerData.SetBoardSize(value);
        }
        else if (fieldType == InputFieldEnums.InputFieldsTypes.ObstaclesInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetNumberOfObstacles();

            GameManagerData.SetNumberOfObstacles(value);
        }
        else if (fieldType == InputFieldEnums.InputFieldsTypes.StartPosXInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetStartPointX();

            GameManagerData.SetStartPointX(value);
        }
        else if (fieldType == InputFieldEnums.InputFieldsTypes.StartPosYInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetStartPointY();

            GameManagerData.SetStartPointY(value);
        }
        else if (fieldType == InputFieldEnums.InputFieldsTypes.EndPosXInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetEndPointX();

            GameManagerData.SetEndPointX(value);
        }
        else if (fieldType == InputFieldEnums.InputFieldsTypes.EndPosYInputField)
        {
            int value = (!string.IsNullOrEmpty(GetComponent <InputField>().text))
                ? int.Parse(GetComponent <InputField>().text)
                : GameManagerData.GetEndPointY();

            GameManagerData.SetEndPointY(value);
        }
    }
    private void GenerateNewGame()
    {
        var maxNumberOfObstacles = GameManagerData.GetBoardSize() * GameManagerData.GetBoardSize() / 2;

        int newNumberOfObstacles = GameManagerData.GetNumberOfObstacles() + 1;

        if (maxNumberOfObstacles < newNumberOfObstacles)
        {
            CustomEvents.showWarningDialogEvent.Invoke("Number of obstacles can't be larger than: " + maxNumberOfObstacles); //half of the board size!
        }
        else
        {
            GameManagerData.SetNumberOfObstacles(newNumberOfObstacles);
            CustomEvents.createTableEvent.Invoke();
        }
    }