예제 #1
0
 public nivel(int val_, int sizex_, int sizey_)
 {
     horizontal = null;
     vertical   = null;
     val        = val_;
     sizex      = sizex_;
     sizey      = sizey_;
     sup        = null;
     inf        = null;
 }
예제 #2
0
        //insertar una unidad en el nivel
        public void insertar(unit nuevo, int x, int y)
        {
            //no realizar acciones si las coordenadas están afuera del tamaño del tablero
            if (x > this.sizex)
            {
                return;
            }
            if (y > this.sizey)
            {
                return;
            }
            if (horizontal == null)
            {
                horizontal = new coord();
            }
            if (vertical == null)
            {
                vertical = new coord();
            }
            //insertar en las coordenadas en x
            pos tempx = horizontal.buscar(x);

            if (tempx == null)
            {
                tempx = horizontal.insertar(x);              //insertar nueva coordenada en x
            }
            unit ret = tempx.buscar(x, "X");

            if (ret == null)
            {
                //obtener el primer valor en la columna de tempx
                ret = tempx.primero;
                if (ret == null)
                {
                    tempx.primero = nuevo;
                }
                else
                {
                    //insertar al inicio en la columna de tempx
                    if (ret.y > nuevo.y)
                    {
                        ret.arriba    = nuevo;
                        nuevo.abajo   = ret;
                        tempx.primero = nuevo;
                    }
                    else
                    {//insertar al medio
                        while (ret.abajo != null)
                        {
                            if (ret.abajo.y > nuevo.y)
                            {
                                nuevo.abajo      = ret.abajo;
                                nuevo.arriba     = ret;
                                ret.abajo.arriba = nuevo;
                                ret.abajo        = nuevo;
                                break;
                            }
                            else
                            {
                                ret = ret.abajo;
                            }
                            //insertar al final
                            if (ret.abajo == null)
                            {
                                ret.abajo    = nuevo;
                                nuevo.arriba = ret;
                            }
                        }
                    }
                }
            }

            //insertar en las coordenadas en y
            pos tempy = vertical.buscar(y);

            if (tempy == null)
            {
                tempy = vertical.insertar(y);               //insertar nueva coordenada en x
            }
            unit rety = tempy.buscar(y, "Y");

            if (rety == null)
            {
                //obtener el primer valor en la columna de tempx
                rety = tempy.primero;
                if (rety == null)
                {
                    tempy.primero = nuevo;
                }
                else
                {
                    //insertar al inicio en la columna de tempx
                    if (rety.x > nuevo.x)
                    {
                        rety.izq      = nuevo;
                        nuevo.der     = rety;
                        tempy.primero = nuevo;
                    }
                    else
                    {//insertar al medio
                        while (rety.der != null)
                        {
                            if (rety.der.x > nuevo.x)
                            {
                                nuevo.der    = rety.der;
                                nuevo.izq    = rety;
                                rety.der.izq = nuevo;
                                rety.der     = nuevo;
                                break;
                            }
                            else
                            {
                                rety = rety.der;
                            }
                            //insertar al final
                            if (rety.der == null)
                            {
                                rety.der  = nuevo;
                                nuevo.izq = rety;
                            }
                        }
                    }
                }
            }
        }