示例#1
0
 public bool existePosicion(string fila, string columna)
 {
     if (!filas.isEmpty())
     {
         Cabecera aux = filas.cabeza;            //recorriendo cabeceras filas
         while (aux != null)
         {
             if (aux.titulo == fila)
             {
                 NodoMatriz auxNodo = aux.apuntadorMatriz;
                 while (auxNodo != null)
                 {
                     //buscar la columna
                     if (auxNodo.cabeceraCol.titulo == columna)
                     {
                         return(true);
                     }
                     auxNodo = auxNodo.derecha;
                 }
             }
             aux = aux.siguiente;
         }
     }
     return(false);
 }
示例#2
0
        public NodoMatriz buscarPosicionNodo(NodoMatriz cabeza, string columna) // cabeza es el apuntador de la fila a la matriz
        {
            int valColumna = getValorColumna(columna);

            if (cabeza != null)
            {
                NodoMatriz aux = cabeza;
                while (aux != null)
                {
                    if ((aux.cabeceraCol.filaCabecera < valColumna) && aux.derecha != null && (aux.derecha.cabeceraCol.filaCabecera < valColumna))
                    {
                        aux = aux.derecha;
                    }
                    else
                    {
                        return(aux);
                    }
                }
                return(null);
            }
            else
            {
                return(null);
            }
        }
示例#3
0
 public Cabecera(string titulo)
 {
     this.titulo     = titulo;
     apuntadorMatriz = null;
     siguiente       = null;
     anterior        = null;
 }
示例#4
0
 public Cabecera(string titulo, int intFila)
 {
     this.titulo       = titulo;
     this.filaCabecera = intFila;
     apuntadorMatriz   = null;
     siguiente         = null;
     anterior          = null;
 }
示例#5
0
 public NodoMatriz(string unidad, int movimiento, int alcance, int dano, int vida)
 {
     this.unidad     = unidad;
     this.movimiento = movimiento;
     this.alcance    = alcance;
     this.dano       = dano;
     this.vida       = vida;
     arriba          = null;
     abajo           = null;
     derecha         = null;
     izquierda       = null;
     top             = null;
     bot             = null;
     cabeceraFila    = cabeceraCol = null;
 }
示例#6
0
 public bool existeAlgo(NodoMatriz cabezaColumna, string fila)
 {
     if (cabezaColumna != null)
     {
         NodoMatriz aux = cabezaColumna;
         while (aux != null)
         {
             if (aux.cabeceraFila.titulo == fila) //verificando que la posicion en fila y columna no haya nada
             {
                 return(true);
             }
             aux = aux.abajo;
         }
     }
     return(false);
 }
示例#7
0
 public void insertarEntreNodosMatrizColumna(NodoMatriz primero, NodoMatriz segundo, NodoMatriz nuevo)
 {
     if (segundo != null)
     {
         primero.abajo  = nuevo;
         nuevo.abajo    = segundo;
         nuevo.arriba   = primero;
         segundo.arriba = nuevo;
     }
     else
     {
         primero.abajo = nuevo;
         nuevo.abajo   = segundo;
         nuevo.arriba  = primero;
     }
 }
示例#8
0
 public void insertandoEntreNodosMatrizFila(Cabecera filaActual, Cabecera columnaActual, NodoMatriz nuevo1, int fila, string columna)
 {
     if (isEmptyFilaNodoMatriz(filaActual))     //1: SI esta vacia la filaActual
     {
         filaActual.apuntadorMatriz = nuevo1;
         nuevo1.cabeceraFila        = filaActual;
         //unir a COLUMNA
         //1.1: SI esta vacia la  columna actual
         //1.2: NO esta vacia
         //va en cabeza y la cabeza actual esta ocupada
         //no va en Cabeza va entre nodos; ya sea un nodo y un null
         UnirAColumna(columnaActual, nuevo1, fila);
     }
     else
     {                                           //2: NO esta vacia la fila actual
         NodoMatriz nodoAnteriorFila = buscarPosicionNodo(filaActual.apuntadorMatriz, columna);
         //2.1: va en cabeza de la fila y la cabeza actual esta ocupada
         NodoMatriz auxFila;
         if (nodoAnteriorFila == null)
         {
             auxFila = filaActual.apuntadorMatriz;
             filaActual.apuntadorMatriz = nuevo1;
             nuevo1.cabeceraFila        = filaActual;
             nuevo1.derecha             = auxFila;
             auxFila.izquierda          = nuevo1;
             UnirAColumna(columnaActual, nuevo1, fila);
         }
         else
         {//2.2: No va en cabeza, Va entre Nodos
             auxFila = nodoAnteriorFila.derecha;
             if (auxFila != null)
             {
                 nodoAnteriorFila.derecha = nuevo1;
                 nuevo1.izquierda         = nodoAnteriorFila;
                 nuevo1.derecha           = auxFila;
                 auxFila.izquierda        = nuevo1;
             }
             else
             {
                 nodoAnteriorFila.derecha = nuevo1;
                 nuevo1.izquierda         = nodoAnteriorFila;
                 nuevo1.derecha           = auxFila;
             }
             UnirAColumna(columnaActual, nuevo1, fila);
         }
     }
 }
示例#9
0
 public void UnirAColumna(Cabecera columnaActual, NodoMatriz nuevo1, int fila)
 {
     if (isEmptyColNodoMatriz(columnaActual))            //1.1: SI esta vacia la  columna actual
     {
         columnaActual.apuntadorMatriz = nuevo1;
         nuevo1.cabeceraCol            = columnaActual;
     }
     else
     {                                                   //1.2: NO esta vacia
         NodoMatriz nodoAnteriorColumna = buscarPosicionNodoColumna(columnaActual.apuntadorMatriz, fila);
         if (nodoAnteriorColumna == null)                //va en cabeza y la cabeza actual esta ocupada
         {
             insertarEntreNodosMatrizColumna(columnaActual.apuntadorMatriz, columnaActual.apuntadorMatriz, nuevo1);
         }
         else
         {                                                       //no va en Cabeza va entre nodos; ya sea un nodo y un null
             insertarEntreNodosMatrizColumna(nodoAnteriorColumna, nodoAnteriorColumna.abajo, nuevo1);
         }
     }
 }
示例#10
0
        public void insertarNodoEnFila(NodoMatriz cabezafila, string unidad, int movimiento, int alcance, int dano, int vida, string columna, int fila)
        {
            NodoMatriz nuevo = new NodoMatriz(unidad, movimiento, alcance, dano, vida);

            if (cabezafila == null)
            {
                cabezafila = nuevo;
            }
            else
            {
                NodoMatriz aux = cabezafila;
                if (!existeAlgo(columnas.buscar(columna).apuntadorMatriz, fila.ToString()))  //cabezaNodoMatriz columna, fila
                {
                    while (aux.derecha != null)
                    {
                        aux = aux.derecha;
                    }
                    aux.derecha     = nuevo;
                    nuevo.izquierda = aux;
                }
            }
        }
示例#11
0
 public NodoMatriz buscarPosicionNodoColumna(NodoMatriz cabeza, int fila)
 {
     if (cabeza != null)
     {
         NodoMatriz aux = cabeza;
         while (aux != null)
         {
             if ((aux.cabeceraFila.filaCabecera < fila) && aux.abajo != null && (aux.abajo.cabeceraFila.filaCabecera < fila))
             {
                 aux = aux.abajo;
             }
             else
             {
                 return(aux);
             }
         }
         return(null);
     }
     else
     {
         return(null);
     }
 }
示例#12
0
        public bool insertarEnMatriz(string unidad, int movimiento, int alcance, int dano, int vida, string columna, int fila)
        {
            //verificando que este vacia la matriz
            if (filas.isEmpty())
            {
                filas.insertar(fila.ToString(), fila);
                columnas.insertar(columna, getValorColumna(columna));

                //insertando directo a tu corazon xD
                NodoMatriz nuevo = new NodoMatriz(unidad, movimiento, alcance, dano, vida);
                filas.cabeza.apuntadorMatriz    = nuevo;    //insertando en fila
                nuevo.cabeceraFila              = filas.cabeza;
                columnas.cabeza.apuntadorMatriz = nuevo;    //insertando en columna
                nuevo.cabeceraCol = columnas.cabeza;
            }
            else
            {
                if (!existePosicion(fila.ToString(), columna))  //si no existe la posicion
                {
                    if (!filas.Existe(fila.ToString()))         //si no existe la fila
                    {
                        //insertar Filas

                        Cabecera anterior = buscarPosicionFila(fila); //devueleve el anterior del futuro nuevo nodo

                        if (anterior == null)                         //debe ir en cabeza
                        {
                            filas.insertarInicio(fila.ToString(), fila);
                        }
                        else
                        {                                               //si no va entre nodos
                            filas.insertarEntre(anterior, anterior.siguiente, new Cabecera(fila.ToString(), fila));
                        }



                        // si no Existe la Columna
                        Cabecera anterior2 = buscarPosicionColumna(columna);
                        if (!columnas.Existe(columna))
                        {
                            if (anterior2 == null)
                            {
                                columnas.insertarInicio(columna, getValorColumna(columna));
                            }
                            else
                            {
                                columnas.insertarEntre(anterior2, anterior2.siguiente, new Cabecera(columna, getValorColumna(columna)));
                            }
                        }
                    }
                    //si EXISTE INSERTANDO NODO!
                    NodoMatriz nuevo1        = new NodoMatriz(unidad, movimiento, alcance, dano, vida);
                    Cabecera   filaActual    = filas.buscar(fila.ToString());
                    Cabecera   columnaActual = columnas.buscar(columna);

                    //LLAmar a mentodo entrefilasnodoMatriz    ESto si funciona
                    insertandoEntreNodosMatrizFila(filaActual, columnaActual, nuevo1, fila, columna);
                    return(true);
                }
                return(false);
            }
            return(false);
        }
示例#13
0
 public void insertarNodo(NodoMatriz nuevo, Cabecera fila, Cabecera columna)
 {
 }