Investigación+Corta+proyecto+2


 * __“Investigación Corta”__ **

**I. Análisis de Requerimientos**
 * Meta:**
 * Desplegar una serie de cartas, una por una, para que el usuario adivine la siguiente carta a mostrarse. La adivinación del usuario consiste en decidir si la carta siguiente es mayor o menor que la anterior. Cuando la adivinación sea correcta se marcara un punto por la carta adivinada.
 * Datos:**
 * El usuario solo ingresara el número de cartas que quiere adivinar, el rango se encuentra entre 1 y 12 cartas.


 * Condiciones o restricciones:**
 * El jugador solo puede adivinar cuantas cartas ingrese como primer opción.
 * Los puntos solo se cuentan si la carta adivinada esta correcta.
 * El número de cartas a adivinar solo puede ser entre 1 y 12 cartas.
 * El As es la carta más pequeña y se toma en cuanta solo una figura del mazo entero de cartas.


 * Procesos:**
 * Se ejecuta la pantalla de bienvenida en la cual se le pide al usuario el ingreso de cartas. Después, se despliegan las cartas en la pantalla principal, mostrando al azar números dentro de un mazo de cartas. Si el usuario adivina correctamente si la carta siguiente es mayor o menor se aumentara el contador de puntos en una unidad, de lo contrario no se acumularan puntos. Cuando se finalice de adivinar cartas, se le mostrara al usuario una pequeña pantalla en la que estará el total de puntos, y le dara la opción de volver a jugar o no.


 * Fórmulas utilizadas, valores constantes de la fórmula, funciones matemáticas, etc.**


 * Se empleo la función random.randint (1,13) para que la computadora eligiera un número entero al azar, representando cada uno a una carta dentro del mazo.
 * Se empleo la función doctest.testmod(verbose=True) para poder realizar las pruebas unitarias de las funciones.

** II.Diseño **
 * ¿Cómo se lleva a cabo la solución? Variables y objetos a utilizar:**
 * **Variables:**
 * **r=0** sirve para poder crear la pantalla al apachar el botón de finalizar.
 * **numero=0** variable para el número de la carta 1.
 * **numero2=0** variable para el número de la carta 2.
 * **numero3=0** variable para el número de la carta 3.
 * **numero4=0** variable para el número de la carta 4.
 * **numero5=0** variable para el número de la carta 5.
 * **numero6=0** variable para el número de la carta 6.
 * **numero7=0** variable para el número de la carta 7.
 * **numero8=0** variable para el número de la carta 8.
 * **numero9=0** variable para el número de la carta 9.
 * **numero10=0** variable para el número de la carta 10.
 * **numero11=0** variable para el número de la carta 11.
 * **numero12=0** variable para el número de la carta 12.
 * **numero13=0** variable para el número de la carta 13.
 * **contador=0** contador para determinar cuántas cartas ha adivinado el jugador.
 * **cantidadcartas = 0** variable donde se almacena el número de cartas que el jugador adivinará.
 * **Mayor=0** variable donde se almacena la información para el botón de mayor.
 * **Menor=0** variable donde se almacena la información para el botón de menor.
 * **entry=0** variable donde se almacena la información de la línea para ingresar texto.
 * **Error1=0** variable donde se almacena la información de la label de error si se ingresa un dato que no sea entero.
 * **Error2=0** variable donde se almacena la información de la label de error si se ingresa un entero que no sea un valor de 1-12


 * **Objetos:**
 * **g = Gui** crea la interfaz de usuario de Gui.
 * **canvas = g.ca(width=800, height=625)** es el cuadro de gráficos donde se ejecuta el programa.
 * **foto=PhotoImage(file='poker-cards.gif')** fotografía que se utiliza como fondo.
 * **r=Gui** función que crea la interfaz gráfica para la pantalla que se muestra al presionar el botón de Finalizar. Crea el cuadro de la ventana
 * **r.title('Finalizo')** botón de finalizar
 * **r=Gui** crea el cuadro y el r.title es el título del cuadro
 * **item = canvas.rectangle(-75, 90], [0, 0, fill="white", outline='black', width=5)** instrucción para crear un rectángulo, que se usa como carta.
 * **item2 = canvas.text([-50, 50], "A")** instrucción para crear un texto como gráfico.


 * Descripción del curso lógico de la solución del problema. (Narrativo):**
 * Se despliega la pantalla principal. El botón de instrucciones muestra un pequeño mensaje explicando las instrucciones al usuario. El botón de finalizar finaliza el juego, mostrando el número de cartas adivinadas y el puntaje obtenido.
 * Se le pide al usuario que ingrese el número de cartas que desea adivinar, puede ser entre uno y doce. Después de hacer clic en el botón de aceptar el programa inicia, mostrando la primera carta en la pantalla principal y desplegando los botones “mayor” y “menor” para poder empezar a jugar.
 * Después de haber adivinado todas las cartas, se muestra un mensaje al usuario que el juego ha terminado y da la instrucción de hacer clic en el botón “finalizar”. Al hacer esto se muestra dentro de la ventana principal una pequeña ventana en la cual se muestra el número de cartas adivinadas y el punteo respectivo. Se colocaron dos botones uno de “reiniciar” el cual reinicializa el juego y uno de “salir” para terminar el programa.


 * Módulos de Python utilizados:**
 * Se utilizó el modulo random para poder utilizar la función random.randint(1,13), la cual generaba números al azar entre 1 y 13.
 * Se utilizó el modulo doctest para poder probar las funciones de manera individual. Se uso la función: doctest.testmod(verbose=True)
 * Se utilizo el modulo GUI para poder generar una interfaz grafica de fácil entendimiento para el usuario. En las cuales se incluyen las funciones: **item = canvas.rectangle(-75, 90], [0, 0, fill="white", outline='black', width=5)** instrucción para crear un rectángulo, que se usa como carta.
 * Funciones Desarrolladas por el Programador:**


 * **instrucciones :** Esta función muestra una label con el motivo del juego cuando se apacha el botón de instrucciones. No contiene parámetros ni valores de retorno.
 * **Cartasadivinar:** Esta función toma el dato ingresado en la barra en blanco y lo analiza según distintas condiciones. Si se cumple las condiciones, el dato ingresado será la cantidad de cartas a adivinar. Si no las cumple, se muestran labels para informar al usuario sobre el error. Las labels se van eliminando y si el usuario vuelve a meter un dato incorrecto se muestran de nuevo y si es correcto, se prosigue con el juego. No contiene parámetros ni valores de retorno.
 * **carta13:** Esta función muestra la carta#13 en la pantalla y luego muestra una label indicando que se apache el botón de finalizar. A la vez, se sigue mostrando el cuadro del contador de cartas adivinadas. No contiene parámetros ni valores de retorno.
 * **carta13may:** Esta función elimina los botones de mayor y menor creados con anterioridad y aumenta el contador únicamente si la carta 13 es mayor a la 12. Luego, ejecuta la función de la carta 13 para mostrarla. No contiene parámetros ni valores de retorno.
 * **carta13men:** Esta función elimina los botones de mayor y menor creados con anterioridad y aumenta el contador únicamente si la carta 13 es menor a la 12. Luego, ejecuta la función de la carta 13 para mostrarla. No contiene parámetros ni valores de retorno.
 * **carta12may:** Esta función elimina los botones de mayor y menor creados con anterioridad y aumenta el contador únicamente si la carta 12 es mayor a la 11. Luego, ejecuta la función de carta para mostrar la carta 12. Como último, selecciona un número para la próxima carta. No contiene parámetros ni valores de retorno.
 * **carta12men:** Esta función elimina los botones de mayor y menor creados con anterioridad y aumenta el contador únicamente si la carta 12 es menor a la 11. Luego, ejecuta la función de carta para mostrar la carta 12. Como último, selecciona un número para la próxima carta. No contiene parámetros ni valores de retorno.
 * **ES IMPORTANTE HACER LA NOTA QUE LAS FUNCIONES CARTA12 HASTA CARTA1, EN MAYOR Y MENOR RESPECTIVAMENTE, REALIZAN LAS MISMAS FUNCIONES QUE LA CARTA12MEN Y CARTA12MAY.**
 * **carta(a, b, c, d, e, f, h, i, j, k):** Esta función sirve para mostrar una carta en la pantalla, muestra un cuadro con la cantidad de cartas adivinadas y luego, dependiendo del número de cartas a mostrar, muestra una label indicando que se apache el botón de finalizar o bien crea dos botones uno de mayor y uno de menor para poder decidir cómo es la siguiente carta en relación con la mostrada. Sus parámetros son a, b, c, d, e, f, h, i, j y k. Los primeros cuatro representan las coordenadas donde se imprime el rectángulo. El quinto representa el número de la carta a mostrar, los próximos dos muestran las coordenadas donde se imprime la letra o número de la carta. El octavo, sirve para determinar si se siguen creando botones o bien se muestra el label de presionar finalizar, esto se determina mediante el número de cartas que se iban a adivinar. Los últimos dos, sirven para determinar el comando de cada botón creado en relación a la próxima carta. Esta función no tiene valores de retorno.
 * **carta1:** Esta función elige un número al azar y a partir de este se crea la primera carta. La carta se muestra en la pantalla de juego y así se puede pensar si la próxima será mayor o menor y despliega dos botones para esto. A la vez, esta determina el número de la siguiente carta. No contiene parámetros ni valores de retorno.
 * **reiniciar:** Esta función destruye la pantalla que se muestra cuando se presiona finalizar y la del juego. Luego, vuelve a mostrar la pantalla del juego y así se puede volver a jugar. No contiene parámetros ni valores de retorno.
 * **salirr:** Esta función destruye la pantalla que se muestra cuando se presiona finalizar. No contiene parámetros ni valores de retorno.
 * **salirg:** Esta función destruye la pantalla principal del juego. No contiene parámetros ni valores de retorno.
 * **salir:** Esta función salir del juego. No contiene parámetros ni valores de retorno.
 * **finalizar:** Esta función se utiliza para finalizar el juego y da la opción de salir o de reiniciar. No contiene parámetros y muestra un cuadro con la cantidad de cartas adivinadas y los puntos adquiridos.
 * **prueba:** Esta función se utiliza para las distintas pruebas unitarias. No contiene parámetros y muestra la prueba unitaria de las distintas funciones.

** III.Conclusiones: **
 * Se pudo observar que el tener definido desde antes cuál era la meta y qué era exactamente lo que se tenía planeado hacer es muy favorable a la realización del programa, ya que nos da una idea de cómo podemos organizar las funciones y condiciones de las mismas.


 * Se aprendió a utilizar estructuras de programación por cuenta propia.


 * Se aprendió a utilizar el modulo GUI el cual crea una interfaz grafica para el usuario, el cual hace que el programa sea más estilizado y más fácil de utilizar por el usuario. Creando objetos nuevos para nosotros como lo son los botones, fondos de pantalla etc.

** IV. ****Bibliografía:**
 * 1) Downey, A. (2008). // Think Python: How to Think Like a Computer Scientist. // Massachusetts: Green Tea Press. ISBN 13:9780521898119. http://www.thinkpython.com.
 * 2) González, R. (n.d.). // Python para todos. // Web: http://mundogeek.net/tutorial-python/
 * 3) Python Software Foundation. (2008). // Python v2.6.2. // Adquirida en julio, 2009, from Python Software Foundation Web page. Web site: http://www.python.org/
 * 4) TechSmith Corporation. (2009). // Camtasia Studio. // Adquirida en agosto 19, 2009, from TechSmith Corporation Web page. Web site:http://www.techsmith.com/camtasia.asp


 * Documento para descargar: **

Home