Exemplo n.º 1
0
    public bool compareNode(List <NodoA> listaNodo, NodoA actual)
    {
        bool  cEq = false;
        bool  pEq = false;
        float dC  = 0;
        float dP  = 0;

        if (listaNodo.Count == 0)
        {
            return(false);
        }
        foreach (NodoA n in listaNodo)
        {
            dC = calcDist(n.getCasilla(), actual.getCasilla());
            if (dC == 0)
            {
                cEq = true;
            }
            dP = calcDist(n.getPadre(), actual.getPadre());
            if (dP == 0)
            {
                pEq = true;
            }

            if (cEq && pEq)
            {
                return(true);
            }
        }


        return(false);
    }
Exemplo n.º 2
0
    public NodoA checkPosition(NodoA nodo, List <NodoA> nodos)
    {
        foreach (NodoA n in nodos)
        {
            if (n.getCasilla().getPosicionGrid()
                == nodo.getCasilla().getPosicionGrid())
            {
                return(n);
            }
        }

        return(null);
    }
Exemplo n.º 3
0
    /**
     * A* y métodos asociados
     * */


    protected List <NodoA> AStar(CasillaGrid actual, CasillaGrid goal, Dictionary <TipoCasilla, float> moveIndex)
    {
        //List<NodoA> cerrados = new List<NodoA>();
        //List<NodoA> abiertos = new List<NodoA>();
        Dictionary <Vector2, NodoA> cerrados = new Dictionary <Vector2, NodoA>();
        Dictionary <Vector2, NodoA> abiertos = new Dictionary <Vector2, NodoA>();
        CasillaGrid target  = goal;
        NodoA       starter = new NodoA(actual, null, 0);

        abiertos.Add(starter.getCasilla().getPosicionGrid(), starter);

        while (abiertos.Count != 0)
        {
            NodoA bestNode = GetLowestCostNode(abiertos);

            abiertos.Remove(bestNode.getCasilla().getPosicionGrid());
            cerrados.Add(bestNode.getCasilla().getPosicionGrid(), bestNode);


            if (bestNode.getCasilla().getPosicionGrid() == goal.getPosicionGrid())
            {
                ICollection <NodoA> camino = cerrados.Values;
                return(ReconstructPath(camino));
            }



            List <NodoA> vecinos = Neighbours(bestNode.getCasilla(), moveIndex);
            foreach (NodoA n in vecinos)
            {
                if (cerrados.ContainsKey(n.getCasilla().getPosicionGrid()))
                {
                    continue;
                }

                float costeNodo = bestNode.g + EuclideanDistance(bestNode.getCasilla().getPosicionGrid(), n.getCasilla().getPosicionGrid()) + moveIndex[n.getCasilla().getTipoCasilla()];
                n.g = +costeNodo;
                n.h = EuclideanDistance(n.getCasilla().getPosicionGrid(), goal.getPosicionGrid());
                n.setPadre(bestNode.getCasilla());


                if (abiertos.ContainsKey(n.getCasilla().getPosicionGrid()))
                {
                    continue;
                }

                abiertos.Add(n.getCasilla().getPosicionGrid(), n);
            }
        }
        return(null);
    }