Example #1
0
        /// <summary>
        /// Comprobación mediante las reglas del juego de que la posición
        /// elegida por el jugador es legal
        /// </summary>
        /// <param name="row">Fila</param>
        /// <param name="col">Columna</param>
        /// <param name="color">Color del jugador del cuál estamos comprobando
        /// la jugada</param>
        /// <returns>Booleano indicando si se cumplen o no las reglas
        /// del juego</returns>
        public static Boolean PosicionLegal(Tablero tablero, int row, int col, Color color)
        {
            /* Lo primero, rechazamos el movimiento si la posición ya está
             * ocupada */
            if (tablero.GetBoard()[row, col] != (char)Color.VACIO)
            {
                return(false);
            }

            /* Ahora contamos número de fichas blancas y negras alrededor de
             * la posición que estamos comprobando para usarlo después */
            int countBlancas = 0, countNegras = 0;

            for (int i = row - 1; i < row + 2; i++)
            {
                for (int j = col - 1; j < col + 2; j++)
                {
                    if (i == row && j == col)
                    {
                        continue;
                    }
                    if (tablero.GetBoard()[i, j] == (char)Color.BLANCO)
                    {
                        countBlancas++;
                    }
                    else if (tablero.GetBoard()[i, j] == (char)Color.NEGRO)
                    {
                        countNegras++;
                    }
                }
            }

            /* Si tenemos alrededor de la ficha tanto fichas blancas como
             * negras, el movimiento siempre será válido */
            if (countBlancas > 0 && countNegras > 0)
            {
                return(true);
            }
            /* Si alrededor no hay fichas, posición incorrecta */
            if (countBlancas == 0 && countNegras == 0)
            {
                return(false);
            }

            /* Comprobación de la legalidad del movimiento para cada jugador
             * en función de su color */
            if (color.Equals(Color.BLANCO) && countNegras > 0)
            {
                return(true);
            }
            if (color.Equals(Color.NEGRO) && countBlancas > 0)
            {
                return(true);
            }

            return(false);
        }
Example #2
0
        /// <summary>
        /// Núcleo de la partida. Pedimos tipo de jugadores, vamos turnando
        /// entre ellos, etc.
        /// </summary>
        public void Partida()
        {
            Boolean terminada = false, pasan = false;
            int     nivel1, nivel2;

            char[,] boardAnterior = new char[10, 10];

            tablero = new Tablero();
            tablero.Inicio();

            MostrarMensajeInicial();
            Opciones.SeleccionJugadores(out pl1, out pl2,
                                        out nivel1, out nivel2);
            tablero.MostrarTablero();
            Participante jugador1 = FactoriaJugador.NewInstance(pl1, nivel1);
            Participante jugador2 = FactoriaJugador.NewInstance(pl2, nivel2);

            do
            {
                boardAnterior = (char[, ])tablero.GetBoard().Clone();
                Console.WriteLine("MOVIMIENTO JUGADOR 1 --------------\n");
                EjecutarJugada(jugador1);
                Console.WriteLine("MOVIMIENTO JUGADOR 2 --------------\n");
                EjecutarJugada(jugador2);
                ContarFichas();
                terminada = ComprobarFinDePartida();
                pasan     = ComprobarPasaDosTurnosSeguidos(boardAnterior);
            } while (!terminada && !pasan);

            DeterminarGanador();
            Console.WriteLine("Presione tecla para salir...");
            Console.Read();
        }
Example #3
0
        /// <summary>
        /// Comprobamos, en las direcciones en las que es posible el movi-
        /// miento, si podemos comernos piezas del jugador contrario por
        /// haber en dicha dirección alguna pieza nuestra
        /// </summary>
        /// <param name="tablero">Tablero en la situación actual de juego
        /// </param>
        /// <param name="color">Color del jugador</param>
        /// <param name="modH">Modificador de fila, marca la dirección
        /// horizontal en la cual buscar</param>
        /// <param name="modV">Modificar de columna, marca la dirección
        /// vertical en la cual buscar</param>
        /// <param name="row">Fila</param>
        /// <param name="col">Columna</param>
        public static void ComprobarDireccion(Tablero tablero, Color color,
                                              int modH, int modV, int row, int col, out int piezasComidas)
        {
            piezasComidas = 0;
            Boolean seguirBuscando = true;
            int     posH = row, posV = col;

            do
            {
                posH          += modH;
                posV          += modV;
                seguirBuscando = ComprobarCasilla(tablero, color, posH, posV);
                piezasComidas++;
            } while (seguirBuscando);
            piezasComidas--;

            /* Si hemos encontrado una pieza de nuestro mismo color en la
             * dirección que estamos comprobando, podemos cambiar las piezas
             * que haya de distinto color en esa dirección */
            if (tablero.GetBoard()[posH, posV] == (char)color)
            {
                /* Procedemos a deshacer el camino cambiando las piezas hasta
                 * que lleguemos a la posición de partida */
                while (posH != row || posV != col)
                {
                    posH -= modH;
                    posV -= modV;
                    tablero.SetBoard(posH, posV, color);
                }
            }
        }
Example #4
0
        /// <summary>
        /// Método para contar el número de fichas de cada color que hay sobre
        /// el tablero
        /// </summary>
        private void ContarFichas()
        {
            this.countBlancas = this.countNegras = 0;

            for (int row = 1; row < 9; row++)
            {
                for (int col = 1; col < 9; col++)
                {
                    if (tablero.GetBoard()[row, col] == (char)Color.BLANCO)
                    {
                        countBlancas++;
                    }
                    else if (tablero.GetBoard()[row, col] == (char)Color.NEGRO)
                    {
                        countNegras++;
                    }
                }
            }
        }
Example #5
0
 public void Copiar(Tablero tablero)
 {
     for (int row = 1; row < 9; row++)
     {
         for (int col = 1; col < 9; col++)
         {
             this.board[row, col] = tablero.GetBoard()[row, col];
         }
     }
 }
Example #6
0
 /// <summary>
 /// Comprobamos si una casilla cumple no estar vacía y ser de color
 /// distinto a la del jugador, es decir, si es susceptible de ser
 /// 'comida' por el jugador
 /// </summary>
 /// <param name="tablero">Tablero en su situación actual</param>
 /// <param name="color">Color del jugador</param>
 /// <param name="row">Fila</param>
 /// <param name="col">Columna</param>
 /// <returns>True en caso de ser casilla susceptible de ser comida,
 /// false en caso contrario</returns>
 private static Boolean ComprobarCasilla(Tablero tablero, Color color, int row, int col)
 {
     return(tablero.GetBoard()[row, col] != (char)color &&
            tablero.GetBoard()[row, col] != (char)Color.VACIO);
 }