Mastermind.
Enviado por rotulo10 • 15 de Abril de 2016 • Informe • 9.820 Palabras (40 Páginas) • 197 Visitas
República Bolivariana de Venezuela
Ministerio del Poder Popular para la Educación Universitaria
Universidad Católica Andrés Bello Extensión Guayana
Ingeniería Informática
Catedra: Algoritmo y Programación II
[pic 1]
[pic 2][pic 3]
Introducción
Mastermind, es un juego de dos participantes que consiste en romper un código secreto compuesto por fichas de colores, Se juega en un tablero con fichas de colores y fichas pequeñas blancas y negras. Uno de los participantes escoge cierta cantidad de fichas de colores, generalmente cuatro, y coloca un código oculto al otro jugador. Este ultimo, toma fichas de colores y propone un código que es contestado con fichas negras para las fichas de color bien colocadas o fichas blancas para las fichas de color con los colores correctos pero mal colocadas.
Si hay fichas de colores duplicados en la propuesta no se le debe asignar fichas pequeñas a todas ellas, a menos que en el código oculto existan el mismo número de fichas duplicadas. El juego termina al descubrirse la combinación, se consigue una combinación con cuatro fichas negras o se agota el tablero que depende del tamaño del tablero.
Análisis del problema
Se debe desarrollar un programa en C, para ser utilizado desde el intérprete de comando de Linux que implemente este juego, Donde al iniciar el juego se debe indicar el tamaño del código (4, 5 o 6), el número de colores a utilizar (4, 6 o 8) y la cantidad máxima de intentos (8,10 o 12). El computador debe generar de forma aleatoria un código que el usuario debe averiguar.
Una vez generado el código, se procederá a pasar por varias validaciones para cada jugada, esto se mantiene en un ciclo repetitivo hasta que el jugador descubra el código secreto o complete la cantidad de intentos pre-configurado al inicio del juego, los valores que se inserten en esta configuración son de total importancia ya que en la implementación se utilizan para crear arreglos unidimensionales y bidimensionales utilizados para el correcto funcionamiento del juego, entre los cuales se encuentran las validaciones de jugadas, pistas y el uso de funciones que generan eficiencia en el código.
Durante la implementación se pueden observar varios problemas debido a validación, en este programa en vez de jugar con colores se utilizan numeros del 1~9 (enteros) para generar el código, y en el caso de las fichas negras se utilizan:
x: número en código y posición correcta.
y: número en código pero en posición incorrecta.
0: no existe en el código.
Existes dos tipos de validaciones principales en este programa
-Validación de jugada
-Validación de pistas (fichas negras y blancas)
En la Validación de jugada se debe validar que el usuario introduzca la cantidad configurada de dígitos del código secreto para su jugada, y que los dígitos que se usen deben estar en las fichas de colores ofrecidas para jugar (en este caso numeros del 1~9).
En la Validación de pistas se validan que las fichas negras y blancas (x e y) estén en posición correcta y no se muestren duplicadas a menos que sea necesario, y también ciertos criterios que no se puede ver a simple vista pero con un poco de abstracción se podrían ver de tal manera que al implementarlo en c se tendrá el funcionamiento adecuado para esta parte fundamental del juego
Diseño de la solución
Teniendo en cuenta que todo juego necesita una presentación, se hace una simple dando la bienvenida al juego hasta presionar enter, luego esto nos llevas al menú principal del juego donde podremos elegir visualizar las reglas, jugar o salir de inmediato terminando la ejecución del programa.
Si elegimos la opción jugar lo primero que se hace antes de iniciar el juego, es pedir la configuración del juego (datos ingresados por el jugador) ya mencionado antes, ya que estos son los datos que se usaran en la función “generar” que genera el código secreto y la fichas a utilizarse además de validar estas misma, luego pasa estos valores a la función “juego” que sería la función principal para que el juego funcione ya que en esta se hacen las validaciones principales.
Durante la generación de código se utiliza una función llamada “aleatorio” la cual retorna un número entero aleatorio, de allí el nombre, y esta para que funciones depende de las funciones rand y srand.
sand(): Esta función, cada vez que la llamamos, nos devuelve un número entero aleatorio, pero presenta el problema que Si ejecutamos varias veces nuestro programa, la secuencia de números aleatorios se repite. Esto lo podemos solucionar con la siguiente función.
srand(): A esta función se le pasa de parámetro un número que se utilizará como número inicial para las cuentas y sólo debemos llamarla una vez en nuestro programa
¿Qué número le ponemos a este srand? No podemos ponerle un número fijo, porque entonces no hemos hecho nada. No podemos ponerle un número obtenido con rand(), porque la primera vez siempre nos dará el mismo y el resultado será igual que si le ponemos un número fijo. Debemos buscar la forma de obtener un número que sea distinto en la ejecución de cada programa, para esto utilizamos La fecha/hora del sistema. Este valor cambia si ejecutamos el programa en distinto instante de tiempo, tendríamos que arrancar el programa dos veces en el mismo segundo para obtener la misma secuencia de números aleatorios. En C de linux esta fecha/hora se obtiene con la función time() y debemos incluir en nuestro código la librería time.h que es donde se guarda esta función. Con esto podemos construir nuestra función aleatorio:
[pic 4]
Antes de usar esta función se debe llamar primero a srand () al menos una sola vez
[pic 5]
Explicado esto de la generación de números aleatorios, se procede a llenar un arreglo unidimensional con tales números el cual será nuestro código secreto, en conjunto con otro vector donde se almacenan los números que podrá utilizar el jugador para averiguar este código, aplicando una estructura repetitiva for con dos variables auxiliares “i” que recorre los vectores y “j” recorre la parte las fichas que posiblemente no esté en el código ya que el vector de las fichas puede tener un tamaño mayor al vector del código, se explicara esto con dos imágenes
...