//Inserta un valor de forma ordenada public void insertar(string valor) { NodoM nuevo = new NodoM(); nuevo.valor = valor; //Se asigna el valor var isNumeric = int.TryParse(valor, out var n); if (esVacia()) { if (isNumeric) { inicio = nuevo; fin = nuevo; tamaño++; } } else { if (isNumeric) { insertarEnOrden(nuevo); tamaño++; } } }
//Recibe dos nodos, al nuevo le coloca los del nodo para volverlo el principal en la matriz public void colocarApuntadores(NodoM nodo, NodoM nuevo) { nuevo.arriba = nodo.arriba; nuevo.abajo = nodo.abajo; nuevo.derecha = nodo.derecha; nuevo.izquierda = nodo.izquierda; if (nodo.arriba != null) { nodo.arriba.abajo = nuevo; } if (nodo.abajo != null) { nodo.abajo.arriba = nuevo; } if (nodo.derecha != null) { nodo.derecha.izquierda = nuevo; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nuevo; } nodo.arriba = null; nodo.abajo = null; nodo.derecha = null; nodo.izquierda = null; }
//Inserta un valor de forma ordenada public void insertar(string valor) { NodoM nuevo = new NodoM(); nuevo.valor = valor; //Se asigna el valor bool esLetras = Regex.IsMatch(valor, @"^[\p{L}]+$"); if (esVacia()) { if (esLetras) { inicio = nuevo; fin = nuevo; tamaño++; } } else { if (esLetras) { insertarEnOrden(nuevo); tamaño++; } } }
public void eliminar(string x, string y, int nivel) { NodoM nodo = obtenerNodo(x, y); if (nodo != null) { if (nodo.getZ() == nivel) { eliminarPrincipal(nodo); } else { NodoM aux = obtenerNivel(nodo, nivel); if (aux != null) { if (aux.atras != null) { aux.atras.adelante = aux.adelante; } if (aux.adelante != null) { aux.adelante.atras = aux.atras; } } } } }
public bool existeHorizontal(string x, string y, Unidad unidad) { //Se crea la cabezera en y listaVertical.insertar(x); //Se crea el nuevo nodo NodoM nuevo = new NodoM(); nuevo.x = x; nuevo.y = y; nuevo.unidad = unidad; NodoM aux = listaHorizontal.buscar(y); aux = aux.abajo; bool agregado = false; while (aux != null) { if (esMayor(aux.x, x) < 0) { aux = aux.abajo; } else { nuevo.abajo = aux; nuevo.arriba = aux.arriba; aux.arriba.abajo = nuevo; aux.arriba = nuevo; agregado = true; tamaño++; break; } } if (!agregado) { aux = listaHorizontal.buscar(y); aux = aux.abajo; while (aux.abajo != null) { aux = aux.abajo; } nuevo.arriba = aux; aux.abajo = nuevo; tamaño++; } NodoM auxV = listaVertical.buscar(x); auxV.derecha = nuevo; nuevo.izquierda = auxV; tamaño++; return(true); }
public bool existeVertical(string x, string y, Unidad unidad) { listaHorizontal.insertar(y); NodoM nuevo = new NodoM(); nuevo.x = x; nuevo.y = y; nuevo.unidad = unidad; NodoM auxV = listaVertical.buscar(x); auxV = auxV.derecha; bool agregado = false; while (auxV != null) { if (esMayor2(auxV.y, y) < 0) { auxV = auxV.derecha; } else { nuevo.derecha = auxV; nuevo.izquierda = auxV.izquierda; auxV.izquierda.derecha = nuevo; auxV.izquierda = nuevo; tamaño++; agregado = true; break; } } if (!agregado) { auxV = listaVertical.buscar(x); auxV = auxV.derecha; while (auxV.derecha != null) { auxV = auxV.derecha; } nuevo.izquierda = auxV; auxV.derecha = nuevo; tamaño++; } NodoM aux = listaHorizontal.buscar(y); aux.abajo = nuevo; nuevo.arriba = aux; tamaño++; return(true); }
//Recorre la lista buscando la posición para insertar de forma ordenada public void insertarEnOrden(NodoM nuevo) { NodoM aux = inicio; bool insertado = false; //Se recorre la lista buscando la posición para insertar while (aux != null) { //Nuevo es menor que actual if (esMayor(nuevo.valor, aux.valor) < 0) { if (aux == inicio) { nuevo.abajo = aux; aux.arriba = nuevo; inicio = nuevo; tamaño++; insertado = true; break; } else { nuevo.arriba = aux.arriba; aux.arriba.abajo = nuevo; nuevo.abajo = aux; aux.arriba = nuevo; tamaño++; insertado = true; break; } } //Nuevo es igual a actual else if (esMayor(nuevo.valor, aux.valor) == 0) { insertado = true; break; } //Nuevo es mayor que actual else if (esMayor(nuevo.valor, aux.valor) > 0) { aux = aux.abajo; } } //Si no se insertó al recorrer, se inserta al final if (insertado == false) { fin.abajo = nuevo; nuevo.arriba = fin; fin = nuevo; tamaño++; } }
public bool encabezadoEsVacioV(NodoM nodo) { while (nodo != null) { nodo = nodo.derecha; if (nodo != null) { return(false); } return(true); } return(true); }
public bool encabezadoEsVacioH(NodoM nodo) { while (nodo != null) { nodo = nodo.abajo; if (nodo != null) { return(false); } return(true); } return(true); }
public bool insertar(string x, string y, Unidad unidad) { if (esVacia()) { listaVertical = new ListaDobleV(); listaHorizontal = new ListaDobleH(); NodoM nuevo = new NodoM(); nuevo.unidad = unidad; nuevo.x = x; nuevo.y = y; listaVertical.insertar(x); listaHorizontal.insertar(y); NodoM encabezadoVertical = listaVertical.buscar(x); NodoM encabezadoHorizontal = listaHorizontal.buscar(y); encabezadoVertical.derecha = nuevo; encabezadoHorizontal.abajo = nuevo; nuevo.arriba = encabezadoHorizontal; nuevo.izquierda = encabezadoVertical; tamaño++; return(true); } else { if (listaVertical.buscar(x) != null && listaHorizontal.buscar(y) != null) { return(existenAmbosEncabezados(x, y, unidad)); } else if (listaVertical.buscar(x) == null && listaHorizontal.buscar(y) != null) { return(existeHorizontal(x, y, unidad)); } else if (listaVertical.buscar(x) != null && listaHorizontal.buscar(y) == null) { return(existeVertical(x, y, unidad)); } else if (listaVertical.buscar(x) == null && listaHorizontal.buscar(y) == null) { return(noExisten(x, y, unidad)); } } return(false); }
//Elimina un nodo en base a un valor public void eliminar(string valor) { if (!esVacia()) { NodoM aux = inicio; while (aux != null) { if (aux.valor.Equals(valor)) { eliminarNodo(aux); break; } else { aux = aux.abajo; } } } }
//Busca y devuelve un nodo si tiene el mismo valor, sino, devuelve null public NodoM buscar(string valor) { if (!esVacia()) { NodoM aux = inicio; while (aux != null) { if (aux.valor.Equals(valor)) { return(aux); } else { aux = aux.abajo; } } } return(null); }
//Devuelve true/false si existe o no un nodo con las coordenadas x,y public bool comparar(string x, string y) { NodoM aux = listaHorizontal.buscar(y); if (aux != null) { aux = aux.abajo; while (aux != null) { if (aux.x.Equals(x)) { return(true); } else { aux = aux.abajo; } } } return(false); }
//Escribe y retorna un string en lenguaje dot con un subgrafo de esta lista public string escribirDOTPrincipal(string nombre) { string texto = ""; if (tamaño > 0) { NodoM aux = inicio; while (aux != null) { texto += "\"" + aux.valor + "\"[label=\"" + aux.valor + "\", shape = Mrecord, pos=\"" + (convertirString(aux.valor) * modificador).ToString() + ",0!\"];" + Environment.NewLine; aux = aux.derecha; } aux = inicio; while (aux.derecha != null) { texto += "\"" + aux.valor + "\" -> \"" + aux.derecha.valor + "\";" + Environment.NewLine; aux = aux.derecha; } } return(texto); }
//Elimina el nodo encontrado con el metodo eliminar public void eliminarNodo(NodoM nodo) { if (nodo == inicio) { if (nodo.abajo != null) { inicio = nodo.abajo; nodo.abajo.arriba = null; tamaño--; } else { inicio = null; fin = null; tamaño = 0; } } else if (nodo == fin) { if (nodo.arriba != null) { fin = nodo.arriba; nodo.arriba.abajo = null; tamaño--; } else { inicio = null; fin = null; tamaño = 0; } } else { nodo.arriba.abajo = nodo.abajo; nodo.abajo.arriba = nodo.arriba; tamaño--; } }
//Escribe y retorna un string en lenguaje dot con un subgrafo de esta lista public string escribirDOTPrincipal(string nombre) { string texto = ""; if (tamaño > 0) { NodoM aux = inicio; while (aux != null) { texto += "\"" + aux.valor + "\"[label=\"" + aux.valor + "\" shape = Mrecord, pos=\"0,-" + (Int32.Parse(aux.valor) * modificador).ToString() + "!\"];" + Environment.NewLine; aux = aux.abajo; } aux = inicio; while (aux.abajo != null) { texto += "\"" + aux.valor + "\" -> \"" + aux.abajo.valor + "\";" + Environment.NewLine; aux = aux.abajo; } } return(texto); }
//Elimina el nodo encontrado con el metodo eliminar public void eliminarNodo(NodoM nodo) { if (nodo == inicio) { if (nodo.derecha != null) { inicio = nodo.derecha; nodo.derecha.izquierda = null; tamaño--; } else { inicio = null; fin = null; tamaño = 0; } } else if (nodo == fin) { if (nodo.izquierda != null) { fin = nodo.izquierda; nodo.izquierda.derecha = null; tamaño--; } else { inicio = null; fin = null; tamaño = 0; } } else { nodo.izquierda.derecha = nodo.derecha; nodo.derecha.izquierda = nodo.izquierda; tamaño--; } }
//Busca en la matriz un nodo con las coordenadas x, y //si existe lo devuelve, sino, devuelve null public NodoM obtenerNodo(string x, string y) { NodoM nodo = null; if (comparar(x, y)) { NodoM aux = listaHorizontal.buscar(y); aux = aux.abajo; while (aux != null) { if (aux.x.Equals(x)) { nodo = aux; break; } else { aux = aux.abajo; } } } return(nodo); }
public bool noExisten(string x, string y, Unidad unidad) { listaHorizontal.insertar(y); listaVertical.insertar(x); NodoM nuevo = new NodoM(); nuevo.x = x; nuevo.y = y; nuevo.unidad = unidad; NodoM aux = listaHorizontal.buscar(y); NodoM auxV = listaVertical.buscar(x); aux.abajo = nuevo; auxV.derecha = nuevo; nuevo.arriba = aux; nuevo.izquierda = auxV; tamaño++; tamaño++; return(true); }
//ESTE MÉTODO RECIBE UN NODO, Y DEVUELVE EL NODO EN EL NIVEL ESPECIFICADO, SI ESTE EXISTE, SINO, RETORNA NULL. public NodoM obtenerNivel(NodoM nodo, int nivel) { if (nodo != null) { if (nodo.getZ() == 0) { if (nivel == 0) { return(nodo); } else if (nivel == 1) { return(nodo.adelante); } else if (nivel == 2) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } else if (nivel == 3) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } } else if (nodo.getZ() == 1) { if (nivel == 0) { return(nodo.atras); } else if (nivel == 1) { return(nodo); } else if (nivel == 2) { if (nodo.adelante != null) { if (nodo.adelante.getZ() == 2) { return(nodo.adelante); } } } else if (nivel == 3) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.adelante; } } } else if (nodo.getZ() == 2) { if (nivel == 0) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 1) { return(nodo.atras); } else if (nivel == 2) { return(nodo); } else if (nivel == 3) { return(nodo.adelante); } } else if (nodo.getZ() == 3) { if (nivel == 0) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 1) { NodoM aux = nodo; while (aux != null) { if (aux.getZ() == nivel) { return(aux); } aux = aux.atras; } } else if (nivel == 2) { return(nodo.atras); } else if (nivel == 3) { return(nodo); } } } return(null); }
public string escribirDOTPrincipal() { string texto = ""; if (listaHorizontal != null) { NodoM aux = listaHorizontal.inicio; while (aux != null) { NodoM aux2 = aux.abajo; while (aux2 != null) { texto += "\"" + aux2.x + aux2.y + "\"[label=\"{<f0>" + aux2.unidad.subtipo + "|<f1>Mov:" + aux2.unidad.movimiento.ToString() + "|<f2>Vida:" + aux2.unidad.vida.ToString() + "|<f3>Alcance:" + aux2.unidad.alcance.ToString() + "|<f4>Daño:" + aux2.unidad.daño.ToString() + "|<f5>Usuario:" + aux2.unidad.usuario + "}\", shape = Mrecord, pos=\"" + (convertirString(aux2.y) * modificador).ToString() + ",-" + (Int32.Parse(aux2.x) * modificador).ToString() + "!\"];" + Environment.NewLine; aux2 = aux2.abajo; } aux = aux.derecha; } } if (listaHorizontal != null) { NodoM aux = listaHorizontal.inicio; while (aux != null) { NodoM aux2 = aux.abajo; if (aux2 != null) { texto += "\"" + aux.valor + "\" -> \"" + aux2.x + aux2.y + "\":f0;" + Environment.NewLine; } while (aux2.abajo != null) { texto += "\"" + aux2.x + aux2.y + "\":f5 -> \"" + aux2.abajo.x + aux2.abajo.y + "\":f0;" + Environment.NewLine; aux2 = aux2.abajo; } aux = aux.derecha; } } if (listaVertical != null) { NodoM aux = listaVertical.inicio; while (aux != null) { NodoM aux2 = aux.derecha; if (aux2 != null) { texto += "\"" + aux.valor + "\" -> \"" + aux2.x + aux2.y + "\";" + Environment.NewLine; } while (aux2.derecha != null) { texto += "\"" + aux2.x + aux2.y + "\" -> \"" + aux2.derecha.x + aux2.derecha.y + "\";" + Environment.NewLine; aux2 = aux2.derecha; } aux = aux.abajo; } } texto += "}" + Environment.NewLine; return(texto); }
//Método en el que se agrega un nodo a una posición donde ya existía un nodo. //Funciona evaluando todas las combinaciones, para los valores del nodo actual 0,1,2,3 //y el nodo nuevo 0,1,2,3 public bool agregarANodo(NodoM nodo, NodoM nuevo) { if (nodo.getZ() == 0) { if (nuevo.getZ() == 1) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; colocarApuntadores(nodo, nuevo); tamaño++; } else if (nodo.adelante.getZ() != 1) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; } return(true); } else if (nuevo.getZ() == 2) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; } else if (nodo.adelante.getZ() == 3) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; tamaño++; } return(true); } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; } else if (nodo.adelante.getZ() == 2) { nodo.adelante.adelante = nuevo; nuevo.atras = nodo.adelante; tamaño++; } return(true); } } else if (nodo.getZ() == 1) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } } else if (nuevo.getZ() == 2) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } else if (nodo.adelante.getZ() == 3) { nuevo.adelante = nodo.adelante; nuevo.atras = nodo; nodo.adelante.atras = nuevo; nodo.adelante = nuevo; tamaño++; return(true); } } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } else if (nodo.adelante.getZ() == 2) { if (nodo.adelante.adelante == null) { nodo.adelante.adelante = nuevo; nuevo.atras = nodo.adelante; tamaño++; return(true); } } } } else if (nodo.getZ() == 2) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } } else if (nuevo.getZ() == 1) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.getZ() == 0) { nuevo.adelante = nodo; nuevo.atras = nodo.atras; nodo.atras.adelante = nuevo; nodo.atras = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } } else if (nuevo.getZ() == 3) { if (nodo.adelante == null) { nodo.adelante = nuevo; nuevo.atras = nodo; tamaño++; return(true); } } } else if (nodo.getZ() == 3) { if (nuevo.getZ() == 0) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } else if (nodo.atras.getZ() == 2) { if (nodo.atras.atras == null) { nodo.atras.atras = nuevo; nuevo.adelante = nodo.atras; tamaño++; return(true); } } } else if (nuevo.getZ() == 1) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.getZ() == 2) { if (nodo.atras.atras == null) { nodo.atras.atras = nuevo; nuevo.adelante = nodo.atras; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } else if (nodo.atras.atras.getZ() == 0) { nuevo.adelante = nodo.atras; nuevo.atras = nodo.atras.atras; nodo.atras.atras.adelante = nuevo; nodo.atras.atras = nuevo; colocarApuntadores(nodo, nuevo); tamaño++; return(true); } } } else if (nuevo.getZ() == 2) { if (nodo.atras == null) { nodo.atras = nuevo; nuevo.adelante = nodo; tamaño++; return(true); } else if (nodo.atras.getZ() == 0) { nuevo.atras = nodo.atras; nuevo.adelante = nodo; nodo.atras.adelante = nuevo; nodo.atras = nuevo; tamaño++; return(true); } } } return(false); }
public string escribirDOTNivel(int nivel) { string texto = ""; if (listaHorizontal != null) { NodoM aux = listaHorizontal.inicio; while (aux != null) { NodoM aux2 = aux.abajo; while (aux2 != null) { NodoM temp = obtenerNivel(aux2, nivel); if (temp != null) { texto += "\"" + temp.x + temp.y + "\"[label=\"{<f0>" + temp.unidad.subtipo + "|<f1>Vida:" + temp.unidad.vida.ToString() + "|<f2>Mov:" + temp.unidad.movimiento.ToString() + "|<f3>Alcance:" + temp.unidad.alcance.ToString() + "|<f4>Daño:" + temp.unidad.daño.ToString() + "|<f5>Usuario:" + temp.unidad.usuario + "}\", shape = Mrecord, pos=\"" + (convertirString(temp.y) * modificador).ToString() + ",-" + (Int32.Parse(temp.x) * modificador).ToString() + "!\"];" + Environment.NewLine; } aux2 = aux2.abajo; } aux = aux.derecha; } } if (listaHorizontal != null) { NodoM aux = listaHorizontal.inicio; while (aux != null) { NodoM aux2 = aux.abajo; NodoM temp = obtenerNivel(aux2, nivel); while (temp == null && aux2 != null) { aux2 = aux2.abajo; temp = obtenerNivel(aux2, nivel); } if (temp != null) { texto += "\"" + aux.valor + "\" -> \"" + temp.x + temp.y + "\":f0;" + Environment.NewLine; } if (aux2 != null) { aux2 = aux2.abajo; } while (aux2 != null) { if (obtenerNivel(aux2, nivel) != null) { texto += "\"" + temp.x + temp.y + "\":f5 -> \"" + obtenerNivel(aux2, nivel).x + obtenerNivel(aux2, nivel).y + "\":f0;" + Environment.NewLine; temp = obtenerNivel(aux2, nivel); } aux2 = aux2.abajo; } aux = aux.derecha; } } if (listaVertical != null) { NodoM aux = listaVertical.inicio; while (aux != null) { NodoM aux2 = aux.derecha; NodoM temp = obtenerNivel(aux2, nivel); while (temp == null && aux2 != null) { aux2 = aux2.derecha; temp = obtenerNivel(aux2, nivel); } if (temp != null) { texto += "\"" + aux.valor + "\" -> \"" + temp.x + temp.y + "\";" + Environment.NewLine; } if (aux2 != null) { aux2 = aux2.derecha; } while (aux2 != null) { if (obtenerNivel(aux2, nivel) != null) { texto += "\"" + temp.x + temp.y + "\" -> \"" + obtenerNivel(aux2, nivel).x + obtenerNivel(aux2, nivel).y + "\";" + Environment.NewLine; temp = obtenerNivel(aux2, nivel); } aux2 = aux2.derecha; } aux = aux.abajo; } } return(texto); }
public string moverUnidad(string x, string y, string nivel, string usuario, string x2, string y2) { if (partida != null) { if (partida.mover) { if (validarPosicion(x, y)) { if (partida.jugador1.nombre.Equals(usuario)) { if (partida.tablero.obtenerNodo(x, y) != null) { NodoM aux = partida.tablero.obtenerNivel(partida.tablero.obtenerNodo(x, y), Int32.Parse(nivel)); if (aux != null) { if (aux.unidad.usuario.Equals(usuario)) { if (validarDistancia(x, convertirString(y), x2, convertirString(y2), aux.unidad.movimiento)) { if (partida.tablero.insertar(x2, y2, aux.unidad)) { partida.tablero.eliminar(x, y, Int32.Parse(nivel)); textoConsola += "El usuario " + aux.unidad.usuario + " ha movido su " + aux.unidad.subtipo + " de " + x + "," + y + " a la posición " + x2 + "," + y2 + ".\n"; return("se ha movido " + aux.unidad.subtipo + " de " + usuario); } else { NodoM aux2 = partida.tablero.obtenerNodo(x2, y2); return("La posicón a la que se quiere mover ya está ocupada."); } } return(aux.unidad.subtipo + " no se puede mover más de " + aux.unidad.movimiento); } return("La unidad no es del usuario " + usuario + " es de " + aux.unidad.usuario); } return("La unidad no está en este nodo"); } return("El nodo no existe."); } else if (partida.jugador2.nombre.Equals(usuario)) { if (partida.tablero.obtenerNodo(x, y) != null) { NodoM aux = partida.tablero.obtenerNivel(partida.tablero.obtenerNodo(x, y), Int32.Parse(nivel)); if (aux != null) { if (aux.unidad.usuario.Equals(usuario)) { if (validarDistancia(x, convertirString(y), x2, convertirString(y2), aux.unidad.movimiento)) { if (partida.tablero.insertar(x2, y2, aux.unidad)) { partida.tablero.eliminar(x, y, Int32.Parse(nivel)); textoConsola += "El usuario " + aux.unidad.usuario + " ha movido su " + aux.unidad.subtipo + " de " + x + "," + y + " a la posición " + x2 + "," + y2 + ".\n"; return("se ha movido " + aux.unidad.subtipo + " de " + usuario); } return("La posicón a la que se quiere mover ya está ocupada."); } return(aux.unidad.subtipo + " no se puede mover más de " + aux.unidad.movimiento); } return("La unidad no es del usuario " + usuario + " es de " + aux.unidad.usuario); } return("La unidad no está en este nodo"); } return("El nodo no existe."); } return("el usuario " + usuario + " no esta en la partida"); } return("La posición está fuera del tablero"); } return("no se puede mover aún"); } return("la partida no existe"); }
public bool existenAmbosEncabezados(string x, string y, Unidad unidad) { //Se busca el nodo en la posición x,y NodoM nodo = obtenerNodo(x, y); //Si el nodo existe, se agrega el nuevo nodo con relación a este. if (nodo != null) { NodoM nuevo = new NodoM(); nuevo.x = x; nuevo.y = y; nuevo.unidad = unidad; return(agregarANodo(nodo, nuevo)); } //Si no existe un nodo en las coordenadas x,y else { //-----------------------PARA INSERTAR EN Y----------------------// //Se crea el nuevo nodo NodoM nuevo = new NodoM(); nuevo.x = x; nuevo.y = y; nuevo.unidad = unidad; //Se busca el encabezado en donde se va a insertar //y se recorre hacia abajo buscando la posicion en y a insertar NodoM aux = listaHorizontal.buscar(y); aux = aux.abajo; bool agregado = false; while (aux != null) { if (esMayor(aux.x, x) < 0) { aux = aux.abajo; } else { //Se inserta si se encuentra la posición correcta en y nuevo.abajo = aux; nuevo.arriba = aux.arriba; aux.arriba.abajo = nuevo; aux.arriba = nuevo; tamaño++; agregado = true; break; } } //Si no se agregó, se agrega hasta abajo del encabezado if (!agregado) { aux = listaHorizontal.buscar(y); aux = aux.abajo; while (aux.abajo != null) { aux = aux.abajo; } nuevo.arriba = aux; aux.abajo = nuevo; tamaño++; } //-----------------------PARA INSERTAR EN X----------------------// //Se recorre buscando la posición correcta en X NodoM auxV = listaVertical.buscar(x); auxV = auxV.derecha; agregado = false; while (auxV != null) { if (esMayor2(auxV.y, y) < 0) { auxV = auxV.derecha; } else { //Si se encuentra se inserta nuevo.derecha = auxV; nuevo.izquierda = auxV.izquierda; auxV.izquierda.derecha = nuevo; auxV.izquierda = nuevo; tamaño++; agregado = true; break; } } //Si no se insertó, se inserta al final del encabezado vertical if (!agregado) { auxV = listaVertical.buscar(x); auxV = auxV.derecha; while (auxV.derecha != null) { auxV = auxV.derecha; } auxV.derecha = nuevo; nuevo.izquierda = auxV; tamaño++; } return(true); } return(false); }
public string atacar(string x, string y, string nivel, string usuario, string x2, string y2, string nivel2) { if (partida != null) { if (partida.mover) { NodoM aux = partida.tablero.obtenerNivel(partida.tablero.obtenerNodo(x, y), Int32.Parse(nivel)); if (aux != null) { if (aux.unidad.usuario.Equals(usuario)) { if (validarAtaque(x, y, aux.unidad.subtipo, nivel, x2, y2, nivel2)) { NodoM aux2 = partida.tablero.obtenerNivel(partida.tablero.obtenerNodo(x2, y2), Int32.Parse(nivel2)); if (aux2 != null) { if (!aux2.unidad.usuario.Equals(usuario)) { aux2.unidad.vida -= aux.unidad.daño; textoConsola += "El " + aux2.unidad.subtipo + " de " + aux2.unidad.usuario + " en " + x2 + "," + y2 + " ha recibido " + aux.unidad.daño + " puntos de daño por el " + aux.unidad.subtipo + " de " + usuario + " en " + x + "," + y + ".\n"; if (aux2.unidad.vida <= 0) { partida.tablero.eliminar(x2, y2, Int32.Parse(nivel2)); if (partida.jugador1.nombre.Equals(aux2.unidad.usuario)) { partida.jugador1.unidades--; textoConsola += "El " + aux2.unidad.subtipo + " de " + aux2.unidad.usuario + " en " + x2 + "," + y2 + " ha sido destruida por " + usuario + ".\n"; if (partida.jugador1.unidades <= 0) { insertarJuego(partida.jugador1.nombre, partida.jugador2.nombre, partida.getDesplegadas(), partida.getSobrevivientes(), (partida.getDesplegadas() - partida.getSobrevivientes()), false); insertarJuego(partida.jugador2.nombre, partida.jugador1.nombre, partida.getDesplegadas(), partida.getSobrevivientes(), (partida.getDesplegadas() - partida.getSobrevivientes()), true); termino = true; partida.ganador = partida.jugador2.nombre; } return("La unidad de " + aux2.unidad.usuario + " ha sido destruida."); } else if (partida.jugador2.nombre.Equals(aux2.unidad.usuario)) { partida.jugador2.unidades--; textoConsola += "El " + aux2.unidad.subtipo + " de " + aux2.unidad.usuario + " en " + x2 + "," + y2 + " ha sido destruida por " + usuario + ".\n"; if (partida.jugador2.unidades <= 0) { insertarJuego(partida.jugador1.nombre, partida.jugador2.nombre, partida.getDesplegadas(), partida.getSobrevivientes(), (partida.getDesplegadas() - partida.getSobrevivientes()), true); insertarJuego(partida.jugador2.nombre, partida.jugador1.nombre, partida.getDesplegadas(), partida.getSobrevivientes(), (partida.getDesplegadas() - partida.getSobrevivientes()), false); termino = true; partida.ganador = partida.jugador1.nombre; } return("La unidad de " + aux2.unidad.usuario + " ha sido destruida."); } } return("La unidad de " + aux2.unidad.usuario + " ha sido atacada en " + x2 + "," + y2 + "."); } return("No puedes atacar a una unidad que te pertenece"); } return("No existe una unidad en la posición " + x + "," + y + " en el nivel " + nivel2); } return("El " + aux.unidad.subtipo + " de " + usuario + " no puede atacar a la posición deseada."); } return("La unidad que " + usuario + " quiere utilizar, no le pertenece"); } return("La unidad atacante de " + usuario + " en la posición " + x + "," + y + " no existe."); } return("Aún no se han terminado de colocar las unidades"); } return("La partida aún no empieza"); }
public void eliminarPrincipal(NodoM nodo) { if (nodo != null) { if (nodo.getZ() == 0) { if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 1) { if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.atras = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 2) { if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = nodo.adelante; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 3) != null) { NodoM aux = obtenerNivel(nodo, 3); aux.atras = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } else if (nodo.getZ() == 3) { if (obtenerNivel(nodo, 2) != null) { NodoM aux = obtenerNivel(nodo, 2); aux.adelante = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 1) != null) { NodoM aux = obtenerNivel(nodo, 1); aux.adelante = null; colocarApuntadores(nodo, aux); } else if (obtenerNivel(nodo, 0) != null) { NodoM aux = obtenerNivel(nodo, 0); aux.adelante = null; colocarApuntadores(nodo, aux); } else { if (nodo.arriba != null) { nodo.arriba.abajo = nodo.abajo; } if (nodo.abajo != null) { nodo.abajo.arriba = nodo.arriba; } if (nodo.derecha != null) { nodo.derecha.izquierda = nodo.izquierda; } if (nodo.izquierda != null) { nodo.izquierda.derecha = nodo.derecha; } NodoM encabezadoH = listaHorizontal.buscar(nodo.y); if (encabezadoEsVacioH(encabezadoH)) { listaHorizontal.eliminar(nodo.y); } NodoM encabezadoV = listaVertical.buscar(nodo.x); if (encabezadoEsVacioV(encabezadoV)) { listaVertical.eliminar(nodo.x); } } } } }