Proyecto02 - JTruco21
Proyecto02 - JTruco21
Proyecto02 - JTruco21
CONTENIDO
Introducción .............................................................................................................................................2
Objetivo....................................................................................................................................................2
El Truco de las 21 cartas ...........................................................................................................................2
El programa ..............................................................................................................................................4
Especificación .......................................................................................................................................4
Implementación ...................................................................................................................................5
Generación de letras al azar .................................................................................................................6
Algoritmo para tratamiento de las cartas .............................................................................................6
Restricciones de código ........................................................................................................................7
Se pide .....................................................................................................................................................7
Entrega del proyecto ................................................................................................................................8
INTRODUCCIÓN
“El que aprende y aprende y no practica lo que sabe, es como el que ara y ara y no
siembra.”
Platón
Aquí está el primer proyecto que planteará un reto bastante grande para ti. El proyecto anterior del
Adivinador ya era un tanto difícil, pero ahora redoblamos la apuesta. En este caso, como ya habrás visto
en el video de la clase, te propondremos realizar el Truco de las 21 cartas.
OBJETIVO
Crear un programa en Java que ejecute el Truco de las 21 cartas tal como será descrito en este documento,
de forma tal que el programa adivine siempre la carta que el usuario está mirando en la pantalla, tal como
sucede con el truco de cartas en la vida real.
Este proyecto plantea el uso de arreglos de forma que el/la estudiante entrene el uso de esta herramienta
y se prepare para proyectos de mayor envergadura. A través de este proyecto el/la estudiante aplicará
todo lo visto hasta ahora en el curso y utilizará su creatividad para encontrar una solución al problema
planteado, mediante la creación de un programa de software. Quienes ya realizaron el curso de
“Programación profesional desde CERO” tendrán como reto migrar su código Pascal a Java; quienes
vienen desde otros cursos o escuelas, tendrán el reto de resolver el problema que supone programar este
proyecto, lo cual es un refuerzo al aprendizaje de programación en sí.
El truco de 21 cartas (que puede ser hecho con cualquier otro número de cartas que sea múltiplo de 3),
funciona de la siguiente manera. El mago, o ejecutor, toma 21 cartas cualesquiera de un mazo común, y
las presenta en tres grupos al espectador. Al ser 21 cartas cada grupo queda de 7 cartas:
A continuación el mago juntará los montones en un único mazo pero teniendo la precaución de que el
montón que tiene a la carta del espectador quede en medio de los otros dos:
Dado que en este caso dejaremos las cartas como están, su orden será ese mismo. Se puede apreciar que
el 5 de oro está en la posición número 12. Al volver a repartir las cartas de forma intercalada (la primera
al grupo 1, la segunda al grupo 2, la tercera al grupo 3, la cuarta al grupo 1, y así), tenemos ahora el
siguiente arreglo de cartas mostrado al espectador:
EL PROGRAMA
El proyecto consiste en programar este truco de forma tal que el programa creado sea capaz de adivinar
la carta que el usuario esté mirando en la pantalla, únicamente recibiendo como información el número
de grupo en que está la carta (tarjeta) que el usuario está mirando.
ESPECIFICACIÓN
Se pide implementar un programa en Java que haga exactamente lo que se acaba de describir. En vez de
utilizar cartas se utilizarán letras mayúsculas desde la A hasta la U (21 letras).
El programa ordenará las letras al azar, tal como si barajara un mazo, y luego las mostrará en tres grupos
(columnas):
Imagina que estás interesado en la letra A, que está al final del grupo 3, así que ingresamos 3 y
presionamos ENTER. El programa juntará las letras nuevamente siguiendo el método explicado
anteriormente y las volverá a mostrar al usuario:
NOTA: El programa debe controlar que se ingresen opciones válidas y pedirlas hasta que así sea.
IMPLEMENTACIÓN
Para llevar adelante este proyecto deberás utilizar las siguientes constantes y variables ya definidas:
Las variables grupo1, grupo2 y grupo3 son simples arreglos de 7 celdas (0 a 6) de tipo char.
➢ MAX_TARJETAS_GRUPO: Define la cantidad de tarjetas por grupo de cartas. En este caso son
7 cartas por cada grupo.
➢ MAX_GRUPOS: Define la cantidad de grupos a utilizar, en este caso 3.
➢ MAX_TARJETAS: Define la cantidad de tarjetas totales en el mazo, en este caso 21.
➢ MIN_TARJETA_VALOR: Define la primera letra disponible, obviamente la A.
➢ MAX_TARJETA_VALOR: Define la última letra disponible, en este caso la U.
En concreto nuestras letras van desde la A hasta la U, es decir desde el índice 65 de la tabla hasta el índice
85 de la tabla. La gracia está entonces en poder generar números al azar entre 65 y 85 inclusive. Esto ya
lo hemos visto en clases anteriores. En concreto en este caso sería:
numero= generador.nextInt(85-65+1)+65;
En este ejemplo, generador es un objeto (variable) de tipo Random, tal como ya se ha hecho en clases
previas a este proyecto, con la cual se utiliza la función nextInt para obtener un número aleatorio. De
forma genérica, si tenemos un número X y otro número Y que es mayor, y queremos generar números
aleatorios entre X e Y, se debería utilizar nextInt de la siguiente manera:
numero= generador.nextInt(Y-X+1)+X;
Ahora bien, tal como hemos enseñado en el curso, es aconsejable utilizar constantes para nuestros
programas, y como ya hemos definido 5 en este proyecto, las usaremos para esta tarea. Por tanto, la
fórmula final queda así:
indice= generador.nextInt((int)MAX_TARJETA_VALOR-(int)MIN_TARJETA_VALOR)+1+(int)(MIN_TARJETA_VALOR);
De este modo ya tienes la fórmula que te da como resultado un índice ASCII entre 65 y 85 pero utilizando
las constantes definidas. Así, al cambiar algún valor de estas constantes el programa igualmente
funcionará de manera correcta.
Lo que te queda por hacer es simplemente obtener el carácter del índice generado utilizando (char).
Cada secuencia de instrucciones que has programado y que has visto en los videos es un algoritmo. Dado
que una computadora solo puede seguir instrucciones precisas paso por paso para hacer algo, un
programa no es otra cosa que muchos algoritmos que sirven para resolver un problema.
El algoritmo que sugerimos para resolver el problema de las cartas en este programa es el que
describiremos a continuación. Tú como estudiante puedes utilizar este algoritmo o bien crear uno propio,
sin embargo esto último no es obligatorio, y por eso es que dejamos una guía aquí.
Los pasos a seguir para la ejecución del programa serían los siguientes:
1. Generar letras al azar sin repetir en deck: Dedicamos una clase completa a mostrar cómo
generar números al azar sin repetir en un arreglo. Esto es exactamente lo mismo.
2. Asignar a los 3 grupos sus 7 cartas: Esto es simple, se recorre el arreglo deck hasta el final.
Las primeras 7 celdas se copian a grupo1, las otras 7 a grupo2 y las últimas 7 a grupo3.
3. Se entra en un bucle repetitivo:
I. Se muestran los 3 grupos en pantalla intercalando las letras de modo que cada grupo
aparezca en una columna. Esto se logra simplemente imprimiendo los tres arreglos a
la vez, primero la celda de grupo1, luego la de grupo2 y finalmente la de grupo3.
II. Se entra en un bucle para pedir el número de grupo.
i. Si la opción ingresada no es correcta (1, 2 o 3) se repite este bucle.
III. Según la opción ingresada se vuelven a poner los grupos en deck manteniendo el
orden de sus letras, de forma que el grupo en que está la letra elegida quede en
medio. Primero se pone un grupo de la celda 1 a la 7, luego el otro de la celda 8 a la 14
(en este está la letra elegida) y finalmente el último grupo de la celda 15 a la 21.
IV. Se vuelven a mover las letras a los grupos de forma intercalada.
V. Se repite el bucle desde el punto 3 hasta agotar la cantidad de repeticiones (3).
4. Se muestra al usuario la letra seleccionada, que es la celda central del arreglo deck.
RESTRICCIONES DE CÓDIGO
Para este proyecto tienes que utilizar las constantes y variables definidas arriba tal cual se te han indicado
(básicamente copia y pega). Además tienes las siguientes restricciones:
➢ No puedes declararte ningún otro tipo de datos, clase ni utilizar librerías de Java que no se
hayan visto en el curso.
➢ No puedes declarar nuevas constantes.
➢ Debes utilizar las constantes ya definidas para tus bloques FOR, WHILE o REPEAT que utilices
para recorrer arreglos.
➢ Todo tu código debe estar dentro del procedimiento main de tu clase principal. No puedes
declarar nada fuera del procedimiento main.
Puedes declararte tantas variables como quieras y utilizar el algoritmo que quieras. Los pasos dados en la
sección anterior simplemente son una sugerencia para ayudarte, pero no es algo a lo que te tengas que
atener de forma restrictiva.
SE PIDE
Escribir un programa Java que cumpla con todo lo descrito en el documento y funcione exactamente igual
que los ejemplos. Se te proveerá del archivo .jar ya compilados para que puedas probarlos en
funcionamiento y ver lo que tienes que lograr.
Este proyecto es obligatorio y debe ser entregado ya que será evaluado por un docente. Lo que debes
entregar es el archivo con el código fuente. Dependiendo de la plataforma en que hagas el curso será el
medio por el cual enviarás el archivo:
➢ KA EduSoft: En la lección donde se te presenta este proyecto tendrás la opción para subir el
archivo del código fuente.
➢ Udemy: Escribe un correo electrónico a bedelia@kaedusoft.edu.uy con el asunto PROYECTO
JAVA TRUCO21 [NOMBRE] [APELLIDO] en el cual adjuntarás el archivo con el código fuente de
tu trabajo.