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