public void combinar(Cuadro c)
        {
            Random r   = new Random();
            int    aux = r.Next(3);

            if (aux == 0)
            {
                if (this.enlaceConjunto.getArriba() == null)
                {
                    this.enlaceConjunto.setArriba(c);
                    c.getEnlaceConjunto().setAbajo(this);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getArriba().combinar(c);
                }
            }
            else if (aux == 1)
            {
                if (this.enlaceConjunto.getDerecha() == null)
                {
                    this.enlaceConjunto.setDerecha(c);
                    c.getEnlaceConjunto().setIzquierda(this);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getDerecha().combinar(c);
                }
            }
            else if (aux == 2)
            {
                if (this.enlaceConjunto.getAbajo() == null)
                {
                    this.enlaceConjunto.setAbajo(c);
                    c.getEnlaceConjunto().setArriba(this);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getAbajo().combinar(c);
                }
            }
            else
            {
                if (this.enlaceConjunto.getIzquierda() == null)
                {
                    this.enlaceConjunto.setIzquierda(c);
                    c.getEnlaceConjunto().setDerecha(this);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getIzquierda().combinar(c);
                }
            }
        }
        public void enlacesConjunto(int i)
        {
            List <Cuadro> visitados   = new List <Cuadro>();
            Posicion      posicionAux = new Posicion();
            Cuadro        cuadroAux   = new Cuadro();
            Cuadro        cuadro      = new Cuadro();

            cuadro = this.principal.buscarCuadro(i, visitados, cuadroAux);
            visitados.Clear(); cuadroAux = null;
            posicionAux.setX(cuadro.getPosicion().getX());
            posicionAux.setY(cuadro.getPosicion().getY());
            if (cuadro.getEnlaceConjunto().getArriba() == null)
            {
                posicionAux.setY(posicionAux.getY() + 1);
                if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear(); cuadroAux = null;
                    cuadro.getEnlaceConjunto().setArriba(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear(); cuadroAux = null;
                    this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setAbajo(cuadro);
                }
                visitados.Clear(); cuadroAux = null;
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY());
            }
            if (cuadro.getEnlaceConjunto().getDerecha() == null)
            {
                posicionAux.setX(posicionAux.getX() + 1);
                if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear(); cuadroAux = null;
                    cuadro.getEnlaceConjunto().setDerecha(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear(); cuadroAux = null;
                    this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setIzquierda(cuadro);
                }
                visitados.Clear(); cuadroAux = null;
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY());
            }
            if (cuadro.getEnlaceConjunto().getAbajo() == null)
            {
                posicionAux.setY(posicionAux.getY() - 1);
                if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear(); cuadroAux = null;
                    cuadro.getEnlaceConjunto().setAbajo(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear(); cuadroAux = null;
                    this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setArriba(cuadro);
                }
                visitados.Clear(); cuadroAux = null;
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY());
            }
            if (cuadro.getEnlaceConjunto().getAbajo() == null)
            {
                posicionAux.setX(posicionAux.getX() - 1);
                if (this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux) != null)
                {
                    visitados.Clear(); cuadroAux = null;
                    cuadro.getEnlaceConjunto().setIzquierda(this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux));
                    visitados.Clear(); cuadroAux = null;
                    this.principal.buscarCoordenadas(posicionAux, visitados, cuadroAux).getEnlaceConjunto().setDerecha(cuadro);
                }
                visitados.Clear(); cuadroAux = null;
                posicionAux.setX(cuadro.getPosicion().getX());
                posicionAux.setY(cuadro.getPosicion().getY());
            }
        }
        public void combinar(Cuadro c, int x, int y)
        {
            Random        r           = new Random();
            Posicion      posicionAux = new Posicion();
            List <Cuadro> visitados   = new List <Cuadro>();
            Cuadro        cuadro      = new Cuadro();
            int           aux         = r.Next(3);

            if (aux == 0)
            {
                y += 1;
                posicionAux.setX(x);
                posicionAux.setY(y);
                if (this.enlaceConjunto.getArriba() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null)
                {
                    this.enlaceConjunto.setArriba(c);
                    c.getEnlaceConjunto().setAbajo(this);
                    c.getPosicion().setX(x);
                    c.getPosicion().setY(y);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getArriba().combinar(c, x, y);
                }
            }
            else if (aux == 1)
            {
                x += 1;
                posicionAux.setX(x);
                posicionAux.setY(y);
                if (this.enlaceConjunto.getDerecha() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null)
                {
                    this.enlaceConjunto.setDerecha(c);
                    c.getEnlaceConjunto().setIzquierda(this);
                    c.getPosicion().setX(x);
                    c.getPosicion().setY(y);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getDerecha().combinar(c, x, y);
                }
            }
            else if (aux == 2)
            {
                y -= 1;
                posicionAux.setX(x);
                posicionAux.setY(y);
                if (this.enlaceConjunto.getAbajo() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null)
                {
                    this.enlaceConjunto.setAbajo(c);
                    c.getEnlaceConjunto().setArriba(this);
                    c.getPosicion().setX(x);
                    c.getPosicion().setY(y);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getAbajo().combinar(c, x, y);
                }
            }
            else
            {
                x -= 1;
                posicionAux.setX(x);
                posicionAux.setY(y);
                if (this.enlaceConjunto.getIzquierda() == null && this.buscarCoordenadas(posicionAux, visitados, cuadro) == null)
                {
                    this.enlaceConjunto.setIzquierda(c);
                    c.getEnlaceConjunto().setDerecha(this);
                    c.getPosicion().setX(x);
                    c.getPosicion().setY(y);
                    return;
                }
                else
                {
                    this.enlaceConjunto.getIzquierda().combinar(c, x, y);
                }
            }
        }
Beispiel #4
0
        public void vincularVecinos(ConjuntoCuadrado conjunto1, ConjuntoCuadrado conjunto2, int i)
        {
            List <Cuadro>   visitados   = new List <Cuadro>();
            List <Posicion> posiciones1 = new List <Posicion>();
            List <Posicion> posiciones2 = new List <Posicion>();
            Cuadro          cuadroAux   = new Cuadro();
            Cuadro          cuadro1     = new Cuadro();
            Cuadro          cuadro2     = new Cuadro();
            bool            puedeUnir   = true;

            cuadro1     = conjunto1.getPrincipal().buscarCuadro(i, visitados, cuadroAux); visitados.Clear();
            cuadro2     = conjunto2.getPrincipal().buscarCuadro(i, visitados, cuadroAux); visitados.Clear();
            posiciones1 = conjunto1.listaPosiciones();
            posiciones2 = conjunto2.listaPosiciones();
            if (cuadro1.getEnlaceConjunto().getArriba() == null && cuadro2.getEnlaceConjunto().getAbajo() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() + 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() - 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getAbajo() == null && cuadro2.getEnlaceConjunto().getArriba() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() - 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setY(lugar.getY() + 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getDerecha() == null && cuadro2.getEnlaceConjunto().getIzquierda() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() + 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() - 1);
                }
            }
            else if (cuadro1.getEnlaceConjunto().getIzquierda() == null && cuadro2.getEnlaceConjunto().getDerecha() == null)
            {
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() - 1);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    if (posiciones1.Contains(lugar))
                    {
                        puedeUnir = false;
                    }
                }
                if (puedeUnir)
                {
                    this.unir(conjunto1, conjunto2);
                }
                foreach (Posicion lugar in posiciones2)
                {
                    lugar.setX(lugar.getX() + 1);
                }
            }
        }