Exemple #1
0
    /**
     * Esta función comprueba si hay celdas afectadas.
     * En ese caso, las pasa a una variable global pública.
     * @param celda de la jugada que vamos a comprobar.
     * @return boolean dependiendo de si hay celdas afectadas o no.
     */
    public bool comprobarSiHayCeldasAfectadas(Celda celda)
    {
        //Posibles celdas en donde buscará continuar
        //Son las colindantes con ficha del oponente
        List<Celda> viasTemporales = new List<Celda>();
        //Celdas que igual cambiamos o igual no.
        List<Celda> tmpCeldasFinales;
        //Rotaciones que debemos hacer para recorrer una fila, columna o diagonal
        int x_rotar, y_rotar, x_base_rotar, y_base_rotar;
        //Inicializamos outputceldas para que se vacie.
        outputCeldas = new List<Celda>();

        int[,] posiciones = new int[8, 2];
        posiciones[0, 0] = -1; posiciones[0, 1] = -1;
        posiciones[1, 0] = -1; posiciones[1, 1] = 0;
        posiciones[2, 0] = -1; posiciones[2, 1] = 1;
        posiciones[3, 0] = 0; posiciones[3, 1] = -1;
        posiciones[4, 0] = 0; posiciones[4, 1] = 1;
        posiciones[5, 0] = 1; posiciones[5, 1] = -1;
        posiciones[6, 0] = 1; posiciones[6, 1] = 0;
        posiciones[7, 0] = 1; posiciones[7, 1] = 1;

        //Visitamos todas las posibles posiciones en las que puede seguir la fila
        for(int a=0;a<8;a++)
            if (celda.getY() + posiciones[a, 0] >= 0 && celda.getY() + posiciones[a, 0] < tamaño
                && celda.getX() + posiciones[a, 1] >= 0 && celda.getX() + posiciones[a, 1] < tamaño
                && getCelda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1]).getFicha() == Jugador.fichaOponente(celda.getFicha()))
                viasTemporales.Add(new Celda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1],
                    getCelda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1]).getFicha()));

        //Hasta este momento hemos obtenido las direcciones de las celdas a las que podemos ir en busca de una ruta a voltear.
        foreach (Celda viatemporal in viasTemporales)
        {
            tmpCeldasFinales = new List<Celda>();
            //Obtenemos una base con la que iremos permutando
            x_base_rotar = viatemporal.getX() - celda.getX();
            y_base_rotar = viatemporal.getY() - celda.getY();
            x_rotar = x_base_rotar;
            y_rotar = y_base_rotar;

            //Por si no entramos en el while, hay que aumentarlas igualmente
            /*if (!(celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño && celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño &&
                getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == Jugador.fichaOponente(celda.getFicha())))
            {
                y_rotar += y_base_rotar;
                x_rotar += x_base_rotar;
            }*/

            //En este while vamos buscando rutas
            while (celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño && celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño &&
                getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == Jugador.fichaOponente(celda.getFicha()))
            {
                //Vamos añadiendo celdas y vamos rotando para hacernos con esa línea
                tmpCeldasFinales.Add(new Celda(celda.getY() + y_rotar, celda.getX() + x_rotar, celda.getFicha()));
                y_rotar += y_base_rotar;
                x_rotar += x_base_rotar;
            }

            //Una vez llegado al limite, comprobamos si la ficha que hemos encontrado es nuestra
            //En tal caso, volteamos todo
            if (celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño && celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño
                && (getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == celda.getFicha()))
            {
                //Añadimos la celda actual
                outputCeldas.Add(celda);
                //Y las celdas que hemos obtenido (su ruta)
                outputCeldas.AddRange(tmpCeldasFinales);
            }

        }  //foreach

        //Dependiendo de si tenemos algo en el output, devolvemos true o false.
        if (outputCeldas.Count != 0)
            return true;
        return false;
    }
Exemple #2
0
    /**
     * Esta función comprueba si hay celdas afectadas.
     * En ese caso, las pasa a una variable global pública.
     * @param celda de la jugada que vamos a comprobar.
     * @return boolean dependiendo de si hay celdas afectadas o no.
     */
    public bool comprobarSiHayCeldasAfectadas(Celda celda)
    {
        //Posibles celdas en donde buscará continuar
        //Son las colindantes con ficha del oponente
        List <Celda> viasTemporales = new List <Celda>();
        //Celdas que igual cambiamos o igual no.
        List <Celda> tmpCeldasFinales;
        //Rotaciones que debemos hacer para recorrer una fila, columna o diagonal
        int x_rotar, y_rotar, x_base_rotar, y_base_rotar;

        //Inicializamos outputceldas para que se vacie.
        outputCeldas = new List <Celda>();

        int[,] posiciones = new int[8, 2];
        posiciones[0, 0]  = -1; posiciones[0, 1] = -1;
        posiciones[1, 0]  = -1; posiciones[1, 1] = 0;
        posiciones[2, 0]  = -1; posiciones[2, 1] = 1;
        posiciones[3, 0]  = 0; posiciones[3, 1] = -1;
        posiciones[4, 0]  = 0; posiciones[4, 1] = 1;
        posiciones[5, 0]  = 1; posiciones[5, 1] = -1;
        posiciones[6, 0]  = 1; posiciones[6, 1] = 0;
        posiciones[7, 0]  = 1; posiciones[7, 1] = 1;

        //Visitamos todas las posibles posiciones en las que puede seguir la fila
        for (int a = 0; a < 8; a++)
        {
            if (celda.getY() + posiciones[a, 0] >= 0 && celda.getY() + posiciones[a, 0] < tamaño &&
                celda.getX() + posiciones[a, 1] >= 0 && celda.getX() + posiciones[a, 1] < tamaño &&
                getCelda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1]).getFicha() == Jugador.fichaOponente(celda.getFicha()))
            {
                viasTemporales.Add(new Celda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1],
                                             getCelda(celda.getY() + posiciones[a, 0], celda.getX() + posiciones[a, 1]).getFicha()));
            }
        }


        //Hasta este momento hemos obtenido las direcciones de las celdas a las que podemos ir en busca de una ruta a voltear.
        foreach (Celda viatemporal in viasTemporales)
        {
            tmpCeldasFinales = new List <Celda>();
            //Obtenemos una base con la que iremos permutando
            x_base_rotar = viatemporal.getX() - celda.getX();
            y_base_rotar = viatemporal.getY() - celda.getY();
            x_rotar      = x_base_rotar;
            y_rotar      = y_base_rotar;

            //Por si no entramos en el while, hay que aumentarlas igualmente

            /*if (!(celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño && celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño &&
             *  getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == Jugador.fichaOponente(celda.getFicha())))
             * {
             *  y_rotar += y_base_rotar;
             *  x_rotar += x_base_rotar;
             * }*/

            //En este while vamos buscando rutas
            while (celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño && celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño &&
                   getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == Jugador.fichaOponente(celda.getFicha()))
            {
                //Vamos añadiendo celdas y vamos rotando para hacernos con esa línea
                tmpCeldasFinales.Add(new Celda(celda.getY() + y_rotar, celda.getX() + x_rotar, celda.getFicha()));
                y_rotar += y_base_rotar;
                x_rotar += x_base_rotar;
            }

            //Una vez llegado al limite, comprobamos si la ficha que hemos encontrado es nuestra
            //En tal caso, volteamos todo
            if (celda.getX() + x_rotar >= 0 && celda.getX() + x_rotar < tamaño && celda.getY() + y_rotar >= 0 && celda.getY() + y_rotar < tamaño &&
                (getCelda(celda.getY() + y_rotar, celda.getX() + x_rotar).getFicha() == celda.getFicha()))
            {
                //Añadimos la celda actual
                outputCeldas.Add(celda);
                //Y las celdas que hemos obtenido (su ruta)
                outputCeldas.AddRange(tmpCeldasFinales);
            }
        }  //foreach

        //Dependiendo de si tenemos algo en el output, devolvemos true o false.
        if (outputCeldas.Count != 0)
        {
            return(true);
        }
        return(false);
    }