コード例 #1
0
ファイル: AutoRes8.cs プロジェクト: Blinky94/8-Puzzle3D
    void IPointerDownHandler.OnPointerDown(PointerEventData eventData)
    {
        ObjType.LoadObjectInScene();

        transform.GetComponent <UnityEngine.UI.Image>().color          = Color.green;
        transform.GetComponentInChildren <UnityEngine.UI.Text>().color = Color.red;
        listRandom.Clear();

        currentNode = PossibleMooves.GetActualListOrder(listRandom);
    }
コード例 #2
0
    public void Search()
    {
        do
        {
            int nullPos = PossibleMooves.NullPosition(currentNode.ListColliders);

            foreach (List <Collider> subList in PossibleMooves.ListOfMooves(inch, nullPos, currentNode.ListColliders))
            {
                Node nodeAdj = new Node(subList);

                if (IsCurrentNodeInTheList(nodeAdj, closedList))
                {
                    continue;
                }
                else if (IsCurrentNodeInTheList(currentNode, openList))
                {
                    foreach (Node nodeInlist in openList)
                    {
                        if (nodeInlist == nodeAdj)
                        {
                            nodeAdj.G = currentNode.G + D;
                            if (nodeAdj.G < nodeInlist.G)
                            {
                                nodeAdj.H      = NumberOfDifferences(nodeAdj.ListColliders, goal.ListColliders);
                                nodeAdj.F      = nodeAdj.G + nodeAdj.H;
                                nodeAdj.Parent = currentNode;
                                openList.Remove(nodeInlist);
                                openList.Add(nodeAdj);
                            }
                        }
                    }
                }
                else
                {
                    nodeAdj.G      = currentNode.G + D;
                    nodeAdj.H      = NumberOfDifferences(nodeAdj.ListColliders, goal.ListColliders);
                    nodeAdj.F      = nodeAdj.G + nodeAdj.H;
                    nodeAdj.Parent = currentNode;
                    openList.Add(nodeAdj);
                }
            }

            if (openList.Count == 0)
            {
                break;
            }

            SortMinToMaxF(openList);
            currentNode = openList[0];

            openList.RemoveAt(0);
            closedList.Add(currentNode);
        } while (NumberOfDifferences(currentNode.ListColliders, goal.ListColliders) != 0);
    }
コード例 #3
0
    public void Search()
    {
        bool stop      = false;
        Node startNode = openList[0];

        currentNode = startNode;
        do
        {
            Debug.Log("------------------------BOUCLE PRINCIPALE-------------------------- ");

            List <Node> orderedListNode = SelectMinF(openList);

            if (orderedListNode.Count > 0)
            {
                currentNode        = new Node(orderedListNode[0].ListColliders);
                currentNode.F      = orderedListNode[0].F;
                currentNode.G      = orderedListNode[0].G;
                currentNode.H      = orderedListNode[0].H;
                currentNode.Parent = orderedListNode[0].Parent;
            }
            Debug.Log(CalculBadPaletNumbers(currentNode.ListColliders, goalList.ListColliders));
            if (CalculBadPaletNumbers(currentNode.ListColliders, goalList.ListColliders) == 0)
            {
                Debug.Log("reward OK !");
                RewardPathFromEndToStart(currentNode, startNode);
            }
            else if (openList.Count == 0)
            {
                break;
            }
            else
            {
                if (IsCurrentNodeInTheList(currentNode, openList))
                {
                    openList.Remove(currentNode);
                    closedList.Add(currentNode);
                }

                int nullPos = PossibleMooves.NullPosition(currentNode.ListColliders);
                Debug.Log("------------------------BOUCLE ADJACENTS-------------------------- ");
                foreach (List <Collider> adjList in PossibleMooves.ListOfMooves(inch, nullPos, currentNode.ListColliders))
                {
                    Node currentNod = new Node(adjList);

                    if (IsCurrentNodeInTheList(currentNod, closedList))
                    {
                        continue;
                    }
                    else if (!IsCurrentNodeInTheList(currentNod, openList))
                    {
                        currentNod.G      = currentNode.G + D;
                        currentNod.H      = CalculBadPaletNumbers(currentNod.ListColliders, goalList.ListColliders);
                        currentNod.F      = currentNod.G + currentNod.H;
                        currentNod.Parent = currentNode;
                        openList.Add(currentNod);
                    }
                    else if (IsCurrentNodeInTheList(currentNod, openList))
                    {
                        MonoBehaviour.print("------------------------BOUCLE OPENLIST-------------------------- ");
                        foreach (Node nodeInlist in openList)
                        {
                            if (nodeInlist == currentNod)
                            {
                                currentNod.G = currentNode.G + D;
                                if (currentNod.G < nodeInlist.G)
                                {
                                    currentNod.H      = CalculBadPaletNumbers(currentNod.ListColliders, goalList.ListColliders);
                                    currentNod.F      = currentNod.G + currentNod.H;
                                    currentNod.Parent = currentNode;
                                    openList.Remove(nodeInlist);
                                    openList.Add(currentNod);
                                }
                            }
                        }
                    }
                }
            }
        } while (CalculBadPaletNumbers(currentNode.ListColliders, goalList.ListColliders) != 0);
    }