//Constructor public NodoEncabezadoMatriz(int indice) { this.indice = indice; accesoMatriz = null; siguiente = null; anterior = null; }
private void graficarColumna(string titulo, int nivel) { NodoEncabezadoMatriz columnaGraficar = columna.ini; while (columnaGraficar != null) { NodoMatrizDispersa nodoActual = columnaGraficar.accesoMatriz; while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { nodo = "\tnd" + nodoAux.coor_y.ToString() + nodoAux.coor_x.ToString() + nodoAux.coor_z.ToString(); graphMatriz += nodo + ";\n\t" + nodo + "[label=\"" + "Unidad: " + nodoAux.unidad + "\nVida: " + nodoAux.vida.ToString() + "\nAlcance: " + nodoAux.alcance.ToString() + "\nDaño: " + nodoAux.hurt.ToString() + "\nNivel: " + nodoAux.coor_z.ToString() + "\", color=gray75];\n\t"; if (buscarNivel(nodoActual.abajo, nivel) != null) { graphMatriz += nodo + " -> "; } } nodoActual = nodoActual.abajo; } columnaGraficar = columnaGraficar.siguiente; } }
private void graficarEnlaceColumna(string titulo, int nivel) { NodoEncabezadoMatriz columnaGrafica = columna.ini; graphMatriz += "MATRIZ"; while (columnaGrafica != null) { NodoMatrizDispersa nodoActual = columnaGrafica.accesoMatriz; col = "C" + columnaGrafica.indice.ToString(); while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { graphMatriz += " -> " + col; //graphMatriz += ""; break; } nodoActual = nodoActual.abajo; } columnaGrafica = columnaGrafica.siguiente; } graphMatriz += ";\n\t"; }
//Buscar Nodo en la matriz por unidad public NodoMatrizDispersa buscarNodo(NodoMatrizDispersa nodoBusqueda, string unidad, int nivel) { NodoMatrizDispersa nodoAux = nodoBusqueda; NodoMatrizDispersa nodoTemporal; return(nodoAux); }
private void graficarFila(string titulo, int nivel) { NodoEncabezadoMatriz filaGraficar = fila.ini; while (filaGraficar != null) { NodoMatrizDispersa nodoActual = filaGraficar.accesoMatriz; while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { nodo = "nd" + nodoAux.coor_y.ToString() + nodoAux.coor_x.ToString() + nodoAux.coor_z.ToString(); graphMatriz += nodo + ";\n\t"; if (buscarNivel(nodoActual.derecha, nivel) != null) { graphMatriz += nodo + " ->"; } } nodoActual = nodoActual.derecha; } filaGraficar = filaGraficar.siguiente; } }
private void graficarEnlaceColumnaNodo(string titulo, int nivel) { NodoEncabezadoMatriz columnaGrafica = columna.ini; while (columnaGrafica != null) { NodoMatrizDispersa nodoActualGrafica = columnaGrafica.accesoMatriz; col = "C" + columnaGrafica.indice.ToString(); while (nodoActualGrafica != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActualGrafica, nivel); //col = "C" + columnaGrafica.indice.ToString();//Identificador para columna if (nodoAux != null) { nodo = "nd" + nodoAux.coor_y.ToString() + nodoAux.coor_x.ToString() + nodoAux.coor_z.ToString();//Identificador para nodo graphMatriz += col + " -> " + nodo + ";\n\t"; graphMatriz += nodo + " -> " + col + ";\n\t"; break; } nodoActualGrafica = nodoActualGrafica.abajo; } columnaGrafica = columnaGrafica.siguiente; } }
//Eliminar Fila public void eliminarFila(NodoMatrizDispersa nodoEliminar) { bool top = false; bool bottom = false; if (nodoEliminar.adelante != null) { nodoEliminar.adelante.atras = nodoEliminar.atras; } else { top = true; } if (nodoEliminar.atras != null) { nodoEliminar.atras.adelante = nodoEliminar.adelante; } else { top = true; } if (nodoEliminar.derecha != null) { if (!bottom) { nodoEliminar.derecha.izquierda = nodoEliminar.atras; nodoEliminar.atras.derecha = nodoEliminar.derecha; } else { nodoEliminar.derecha.izquierda = nodoEliminar.izquierda; } } if (nodoEliminar.izquierda != null) { if (!bottom) { nodoEliminar.izquierda.derecha = nodoEliminar.atras; nodoEliminar.atras.izquierda = nodoEliminar.izquierda; } else { nodoEliminar.izquierda.derecha = nodoEliminar.derecha; } } else { if (top && !bottom) { accesoMatriz = nodoEliminar.atras; } else if (top) { accesoMatriz = nodoEliminar.derecha; } } }
//Insertar en fila public void insertarFila(NodoMatrizDispersa nuevoNodo) { if (accesoMatriz != null) { if (accesoMatriz.coor_x > nuevoNodo.coor_x)//si esto es verdadero se inserta a la cabeza { nuevoNodo.derecha = accesoMatriz; accesoMatriz.izquierda = nuevoNodo; accesoMatriz = nuevoNodo; } else { NodoMatrizDispersa nodoAux = accesoMatriz; while (nodoAux.derecha != null) { if (nodoAux.coor_x < nuevoNodo.coor_x) { nodoAux = nodoAux.derecha; } else { break; } } if (nodoAux.coor_x > nuevoNodo.coor_x) { nuevoNodo.izquierda = nodoAux.izquierda; nuevoNodo.derecha = nodoAux; nodoAux.izquierda.derecha = nuevoNodo; nodoAux.izquierda = nuevoNodo; } else if (nodoAux.coor_x < nuevoNodo.coor_x)//ahora el nodo nuevo es mayor por lo tanto se ingresa despues { nuevoNodo.derecha = nodoAux.derecha; nuevoNodo.izquierda = nodoAux; if (nodoAux.derecha != null) { nodoAux.derecha.izquierda = nuevoNodo; } nodoAux.derecha = nuevoNodo; } else//en cual otro caso ordenamos los nodos y el valor de retorno es igual al valor auxiliar { nodoAux = ordenarNodos(nodoAux, nuevoNodo); if (nodoAux.izquierda == null) { accesoMatriz = nodoAux; } } } } else { accesoMatriz = nuevoNodo; } }
private void enviarRank(string titulo, int nivel) { //Columnas NodoEncabezadoMatriz nodoEncabezadoAux = columna.ini; graphMatriz += "{ rank=min; MATRIZ; "; while (nodoEncabezadoAux != null) { NodoMatrizDispersa nodoActual = nodoEncabezadoAux.accesoMatriz; col = "C" + nodoEncabezadoAux.indice.ToString(); while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { graphMatriz += col + "; "; break; } nodoActual = nodoActual.abajo; } nodoEncabezadoAux = nodoEncabezadoAux.siguiente; } graphMatriz += "};\n\t"; //Filas nodoEncabezadoAux = fila.ini; while (nodoEncabezadoAux != null) { NodoMatrizDispersa nodoActual = nodoEncabezadoAux.accesoMatriz; bool esFila = false; fi = "F" + nodoEncabezadoAux.indice.ToString(); graphMatriz += "{ rank=same; " + fi + "; "; fi = ""; while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { esFila = true; nodo = "nd" + nodoAux.coor_y.ToString() + nodoAux.coor_x.ToString() + nodoAux.coor_z.ToString(); graphMatriz += nodo + "; "; } nodoActual = nodoActual.derecha; } if (esFila) { graphMatriz += "};\n\t"; esFila = false; } nodoEncabezadoAux = nodoEncabezadoAux.siguiente; } }
/* * Metodos publicos para insertar, mover, graficar la matriz * 1. Insertar * 2. Mover * 3. Graficar * 4. Eliminar */ //Insertar a la matriz public void insertarMatriz(string unidad, int vida, int x, int y, int nivel, int alcance, int hurt) { NodoEncabezadoMatriz col = columna.insertarEncabezado(x); NodoEncabezadoMatriz fil = fila.insertarEncabezado(y); //Se tiene que llamar al constructor del nodo Matriz para inicializar el nodo NodoMatrizDispersa nuevoNodo = new NodoMatrizDispersa(unidad, vida, x, y, nivel, alcance, hurt); //Insertamos en la fila y columna fil.insertarFila(nuevoNodo); col.insertarFila(nuevoNodo); }
//Eliminar Columna public void eliminarColumna(NodoMatrizDispersa nodoEliminar) { bool top = false; bool bottom = false; if (nodoEliminar.adelante == null) { top = true; } if (nodoEliminar.atras == null) { bottom = true; } if (nodoEliminar.abajo != null) { if (!bottom) { nodoEliminar.abajo.arriba = nodoEliminar.atras; nodoEliminar.atras.abajo = nodoEliminar.abajo; } else { nodoEliminar.abajo.arriba = nodoEliminar.arriba; } } if (nodoEliminar.arriba != null) { if (!bottom) { nodoEliminar.arriba.abajo = nodoEliminar.atras; nodoEliminar.atras.arriba = nodoEliminar.arriba; } else { nodoEliminar.arriba.abajo = nodoEliminar.abajo; } } else { if (top && !bottom) { accesoMatriz = nodoEliminar.atras; } else { accesoMatriz = nodoEliminar.abajo; } } }
//Insertar en Columna public void insertarColumna(NodoMatrizDispersa nuevoNodo) { if (accesoMatriz != null) { if (accesoMatriz.coor_y > nuevoNodo.coor_y)//Insertando en la cabeza { nuevoNodo.abajo = accesoMatriz; accesoMatriz.arriba = nuevoNodo; accesoMatriz = nuevoNodo; } else { NodoMatrizDispersa nodoAux = accesoMatriz; while (nodoAux.abajo != null) { if (nodoAux.coor_y < nuevoNodo.coor_y) { nodoAux = nodoAux.abajo; } else { break; } } if (nodoAux.coor_y > nuevoNodo.coor_y)//Insertando antes { nuevoNodo.arriba = nodoAux.arriba; nuevoNodo.abajo = nodoAux; nodoAux.arriba.abajo = nuevoNodo; nodoAux.arriba = nuevoNodo; } else//Insertando despues { nuevoNodo.abajo = nodoAux.abajo; nuevoNodo.arriba = nodoAux; if (nodoAux.abajo != null) { nodoAux.abajo.arriba = nuevoNodo; } nodoAux.abajo = nuevoNodo; } } } else { accesoMatriz = nuevoNodo; } }
public int hurt; //daño //Constructor public NodoMatrizDispersa(string unidad, int vida, int x, int y, int z, int alcance, int hurt) { this.unidad = unidad; this.vida = vida; this.coor_x = x; this.coor_y = y; this.coor_z = z; this.alcance = alcance; this.hurt = hurt; arriba = null; abajo = null; adelante = null; izquierda = null; atras = null; derecha = null; }
//Buscar nivel private NodoMatrizDispersa buscarNivel(NodoMatrizDispersa nodoBuscar, int nivel) { NodoMatrizDispersa nodoAux = nodoBuscar; while (nodoAux != null) { if (nodoAux.coor_z == nivel) { break; } else { nodoAux = nodoAux.atras; } } return(nodoAux); }
//Eliminacion por fila public void eliminarFila(NodoMatrizDispersa nodoEliminar) { NodoEncabezadoMatriz filaEliminar = ini; while (filaEliminar != null) { if (filaEliminar.indice < nodoEliminar.coor_y) { filaEliminar = filaEliminar.siguiente; } else { break; } } filaEliminar.eliminarFila(nodoEliminar); }
//eliminacion por columna public void eliminarColumna(NodoMatrizDispersa nodoEliminar) { NodoEncabezadoMatriz columnaEliminar = ini; while (columnaEliminar != null) { if (columnaEliminar.indice < nodoEliminar.coor_x) { columnaEliminar = columnaEliminar.siguiente; } else { break; } } columnaEliminar.eliminarColumna(nodoEliminar); }
//Ordnacion de nodos private NodoMatrizDispersa ordenarNodos(NodoMatrizDispersa nodoActual, NodoMatrizDispersa nuevoNodo) { if (nodoActual.coor_z > nuevoNodo.coor_z) { nodoActual.adelante = nuevoNodo; nuevoNodo.atras = nodoActual; nuevoNodo.arriba = nodoActual.arriba; nuevoNodo.abajo = nodoActual.abajo; nuevoNodo.derecha = nodoActual.derecha; nuevoNodo.izquierda = nodoActual.izquierda; if (nodoActual.arriba != null) { nodoActual.arriba.abajo = nuevoNodo; } if (nodoActual.abajo != null) { nodoActual.abajo.arriba = nuevoNodo; } if (nodoActual.izquierda != null) { nodoActual.izquierda.derecha = nuevoNodo; } if (nodoActual.derecha != null) { nodoActual.derecha.izquierda = nuevoNodo; } return(nuevoNodo); } else { nuevoNodo.atras = nodoActual.atras; nuevoNodo.adelante = nodoActual; if (nodoActual.atras != null) { nodoActual.atras.adelante = nuevoNodo; } return(nodoActual); } }
//Buscar Nodo en la matriz por unidad public NodoMatrizDispersa buscarNodo(string unidad, int nivel) { NodoEncabezadoMatriz filaAux = ini; NodoMatrizDispersa nodoAux = null; while (filaAux != null) { nodoAux = filaAux.buscarNodo(filaAux.accesoMatriz, unidad, nivel); if (nodoAux == null) { filaAux = filaAux.siguiente; } else { break; } } return(nodoAux); }
//Buscar Nodo en la matriz por columna y nivel public NodoMatrizDispersa buscarNodo(int fila, int columna, int nivel) { NodoEncabezadoMatriz filaAux = ini; NodoMatrizDispersa nodoAux = null; while (filaAux != null) { if (filaAux.indice < fila) { filaAux = filaAux.siguiente; } else { break; } } if (filaAux != null && filaAux.indice == fila) { nodoAux = filaAux.buscarNodo(filaAux.accesoMatriz, columna, nivel); } return(nodoAux); }
private void graficarEnlaceFila(string titulo, int nivel) { NodoEncabezadoMatriz filaGrafica = fila.ini; graphMatriz += "MATRIZ"; while (filaGrafica != null) { NodoMatrizDispersa nodoActual = filaGrafica.accesoMatriz; fi = "F" + filaGrafica.indice.ToString(); while (nodoActual != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActual, nivel); if (nodoAux != null) { graphMatriz += " -> " + fi; break; } nodoActual = nodoActual.derecha; } filaGrafica = filaGrafica.siguiente; } graphMatriz += ";\n\t"; }
private void graficarEnlaceFilaNodo(string titulo, int nivel) { NodoEncabezadoMatriz filaGrafica = fila.ini; while (filaGrafica != null) { NodoMatrizDispersa nodoActualGrafica = filaGrafica.accesoMatriz; fi = "F" + filaGrafica.indice.ToString(); while (nodoActualGrafica != null) { NodoMatrizDispersa nodoAux = buscarNivel(nodoActualGrafica, nivel); if (nodoAux != null) { nodo = "nd" + nodoAux.coor_y.ToString() + nodoAux.coor_x.ToString() + nodoAux.coor_z.ToString();//Identificador para nodo graphMatriz += fi + " -> " + nodo + ";\n\t"; graphMatriz += nodo + " -> " + fi + ";\n\t"; break; } nodoActualGrafica = nodoActualGrafica.derecha; } filaGrafica = filaGrafica.siguiente; } }
//Buscar Nodo en la matriz por columna y nivel public NodoMatrizDispersa buscarNodo(NodoMatrizDispersa nodoBusqueda, int columna, int nivel) { NodoMatrizDispersa nodoAux = nodoBusqueda; return(nodoAux); }
//Validar para que no vaya a ver una colicion NodoMatrizDispersa validarMovimiento(NodoMatrizDispersa nodoDestinio, string unidad, int x, int y, int z) { return(nodoDestinio); }