Ejemplo n.º 1
0
 private void calculateNextCorrectArista(string v)
 {
     //Añadimos el vertice que nos ayudara a comprobar si existen ciclos.
     if (!conjuntoVertices.Contains(v))
     {
         conjuntoVertices.Add(v);
     }
     foreach (string s in conjuntoVertices)
     {
         Debug.Log("vertice explorado:" + s);
     }
     Arista[] aristas = graph.getAristas(v);
     //Introduciomos nuevas aristas a las no visitadas
     for (int i = 0; i < aristas.Length; i++)
     {
         //Si la arista no esta en visitados ni en no visitados
         if (!visitedContains(aristas[i]) && !notVisitedContains(aristas[i]))
         {
             notVisited.Add(aristas[i]);
             Debug.Log("Nueva arista: " + aristas[i].toString());
         }
     }
     //Una vez que disponemos de todas las aristas calculamos la solucion
     nextCorrectArista = notVisited[0];
     foreach (Arista a in notVisited)
     {
         if (a._3() <= nextCorrectArista._3() && (!conjuntoVertices.Contains(a._1()) || !conjuntoVertices.Contains(a._2())))
         {
             nextCorrectArista = a;
         }
     }
     Debug.Log("Tienes que elegir la arista: " + nextCorrectArista.toString());
 }
Ejemplo n.º 2
0
    private bool notVisitedContains(Arista a)
    {
        bool contains = false;

        Arista[] varray = notVisited.ToArray();
        int      i      = 0;

        while (!contains && (i < varray.Length))
        {
            if (a._1().Equals(varray[i]._1()) && a._2().Equals(varray[i]._2()) && a._3() == varray[i]._3())
            {
                contains = true;
            }
            i++;
        }
        return(contains);
    }
Ejemplo n.º 3
0
    private bool removeNotVisited(Arista a)
    {
        bool contains = false;

        Arista[] varray   = notVisited.ToArray();
        Arista   toRemove = null;
        int      i        = 0;

        while (!contains && (i < varray.Length))
        {
            if (a._1().Equals(varray[i]._1()) && a._2().Equals(varray[i]._2()) && a._3() == varray[i]._3())
            {
                contains = true;
                toRemove = varray[i];
            }
            i++;
        }
        notVisited.Remove(toRemove);
        return(contains);
    }
Ejemplo n.º 4
0
    public void tryAristaActivation(Arista a)
    {
        if (nextCorrectArista != null && a._1().Equals(nextCorrectArista._1()) && a._2().Equals(nextCorrectArista._2()) && a._3() == nextCorrectArista._3() && connectedPorts.Contains(a._1()) && connectedPorts.Contains(a._2()))
        {
            Debug.Log("Hemos accedido a la siguiente arista correcta" + a.toString());

            changeEffectsState(a, false);
            visitArista(a);
            //Debug.Log("Visitados: " + visited.ToString());
            //Debug.Log("No Visitados: " + notVisited.ToString());
            aristasActivadas += 1;
            if (checkEnd())
            {
                return;
            }
            calculateNextCorrectArista(a._1());
            calculateNextCorrectArista(a._2());
        }
        else
        {
            Debug.Log("Se reinicia el puzzle");
            visited.Clear();
            notVisited.Clear();
            conjuntoVertices.Clear();
            connectedPorts.Clear();
            initialVertex    = null;
            aristasActivadas = 0;
            changeEffectsState(a, true);
            failed += 1;
            //Se ha equivocado 3 veces, la mandamos a una zona de enemigos.
            if (failed == 3)
            {
                eventManager.transportToEnemyZone();
                failed = 0;
            }
        }
    }