/// <summary> /// Método para pedir posición al jugador /// </summary> /// <param name="tablero">Tablero en su situación actutal</param> public void Movimiento(Tablero tablero) { int piezasComidas; valoresElegidos = new Posicion(); ComprobarValidas(tablero); valoresElegidos = ElegirPosicion(tablero); bool pasa = false; if (valoresElegidos.Col == 0) { if (valoresElegidos.Row == 0) { pasa = true; } } if (!pasa) { Reglas.CambioDeColor(tablero, color, valoresElegidos.Row, valoresElegidos.Col, out piezasComidas); ActualizarTablero(tablero, valoresElegidos.Row, valoresElegidos.Col); } // valoresElegidos.Col, out piezasComidas); //ActualizarTablero(tablero, valoresElegidos.Row, valoresElegidos.Col); }
/// <summary> /// Elegimos posición con la restricción de que sea un entero /// </summary> /// <returns>Posición elegida, solo comprobado que es un valor /// numérico</returns> public Posicion ElegirPosicion(Tablero tablero) { Posicion posicion = new Posicion(); String rowString, colString; Boolean esEntero; int row = 0, col = 0; do { Console.WriteLine("Fila"); rowString = Console.ReadLine(); esEntero = Reglas.ComprobarEntero(rowString, out row); if (!esEntero) { continue; } Console.WriteLine("columna"); colString = Console.ReadLine(); esEntero = Reglas.ComprobarEntero(colString, out col); } while (!esEntero); posicion.Row = row; posicion.Col = col; return(posicion); }
/// <summary> /// Buscamos, con una profundidad definida (por defecto 3) qué mo- /// vimiento es más provechoso para el jugador. Una especie de /// Minimax bastante sui-generis /// </summary> /// <param name="tablero">Tablero del que queremos obtener distintas /// opciones de juego</param> /// <param name="profundidad">rango de movimientos máximos que podemos /// simular en cascada</param> /// <returns></returns> public Posicion ElegirPosicion_bis(Tablero tablero, int profundidad) { Console.Read(); int piezasComidas; int row, col; Posicion posicionElegida = new Posicion(); Tablero tableroCopia = new Tablero(); tableroCopia.Copiar(tablero); if (profundidad > 0) { foreach (Posicion posicion in posicionesValidas) { profundidad--; Reglas.CambioDeColor(tableroCopia, color, posicion.Row, posicion.Col, out piezasComidas); row = posicion.Row; col = posicion.Col; ImprimirMatriz(); fichasComidas[row, col] += piezasComidas; ElegirPosicion_bis(tableroCopia, profundidad); } } posicionElegida = ComprobarMejorPosicion(); return(posicionElegida); }
/// <summary> /// Método para controlar el movimiento del jugador /// </summary> /// <param name="tablero">Tablero en su situación actutal</param> public void Movimiento(Tablero tablero) { int piezasComidas; valoresElegidos = new Posicion(); bool pasa = false; ComprobarValidas(tablero); valoresElegidos = ElegirPosicion(tablero); if (valoresElegidos.Col == 0) { if (valoresElegidos.Row == 0) { pasa = true; } } /* Cambiamos de color las fichas 'comidas' y colocamos la pieza * en la posición elegida */ if (!pasa) { Reglas.CambioDeColor(tablero, color, valoresElegidos.Row, valoresElegidos.Col, out piezasComidas); ActualizarTablero(tablero, valoresElegidos.Row, valoresElegidos.Col); } //Reglas.CambioDeColor(tablero, color, valoresElegidos.Row, // valoresElegidos.Col, out piezasComidas); //ActualizarTablero(tablero, valoresElegidos.Row, valoresElegidos.Col); }
/// <summary> /// Método para pedir posición al jugador /// </summary> /// <param name="tablero">Tablero en su situación actutal</param> public void Movimiento(Tablero tablero) { int piezasComidas; valoresElegidos = new Posicion(); ComprobarValidas(tablero); valoresElegidos = ElegirPosicion(tablero); Reglas.CambioDeColor(tablero, color, valoresElegidos.Row, valoresElegidos.Col, out piezasComidas); ActualizarTablero(tablero, valoresElegidos.Row, valoresElegidos.Col); }
/// <summary> /// Hacemos dos comprobaciones, que la posición está dentro del tablero /// y que cumple con las reglas del juego. /// </summary> /// <param name="tablero">Tablero en la situación actual de juego /// </param> /// <param name="posicion">Posición elegida por el jugador cuya /// legalidad queremos comprobar</param> /// <param name="color">Color del jugador</param> /// <returns>True si la jugada es correcta, false en caso contrario /// </returns> private Boolean ComprobarJugada(Tablero tablero, Posicion posicion, Color color) { Boolean movimientoValido; movimientoValido = Reglas.PosicionDentroTablero(posicion.Row, posicion.Col); if (!movimientoValido) { return(false); } movimientoValido = Reglas.PosicionLegal(tablero, posicion.Row, posicion.Col, color); if (!movimientoValido) { return(false); } return(true); }
/// <summary> /// Elegimos el nivel del rival en caso de que sea el ordenador /// </summary> /// <returns>Nivel elegido</returns> private static int ElegirNivelCPU() { int numero = 0; String nivel; do { Console.WriteLine("Elegir nivel CPU (1-3): "); nivel = Console.ReadLine(); Reglas.ComprobarEntero(nivel, out numero); if (numero == 3) { Console.WriteLine("Aún no implementado!!!!"); } } while (numero < 1 || numero > 2); return(numero); }
/// <summary> /// Método para comprobar en qué casillas podemos colocar piezas. /// </summary> /// <param name="tablero">Tablero en su situación actual</param> public void ComprobarValidas(Tablero tablero) { posicionesValidas = new Queue(); Posicion posicion; for (int row = 1; row < 9; row++) { for (int col = 1; col < 9; col++) { if (Reglas.PosicionLegal(tablero, row, col, color)) { posicion = new Posicion(); posicion.Row = row; posicion.Col = col; posicionesValidas.Enqueue(posicion); } } } }
/// <summary> /// Método para pedir posición al jugador /// </summary> /// <param name="tablero">Tablero en su sitúación actual</param> public void Movimiento(Tablero tablero) { Posicion posicion = null; Boolean movimientoValido = false, pasa = false; int piezasComidas = 0; /* Pedimos posición de juego al jugador hasta que la que * introduzca cumpla con las reglas del juego */ do { posicion = ElegirPosicion(tablero); if (posicion.Col == 0) { if (posicion.Row == 0) { pasa = true; break; } } movimientoValido = ComprobarJugada(tablero, posicion, color); if (!movimientoValido) { Console.WriteLine("Jugada " + "INCORRECTA. Vuelve a introducir posición."); } } while (!movimientoValido); /* Cambiamos de color las fichas 'comidas' y colocamos la pieza * en la posición elegida en caso de no pasar turno */ if (!pasa) { Reglas.CambioDeColor(tablero, color, posicion.Row, posicion.Col, out piezasComidas); ActualizarTablero(tablero, posicion.Row, posicion.Col); } }
/// <summary> /// Buscamos posición que genere una mayor ganancia de piezas del /// rival /// </summary> /// <param name="tablero">Tablero del que queremos obtener /// distintas opciones de juego</param> /// <param name="profundidad">rango de movimientos máximos que /// podemos simular en cascada</param> /// <returns></returns> public Posicion ElegirPosicion_bis(Tablero tablero) { int piezasComidas; int row, col; Posicion posicionElegida = new Posicion(); Tablero tableroCopia = new Tablero(); tableroCopia.Copiar(tablero); foreach (Posicion posicion in posicionesValidas) { Reglas.CambioDeColor(tableroCopia, color, posicion.Row, posicion.Col, out piezasComidas); row = posicion.Row; col = posicion.Col; fichasComidas[row, col] += piezasComidas; } ImprimirMatriz(); posicionElegida = ComprobarMejorPosicion(); return(posicionElegida); }