Investigación+Corta+Proyecto+3

**
 *  __Investigación Corta:__

 I.**Análisis de Requerimientos**
 * 1.1 ****Preguntas insustituibles junto con una breve narración de cómo llegó a la solución propuesta:**

· **¿Cuál es la meta?:** Crear un juego que incluya gráficos, entre los cuales estaría, desplegar una serie de cuadros y un caballo. Esto se realizará con el objetivo que el usuario pueda mover el caballo de cuadro en cuadro, siempre respetando el movimiento permitido para así, ir recolectando fichas y acumulando puntos.

· **¿Cuáles son los datos?:** El usuario solo ingresa su nombre cuando desea que se almacene este en puntajes mayores.

· **¿Cuáles son las condiciones?:** o El caballo solo se puede mover en L, esto quiere decir dos casillas a la derecha o izquierda y luego una arriba o abajo, o bien, dos casillas para arriba o abajo y luego una a la derecha o izquierda. o Para ganar, se debe de regresar el caballo a donde este inicio. o Cada vez que se reinicia el juego, se reinician los contadores. o Un nombre será almacenado en la lista de puntajes mayores únicamente si se obtuvo una cantidad de fichas mayores a 0. o El puntaje se obtiene de la siguiente manera: fichasobtenidas*30-tiempo. o El tiempo se empieza a tomar desde que se mueve por primera vez el caballo

· **¿Qué procesos necesito?:** Se ejecuta la pantalla de inicio en la cual el usuario debe de apachar un botón dependiendo de lo que desee. Iniciar, puntajes altos o salir. Al apachar iniciar, se despliega la pantalla del juego para que el usuario pueda jugar. En esta pantalla, hay dos botones, uno para salir que muestra una nueva pantalla y otro para instrucciones que despliega lo que se debe de hacer en el juego. A la vez, en esta pantalla, se permite que el usuario presione el cuadro o la ficha a donde quiere que el caballo se mueva, si es el movimiento es permitido este se mueve, si no, no se mueve. Una vez que el caballo ya no se puede mover ya que no hay movimientos permitidos o bien, si se regresó el caballo a su posición de inicio, se despliega una nueva pantalla donde se muestran punteos, opción de ingresar nombre para almacenar puntajes altos y opción para volver a jugar o salir. Si se desea volver a jugar, se abre de nuevo la pantalla de inicio.


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

· Se empleo la función time.clock, la cual regresa el valor del actual tiempo mostrado en el procesador de la computadora, este tiempo es presentado como un valor de tipo float en segundos.

· Otra función empleada fue doctest.testmod(verbose=True) para poder realizar las pruebas unitarias de las funciones.

· _init_(self,item): Función predeterminada para la instanciación de un objeto en la clase Movimiento. Los argumentos encontrados en esta función pasan a la expresión de la construcción de clase. Self se refiere al uso interno dentro de la clase, y es un parámetro estándar para esta función. Ítem se refiere al objeto ingresado como argumento en la clase movimiento. Asocia ambos argumentos para poder utilizar sus características dentro de las funciones definidas en la clase.

** II. ****__Diseño__ **
 * 2.1 ****¿Cómo llevará a cabo la solución? Variables y objetos a utilizar:**

Se utilizarán una serie de funciones que contienen asignación de valores, condiciones o repeticiones o todas las anteriores. Estas funciones se usan para desarrollar el programa. Se emplean distintos objetos gráficos como canvas (parte donde se muestran diseños y fotos), botones (realizan una operación al apacharlos), labels (muestran un mensaje), entry (permite ingresar texto), Gui (permite crear una pantalla gráfica). En cuanto a variables, se emplean distintas variables globales, en su mayoría listas. De estas listas, dos contienen variables a utilizar, estas son imágenes y datospuntaje, las demás, contienen un grupo de coordenadas que se emplean a lo largo del programa para poder utilizar el área gráfica. Además, hay variables como juego, canvas y entrada que son usadas para poder reinicializar el juego.


 * 2.2 ****Descripción del curso lógico de la solución del problema. ( Narrativo ):**

· Se despliega la pantalla de inicio. Se muestra el objetivo del juego y tres botones. El primero, inicia el programa, el segundo muestra los puntajes mayores y el último, sirve para salir del programa.

· Al iniciar, se despliega una nueva pantalla con el juego, esta contiene gráficos y 2 botones. El primer botón, despliega otra pantalla con las instrucciones y el segundo botón es para desplegar otra pantalla donde se muestra punteos, permite el ingreso de nombre y da la opción de salir, para cerrar el programa o de volver a jugar que lleva de regreso a la pantalla de inicio. Al jugar, cada vez que el jugador apache un cuadro con ficha con posible movimiento, el caballo se mueve. Cuando ya no hay movimientos se muestra la pantalla donde está la opción de ingreso de texto o bien, si logra finalizar el juego, también se muestra dicha pantalla.

· Si se selecciona de la pantalla de inicio la opción de puntajes mayores, se desplegara una pantalla con los nombres y puntos de personas que lograron terminar el juego o bien, no lo terminaron y se salieron antes de perder.


 * 2.3 ****Módulos de Python utilizados. Cómo se utilizarán en su programa:**

· **Time:** Este modulo permite utilizar varias funciones relacionadas con el tiempo. Particularmente, se utilizó time.clock, la cual regresa el valor del actual tiempo mostrado por el procesador, presentado como un valor de tipo float (decimal), expresado en segundos. La precisión de este valor depende del procesador. En Windows, regresa la cantidad de segundos que han pasado desde que la función fue llamada por primera vez, usualmente como un decimal.

· **Gui:** Este módulo, parte del conjunto de Swampy, es una subclase del módulo TkInter, y permite crear varios widgets, con una facilidad de uso ligeramente mayor, ya que permite realizar un empaque de de un widget de una forma más sencilla. El primordial uso que se le dio a este módulo fue la creación de la interfaz gráfica, comenzando con la aparición de pantallas adicionales, la utilización de un canvas en el juego en sí, como también la utilización de botones y pantallas adicionales para presentar opciones, menús, y listados de puntajes. Se usaron instrucciones como canvas, rectangle, button, label, etc.

· **Doctest:** El módulo doctest busca trozos de texto que parecen sesiones interactivas del intérprete de Python, y luego ejecuta estas sesiones para verificar que funcionan de la forma en la cual son mostrados. Hay varias formas de usar doctest: usando docstrings bien documentados; usar pruebas de regresión verificando ejemplos interactivos en un archivo de prueba, o escribiendo documentación de tutorial para un paquete.


 * 2.4 ****Funciones desarrolladas por el programador. Para que se usan, parámetros esperados:**

· **CoordenadasAdicionales:** Crea una lista de coordenadas que son utilizadas luego para hacer comparaciones entre coordenadas. Particularmente, crea una matriz, con coordenadas rodeando las catorce coordenadas establecidas al inicio. No recibe ningún parámetro, y devuelve la matriz.

· **Movimiento de Caballo(x,y,xant,yant):** Función que recibe como parámetros cuatro coordenadas: dos en x y dos en y. Simplemente verifica que la coordenada x y y ingresadas como argumentos estén a una distancia de movimiento de caballo de coordenadas anteriores. Quiere decir que debe estar a tres cuadros de distancia: uno al lado o arriba y dos al lado o arriba. Esto se verifica mediante sumas de coordenadas, ya que deben cumplir ciertos requisitos de diferencia de coordenadas para cumplir. Devuelve el valor True si se forma una figura de caballo.

· No **PosiblesMovimientos(x,y):** Función que recibe como parámetro una coordenada x y una y. Verifica cuantas coordenadas (en una lista global de coordenadas) posibilitan el movimiento del caballo, siendo lo máximo ocho. Verifica esta condición mediante la función MovimientodeCaballo, y utiliza todos los valores de una lista de coordenadas adicionales. Devuelve la cantidad de movimientos de caballo hallados en la lista.

· **select(self,event):** función que recibe como parámetro un objeto (declarado ya como self en el _init_ de la clase) y un evento, en este caso, el click del botón izquierdo. Esta es la función clave en el funcionamiento del programa, ya que permite realizar muchas cosas. Primero, detecta la coordenada clave del rectángulo que fue presionado. Con esta coordenada, verifica si se forma un movimiento de caballo con la coordenada anterior. Si esto es cierto, coloca una foto de un caballero en el cuadro respectivo, y aumenta las fichas en uno. También modifica el contador de fichas mostrado en la parte superior de la pantalla. Luego, siguen varias condiciones. Si es el primer movimiento, crea en el lugar de partida un cuadro para poder ser presionado (como último lugar). Si es cualquier otro espacio, cubre el cuadro anterior con un rectángulo azul, y ya no puede ser presionado. Luego, agrega las nuevas coordenadas a una lista de coordenadas temporales. Si el lugar nuevo es el lugar de inicio, inhibe el movimiento y finaliza el programa. Luego, verifica si ya no hay movimientos disponibles. Si es así, elimina los puntos y finaliza el juego.

· **JuegoInicio:** Función que comienza con el juego en sí. Es llamada cuando uno presiona iniciar el juego, en la pantalla de inicio. Crea un canvas con los cuadros designados, y les agrega una ficha. Convierte todos los cuadros y fichas creados en una instancia de la clase Movimiento. Finalmente, se agrega un cuadro de anotaciones y botones de finalizar y reiniciar.

· **Cerrar:** Función utilizada para cerrar ciertas pantallas. No recibe ningún parámetro, es utilizada en botones en varias pantallas para cerrarlas.

· **Instrucciones:** Crea una pantalla nueva, en la cual se despliegan utilizando labels, las instrucciones del juego. Llamada por un botón de instrucciones.

· **InicioNuevo:** Esta función es utilizada para reiniciar el juego. Resetea todas las variables y contadores, para comenzar desde cero, tanto en posición como en valores de listas, puntos y nombres. Finalmente, crea una nueva pantalla en la cual se presenta el nuevo juego, con la función JuegoInicio.

· **Puntajesaltos:** Esta función crea una pantalla nueva, en la cual se despliegan los valores contenidos en la lista datos puntaje, respecto al nombre de los puntajes mayores, como también los puntos de estas personas. Lo muestran en columnas.

· **Salirjuego:** Destruye todas las pantallas disponibles, para salir completamente del programa. · **PantallaInicio:** Esta es la pantalla principal del juego. Muestra las opciones clave, que son iniciar, puntajes más altos, y salir. Cuando se termina el programa, también regresa a esta pantalla.

· **Reiniciar:** Destruye la pantalla de sumisión de nombre, como también la del juego en sí, y regresa a la pantalla de inicio, con las opciones mencionadas anteriormente.

· **Salir:** Destruye la pantalla del juego y sumisión de datos, para finalizar el juego sin regresar a la pantalla de inicio.

· **Aceptar:** Función que se encarga de tomar el texto que se ingresó en la pantalla de finalizar y lo almacena en una lista de nombres. A la vez, almacena los puntos mayores en una lista. Esta función no contiene parámetros ni devuelve valores.

· **FinalizarJuego:** Función que se encarga de crear la pantalla de finalizar. En esta, se calculan los puntos, se muestra el total de fichas obtenidas, el tiempo que se tardó y los puntos obtenidos. A la vez, aquí es donde se ingresa el nombre para poder ser utilizado en la función aceptar. No contiene parámetros ni devuelve valores.

· **Prueba:** Esta función se utiliza para las diferentes pruebas unitarias de las funciones que devuelven valores. Simplemente usa la instrucción doctest.testmod del módulo doctest para realizar una prueba de funcionalidad del programa.

** III. ****__Conclusiones__ ** · Un conocimiento que se adquirió en esta práctica fue el de mejorar el utilizar más a fondo el módulo Gui.

· Las listas reducen el código en cuanto a las variables globales, ya que estas pueden ser almacenadas y modificadas dentro de una lista.

· Tener la meta definida antes de comenzar ayuda a planear la realización del programa y hace que sea más sencillo construirlo.

· Se pudo demostrar que el utilizar funciones hace que el código del programa sea más corto y este no sea repetitivo, a la vez, de esta manera, es más sencillo buscar bugs en el programa. ** <span style="font-family: 'Times New Roman',Times,serif; font-size: 14pt;">IV. ****<span style="font-family: 'Times New Roman',Times,serif; font-size: 14pt;">__Bibliografía__ ** <span style="font-family: 'Times New Roman',serif; font-size: 12pt; line-height: 115%;">1. Downey, A. (2008). //Think Python: How to Think Like a Computer Scientist.// Massachusetts: Green Tea Press. ISBN 13:9780521898119. http://www.thinkpython.com.

<span style="font-family: 'Times New Roman',serif; font-size: 12pt; line-height: 115%;">2. González, R. (n.d.). //Python para todos.// Web: http://mundogeek.net/tutorial-python/.

<span style="font-family: 'Times New Roman',serif; font-size: 12pt; line-height: 115%;">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/

<span style="font-family: 'Times New Roman',serif; font-size: 12pt; line-height: 115%;">4. TechSmith Corporation. (2009). //Camtasia Studio.// Adquirida en agosto 19, 2009, from TechSmith Corporation Web page. Web site: http://www.techsmith.com/camtasia.asp


 * Archivo Descargable:**

Home