Investigación

__ Preguntas insustituibles: __ **
 * Regresar

· Número de monedas entre 3 y 30. · Instrucción para pesar las monedas · Instrucción del botón ‘start’ para empezar el juego. · Instrucción del botón ayuda para mostrar instrucciones. - Instrucción del botón ok. · Instrucción de cada una de las monedas al seleccionarlas y al colocarlas sobre las bandejas de pesado. - Instrucción del botón decide para elegir si la ficha falsa es liviana o pesada - Instrucción del botón liviana o pesada
 * __Entradas:__**

· El entry y el botón OK cuando el usuario confirme el número de monedas. · Monedas en el grid cuando se seleccione OK. · El contador del tiempo cuando se empiece el juego. - El botón de la balanza cuando se seleccione OK · El texto de ayuda cuando se seleccione el botón correspondiente. · Las imágenes correspondientes al equilibrio de peso de las bandejas con las monedas. . El botón de selección de moneda falsa . El botón de selección de liviana o pesada . El mensaje de gano o perdio.
 * __Salidas:__**

· Sólo pueden ser 30 monedas. · Deben ser sólo 3 turnos. · Si se termina el tiempo el jugador pierde. · Debe de existir una moneda falsa o una moneda más pesada. · El programa debe de indicar cuál de las dos bandejas contiene la moneda pesada o la falsa. · Debe de haber sólo una moneda diferente, no dos. · El jugador decide con cuántas monedas jugar. · Al seleccionar una moneda y colocarla en una bandeja, la moneda debe de desaparecer de su posición inicial. · El tiempo debe de iniciar cuando el jugador confirma la cantidad de monedas con las que quiere jugar.
 * __Restricciones:__**

· Ciclo para el posicionamiento de las monedas cuando el usuario decida cuántas usar. · La definición de cada uno de los botones en el grid. · El contador de los puntos conforme pasa el tiempo. · Ciclos para sumar la cantidad de monedas en las bandejas. · Se controlan las repeticiones por medio de ciclos FOR y WHILE, y con llamadas múltiples de las funciones que revisan los valores de las monedas.
 * __Repeticiones:__**

Primero definimos una función que nos generaba la matriz, y colocaba en cada uno de sus elementos un valor para guiar el desarrollo de la matriz. Luego colocamos valores de 10 para crear el valor estándar de las monedas, y luego a una de estas monedas le asignamos un valor al azar de 5 ó 15 para diferenciar de las demás. Luego generamos un grid para colocar botones correspondientes a las monedas vacías, y a las bandejas. Luego hicimos la función que movía las monedas y verificaba que valor tenía cada una. Luego hicimos el contador del tiempo, la funciones de ayuda, la de ingreso de datos, inicio del juego y pesaje. Por último creamos las condiciones para que sólo permitieran tres pesadas y los mensajes de ganar o perder. También entre estas últimas funciones definimos la de que el usuario escoja que moneda es más pesada o más liviana.
 * __Narración:__**

=__ Diseño: __=

La solución de este juego consiste en ingresar un número de monedas entre 3 y 30 con las que desea jugar. Luego colocar las monedas en las bandejas y pesar. Al pesarlas se muestra que bandeja es más pesada y así el juego da pistas de cómo ir adivinando la moneda diferente. Sólo se permiten tres pesadas y los puntos van restándose conforme pasa el tiempo del juego.
 * __Solución:__**

Utilizamos la variable de matriz como una lista con tres elementos para generar dentro de ella otras tres listas. Creamos la variable entry que corresponde al valor que el usuario ingresa para definir la cantidad de monedas. Creamos también todas las variables que corresponden a los elemtnos gráficos como los botones, grid, canvas, Gui alterno para instrucciones. También definimos variables que corresponden a las imágenes que importamos a nuestro código fuente. Por último, creamos variables que son los contadores de los pesos de cada una de las bandejas en el juego.
 * __Variable a utilizar:__**

Primero se crea el grid con los botones correspondientes a START, las bandejas, el botón de ayuda y las posiciones en donde pueden ir las monedas. Luego cuando el usuario da click en START, entonces se llama a la función START y genera el botón OK y el entry. Al dar click en OK se envía el valor ingresado en el entry y se envía al a función INICIO, la cual genera un valor diferente entre 5 y 15 al azar y lo asigna al primer elemento de lista de monedas, luego esos elementos los desordena y así se crean las monedas en el grid ya con los valores asignados. Luego cuando el usuario coloca una moneda en una bandeja le da click a la moneda inicial y luego la posición en la bandeja, por lo tanto estos son botones y lo que hace es cuando inicia un valor al darle click a la moneda en el grid inicial, y cuando se selecciona una posición en alguna de las bandejas, entonces desaparece del grid inicial y aparece la moneda en la bandeja. Al dar click en la opción pesar se suman los valores de cada bandeja y se muestra el valor, mas, menos o igual según la comparación de los pesos. Por último hay un contador de turnos, y uno de puntos que se inicia al dar click en el botón OK.
 * __Descripción del curso lógico:__**

__Módulos:__ **

Esta es una de las interfaces gráficas de Python. Utilizando las diferentes funciones predeterminadas por el módulo pudimos diseñar el grid, las monedas, las imágenes utilizadas, los botones y la configuración de cada uno de los Widgets mencionados. También con este módulo podemos crear varias ventanas, y hacer la interfaz usuario-computadora fuera del IDLE.
 * __Gui:__**

Con este módulo generamos los valores para revolver las posiciones de las monedas generadas para así tener en una posición al azar a la moneda falsa o la moneda más pesada.
 * __Random:__**

Este módulo contiene la función time.sleep la cual utilizamos para retrasar la ejecución de la función que restaría los puntos según pasa el tiempo mientras el usuario está jugando.
 * __Time:__**



__ Funciones: __**

Tiene definidas como variables globales a Matriz, que corresponde a los elementos en donde podrían ir las mondes; N que corresponde al número de monedas ingresado por el usuario. Luego crea un FOR en donde se asignan a las casillas de Matriz, mientras N >0 los elementos correspondientes a las monedas. Luego se le asigna a un elemento de la matriz al azar el peso ya sea menor o mayor a la moneda a descubrir.
 * __Inicio:__**

Esta función responde al comando de un botón y muestra las instrucciones de cómo jugar en un nuevo Gui.
 * __Instrucciones :__**

Esta función se inicia mediante el comando de un botón y crea el entry para que el usuario ingrese la cantidad de monedas y también el botón por medio del cual se llama ala función OK.
 * __Start:__**

Esta función responde al comando del botón botonOK y llama a la función Inicio, a la función puntos y captura el valor ingresado en el entry de Start.
 * __OK:__**

Esta función contiene la función del módulo Time y lo que hace es que se le asignó a time.sleep un valor por el cual la función se deja de ejecutar mientras pasa el tiempo asignado. Por lo tanto, retrasa la ejecución de la función.
 * __Tiempo:__**

Esta función es la que hace que se muestre el contador del tiempo y de los puntos que se van perdiendo mientras se juega. Tiene un valor inicial de puntos y los muestra como texto mediante un botón sin comando en el grid. Se crea un ciclo en donde si el número de puntos es mayor o igual a 0, entonces se va a llamar a la función Tiempo, la cual va a retrasar la resta de puntos tanto tiempo se le haya asignado a esta función.
 * __Puntos:__**

Esta función corresponde a las sumas de los valores correspondientes a cada moneda en cada una de las bandejas. Si la suma de una bandeja es menor o mayor a la suma de la otra bandeja entonces se mostrará la imagen correspondiente a los valores de suma o resta.
 * __Suma:__**

Esta función coloca la imagen de una moneda vacía cada vez que se selecciona una moneda y se coloca en una bandeja, y viceversa.
 * __F:__**

Esta función crea una ventana en donde se muestran dos botones los cuales el usuario debe escoger una según su elección de la moneda más pesada o más liviana. Cuando se selecciona uno de los dos botones, entonces se llama a la función liviana, o pesada respectivamente.
 * __Decisión:__**

Estas dos funciones verifican el valor numérico de la moneda. En caso de coincidir el peso con el botón ingresado, entonces muestra el mensaje de que el usuario ganó, de lo contrario, un mensaje de que el usuario perdió.
 * __Pesada y Liviana:__**

=__**Conclusiones:**__= · Aprendimos con este proyecto la utilización de las funciones que corresponden a la modificación del tiempo de procesamiento de la computadora. Utilizamos la función time.sleep, que al ingresar un número dentro los paréntesis lo que hacía era retrasar el procesamiento del código tantos segundos se hayan ingresado en la función. · Aprovechamos en este proyecto la mutablididad de las matrices para poder generar las monedas y cambiar de valores los elementos de la martiz principal. · Utilizamos todos los conocimientos hasta ahora obtenidos en el curso para poder completar este proyecto según las especificaciones dadas en las instrucciones.

=__**Bibliografía:**__= · Downey, A. (2008). Think Python: How to Think Like a Computer Scientist. Massachusetts: Green Tea Press. ISBN 13:9780521898119. [|http://www.thinkpython.com].