public Movimiento enviarMovimiento(ArbolGeneral <Planeta> arbol) { List <ArbolGeneral <Planeta> > ListaPreorden = arbol.ListaPreOrden(); List <ArbolGeneral <Planeta> > ListaDeNodosIA = new List <ArbolGeneral <Planeta> >(); List <ArbolGeneral <Planeta> > ListaDeNodosUsuario = new List <ArbolGeneral <Planeta> >(); foreach (ArbolGeneral <Planeta> nodo in ListaPreorden) { if (nodo.getDatoRaiz().EsPlanetaDeLaIA()) { ListaDeNodosIA.Add(nodo); } if (nodo.getDatoRaiz().EsPlanetaDelJugador()) { ListaDeNodosUsuario.Add(nodo); } } int menordistancia = -20; ArbolGeneral <Planeta> nodoIAaMover = arbol; foreach (ArbolGeneral <Planeta> nodoU in ListaDeNodosUsuario) { foreach (ArbolGeneral <Planeta> nodoIA in ListaDeNodosUsuario) { int distancia = Distancia_Nodo(arbol, nodoIA, nodoU); if (Math.Abs(distancia) < menordistancia) { nodoIAaMover = nodoIA; } } } Movimiento mover = obtengoCamino(arbol, nodoIAaMover, menordistancia); return(mover); }
public Movimiento obtengoCamino(ArbolGeneral <Planeta> arbol, ArbolGeneral <Planeta> ia, int sentido) { List <ArbolGeneral <Planeta> > ListaPreorden = arbol.ListaPreOrden(); Movimiento mover = null; Planeta origen; Planeta destino; int posicioIA = -1; for (int y = 0; y < ListaPreorden.Count; y++) { if (ListaPreorden[y].Equals(ia)) { posicioIA = y; } } if (sentido == -20) {//ir a raiz //Es hijo de la raiz if (posicioIA - 1 % 3 == 0 || posicioIA == 1) { //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[0].getDatoRaiz(); mover = new Movimiento(origen, destino); } else { //no es hijo de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[posicioIA - 1].getDatoRaiz(); mover = new Movimiento(origen, destino); mover = OpcionMover2ARaiz(arbol); } } else if (sentido > 0) { //me muevo para arriba if (posicioIA - 1 % 3 == 0 || posicioIA == 1) { //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[0].getDatoRaiz(); mover = new Movimiento(origen, destino); } else { //no es hijo de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[posicioIA - 1].getDatoRaiz(); mover = new Movimiento(origen, destino); } } else { //me muevo para abajo if (posicioIA - 1 % 3 == 0 || posicioIA == 1) { //si posicion-1 es divisible por 3 se que es uno de los nodos hijos de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[posicioIA + 3].getDatoRaiz(); mover = new Movimiento(origen, destino); } else { //no es hijo de la raiz origen = ListaPreorden[posicioIA].getDatoRaiz(); destino = ListaPreorden[posicioIA + 1].getDatoRaiz(); mover = new Movimiento(origen, destino); } } return(mover); }