Beispiel #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());
 }
Beispiel #2
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;
            }
        }
    }