Uno

Java MySQL Proyecto Sockets XML



Especificaciones

  • Año: 2014
  • Categoría: Juegos
  • IDE: NetBeans
  • Interfaz Gráfica: Sí
  • Jugadores: 2 - 4
  • Lenguaje: Java
  • Red: Local / Internet
  • SGBD: MySQL
  • Sockets: Sí

Enlaces

  • Código fuente en Github.
  • Archivo .exe de este proyecto.

Solicitud

Objetivo

Evaluar las habilidades de los estudiantes en cuanto al desarrollo de software,  utilizando conceptos de la Programación Orientada a Objetos y la aplicación de modelos de proceso de software en la solución de problemas.

Planteamiento Del Problema

Uno es un juego de cartas que fue desarrollado en los años 70 por Merle Robbins.  Los derechos fueron comprados por International Games y actualmente es Mattel el encargado de producir y distribuir el juego.

El objetivo del juego es ser el primero en lograr 500 puntos. Los puntos se logran al deshacerse de las cartas de la mano antes que los oponentes. El jugador logra puntos con las cartas que el oponente no pudo descartar. 

El número de participantes es de mínimo 2 personas, máximo 10.

El juego está conformado por 108 cartas distribuidas de la siguiente manera:

CARTAS NORMALES: Representadas por números y colores.

19 cartas azules - 0 a 9 (Dos cartas para cada numero excepto el 0. Solo tiene una)
19 cartas verdes - 0 a 9 (Dos cartas para cada numero excepto el 0. Solo tiene una)
19 cartas rojas - 0 a 9 (Dos cartas para cada numero excepto el 0. Solo tiene una)
19 cartas amarillas - 0 a 9 (Dos cartas para cada numero excepto el 0. Solo tiene una).

CARTAS ESPECIALES O COMODINES: Permiten alterar el flujo normal del juego mediante ciertas acciones

8 cartas Toma dos - 2 azules, 2 verdes, 2 rojas y 2 amarillas
8 cartas Reversa - 2 azules, 2 verdes, 2 rojas y 2 amarillas
8 cartas Salta - 2 azules, 2 verdes, 2 rojas y 2 amarillas
4 cartas de comodín de color
4 cartas de comodín Toma cuatro

Se pide desarrollar una solución informática para el juego descrito. Para ello deberá realizarse el análisis, diseño e implementación de módulos que se detallan más adelante.

Reglas del Juego

Cada jugador toma una carta. La persona que tenga el número más grande será quien reparta. En esta parte del juego, las cartas de acción cuentan como cero.

Después de barajar las cartas, se reparten 7 cartas a cada jugador.

Las cartas restantes se colocan cara abajo para formar la pila para ROBAR. La primera carta de la pila para ROBAR se voltea para formar una pila para DESCARTAR. Si la carta que se voltea de la pila para ROBAR es una carta de acción, se tienen que seguir ciertas reglas (ver FUNCIONES DE CARTAS DE ACCIÓN).

El jugador a la izquierda del repartidor empieza. Tiene que hacer coincidir, ya sea por número, color o símbolo, la carta en la pila de DESCARTE con una de sus cartas. Por ejemplo: Si la muestra es un 7 rojo, el jugador podrá descartar una carta roja o un siete de cualquier color. El jugador también podrá tirar un Comodín de color (ver FUNCIONES DE CARTAS DE ACCIÓN).

Si el jugador no tiene ninguna carta que corresponda a la carta de la pila para DESCARTAR, entonces deberá tomar una carta de la pila para ROBAR. Si se puede jugar esta carta, el jugador la puede descartar en ese turno. De lo contrario, el juego continúa con el siguiente jugador en turno.

Un jugador puede optar por no jugar una carta jugable de su mano. De hacer esto, el jugador debe robar una carta de la pila para ROBAR. Si es una carta que coincida, ésta se puede descartar en el mismo turno, pero el jugador no puede usar otra carta de la mano después de haber robado.

Funciones de las cartas de acción

Las funciones de las cartas de acción, así como cuándo se pueden descartar, se describen abajo.

Carta Toma Dos - Cuando se tira esta carta, el siguiente jugador roba dos cartas y pierde su turno. Esta carta sólo se puede descartar sobre una carta del mismo color o sobre otra carta Toma dos. 
Si ésta es la primera carta del juego que se voltea, se sigue la misma regla de juego.

Carta Reversa - Cambia el sentido del juego. Si le tocara jugar al jugador de la izquierda de quien tira la carta, este jugador pierde su turno; en su lugar jugará la persona de la derecha, y el sentido se cambiará hacia la derecha. Esta carta sólo se puede descartar sobre una carta del mismo color o sobre otra carta Reversa. Si ésta es la primera carta del juego que se voltea, al repartidor le toca primero y el juego continúa hacia la derecha.

Carta Salta - Al jugador que le toque jugar pierde su turno y tirará el siguiente de acuerdo al sentido del juego. Esta carta sólo se puede descartar sobre una carta del mismo color o sobre otra carta Salta. Si ésta es la primera carta del juego que se voltea, se “salta” al jugador a la izquierda del repartidor y empieza el siguiente jugador.

Comodín De Color - El jugador que descarte esta carta dirá el nuevo color que se jugará o puede repetir el que ya estaba para descartarse. Esta carta se puede tirar con cualquier carta; incluso, puede ser utilizada en caso de tener alguna carta con el número o color correspondiente. Si ésta es la primera carta del juego que se voltea, el jugador a la izquierda del repartidor decide el color con el que empezará el juego.

Carta Comodín Toma Cuatro - Esta es la mejor carta. No solamente quien la tira escoje su color, sino que además hace que el siguiente jugador robe 4 cartas y pierda su turno. Desafortunadamente, esta carta sólo se puede descartar si el jugador que la tiene no tiene otra carta en su mano que coincida en color con la de la pila de DESCARTE. Sí se puede descartar esta carta si el jugador tiene en su mano cartas que coincidan en número o cartas de acción. Un jugador con esta carta se puede arriesgar a descartarla “ilegalmente”, pero si se le sorprende se tienen que seguir ciertas reglas (ver CASTIGOS). Si ésta es la primera carta del juego que se voltea, se regresa a la pila y se voltea otra carta.

Decir "UNO"

Cuando a un jugador le quede una sola carta, tiene que decir en voz alta “UNO”. De lo contrario, deberá robar dos cartas de la pila para ROBAR. Esto sólo es necesario en caso de que uno de los jugadores sorprenda al jugador saliente sin haber dicho “UNO” (ver CASTIGOS).

Cuando un jugador descarte todas sus cartas, se acaba la mano. Los puntos se suman (ver PUNTUACIÓN) y el juego vuelve e empezar.

Si la última carta del ganador fue una carta Toma dos o un Comodín Toma cuatro, el siguiente jugador deberá robar las cartas correspondientes, ya que éstas contarán para los puntos del ganador. 

Si la pila para ROBAR se termina y ningún jugador ha ganado, deja la última carta y revuelve el monto para voltearlo y tener nuevamente una pila de donde robar.

Puntuación

Cuando un jugador gana, se suman los puntos de las cartas que los oponentes no pudieron descartar. La puntuación será como sigue:

Tipo de Carta

Valor

Todas las cartas con número

Valor del número

Toma Dos

20 puntos

Reversa

20 puntos

Salta

20 puntos

Comodín

50 puntos

Comodín Toma cuatro

50 puntos

Para Ganar El Juego

El ganador es el primero en llegar a 500 puntos. También se pueden ir sumando los puntos de cada jugador al final de cada juego; así, cuando algún jugador llegue a 500, el que tenga menos puntos será el ganador.

Castigos

Si a un jugador se le olvida decir “UNO” antes de que su penúltima carta toque la pila para DESCARTAR, pero se acuerda de hacerlo (y dice “UNO”) antes de que otro jugador lo sorprenda, no está sujeto al castigo.

No se puede sorprender a un jugador por no decir “UNO” sino hasta que su penúltima carta toque la pila para DESCARTAR. Tampoco no se puede sorprender a un jugador por no decir “UNO” después de que el siguiente jugador empiece su turno. “Empezar un turno” significa robar una carta de la pila para ROBAR o descartar una carta de su propia mano de cartas.
Si un jugador le aconseja a otro tirar una carta, el primero deberá robar 2 cartas de la pila para ROBAR.

Si un jugador descarta una carta equivocada y cualquiera de los jugadores se da cuenta, el jugador que descartó deberá tomar su carta y robar otras 2 cartas de la pila para ROBAR. El juego continúa con la siguiente persona en turno.
Si un jugador tira un Comodín Toma cuatro ilegalmente, (esto es, teniendo alguna carta con el color que corresponda) y alguien lo desafía a mostrar sus cartas, deberá enseñar sus cartas al jugador que lo desafió.

Si es culpable, deberá robar 4 cartas; si no lo es, el desafiante tendrá que robar 2 cartas, además de las 4 del comodín. Este desafío sólo lo puede hacer el jugador a quien le toque tomar las 4 cartas, después de que se descarte el Comodín Toma cuatro.

Módulos a Desarrollar

Módulo Gestión Usuario

Permite administrar la información de los distintos usuarios de j-UNO. 

Datos a registrar por usuario: Nombre, Apellido, Nickname (campo único por usuario), email, imagen asociada, clave. Es posible modificar la información del usuario excepto el nickname.

Un usuario puede dar de baja su cuenta temporalmente, con la posibilidad de reactivarla en otra oportunidad.

Módulo Crear Partida

Un usuario puede crear partida en j-UNO. Para ello debe indicar cantidad de usuarios con los que se quiere jugar. (min 2- max 4). El sistema de manera aleatoria genera partida con la cantidad de jugadores indicados. El usuario podrá colocarles nombres a dichos jugadores e imagen que los identifique en la partida. 

Adicionalmente el usuario indicara modalidad de partida que puede ser de dos maneras: 

  1. Partida Rápida: Se gana cuando un jugador quede sin cartas.

  2. Partida Acumulativa: Se gana cuando un jugador acumule cierta cantidad de puntos, en este caso se le indica al usuario que indique la puntuación mínima acumulada para ganar.

Un usuario podrá abandonar una partida en cualquier momento.

Módulo de Estadísticas

El j-UNO debe generar estadísticas para cada usuario (registrado o generado aleatoriamente) que haya jugado partida, considerando: Cant. De partidas jugadas, Cantidad de partidas ganadas, cantidad de partidas perdidas, cantidad de partidas abandonadas y posición en que ocupa en el ranking de jugadores (considerando partidas ganadas).

Módulo de Almacenamiento de Datos

Modulo que se encarga del almacenamiento y carga de datos generadas por j-uno. Para ello es indispensable el uso de archivos XML. La estructura y cantidad de archivos serán definidos por el equipo.

Consideraciones finales

  • Equipos conformados por 3 personas. Excepto un equipo de 2 personas.

  • El proyecto será corregido bajo el IDE Netbeans 7.0.

  • La partida debe ejecutarse en red. Min. 4 jugadores conectados.

  • La corrección exige la presencia de todos los integrantes del equipo, en caso contrario no se evaluará el proyecto.

  • Las entregas del proyecto se harán  en un sobre manila sellado e identificado con los nombres de los miembros del equipo. El sobre debe contener documentos impresos (NO CÓDIGO) y en digital las versiones de código.

Metodología de Desarrollo

Metodología ágil para el desarrollo de Software. Programación Extrema.

Librerias A Utilizar En El Proyecto

  • JDOM: Librería para la gestión y manejo de archivos XML.

  • JAVADOC: Librería para generar la documentación del proyecto.

  • SOCKETS: Api de JAVA para conexión en red.


Respuesta

Introducción

Siendo uno de los juegos de cartas más populares, UNO,  brinda una variedad de oportunidades de jugar, gracias a que  se conforma de diferentes tipos de cartas,  y posee la peculiaridad de penalizar a los jugadores. Dado todo esto, este  juego a su vez brinda una excelente oportunidad para demostrar la capacidad de los programadores, de realizar un programa complejo en donde se note la experiencia adquirida así como también la competencia de los mismos programadores a la hora de ser autodidacta para conseguir conocimiento mediante la búsqueda de información, debido que se deben implementar métodos algo complejos al poder lograr que el juego pueda ejecutarse en Red.

Planteamiento del problema

Técnicas de Programación III es una materia del cuarto semestre, proyecto de carrera Ingeniería en Informática en la UNEG. La profesora Jannelly Bello propuso a los estudiantes del curso como proyecto desarrollar el juego J-uno utilizando conceptos de la programación orientada a objetos y habilidades para la aplicación de modelos de procesos de software. Uno es un juego de cartas que fue desarrollado en los años 70 por Merle Robbins.  Los derechos fueron comprados por International Games y actualmente es Mattel el encargado de producir y distribuir el juego. El objetivo del juego es ser el primero en lograr 500 puntos. Los puntos se logran al deshacerse de las cartas de la mano antes que los oponentes. El jugador logra puntos con las cartas que el oponente no pudo descartar. El número de participantes es de mínimo 2 personas, máximo 10. El juego está conformado por 108 cartas.

Objetivos Generales

  1. Desarrollar habilidades para la aplicación de conocimientos en la programación orientada a objetos.

  2. Crear el juego J-UNO en Java bajo el IDE Netbeans 7.0.

Diseño de Solución

Cabe destacar que un juego consta de reglas que se deben tomar en cuenta al momento de jugar, en este caso las reglas y consideraciones serán tomadas como condiciones para desarrollar una solución informática en el juego descrito, analizando el diseño e implementación de cada uno de los módulos.

  1. Modulo Gestión Usuario permite administrar la información de los distintos usuarios de j-UNO. Datos a registrar por usuario: Nombre, Apellido, Nickname (campo único por usuario), email, imagen asociada, clave. Es posible modificar la información del usuario excepto el nickname. Un usuario puede dar de baja su cuenta temporalmente, con la posibilidad de reactivarla en otra oportunidad.

  2. Módulo Crear Partida un usuario puede crear partida en j-UNO. Para ello debe indicar cantidad de usuarios con los que se quiere jugar. (min 2- max 4). El sistema de manera aleatoria genera partida con la cantidad de jugadores indicados. El usuario podrá colocarles nombres a dichos jugadores e imagen que los identifique en la partida. Adicionalmente el usuario indicara modalidad de partida que puede ser de dos maneras:

    • Partida Rápida: Se gana cuando un jugador quede sin cartas.

    • Partida Acumulativa: Se gana cuando un jugador acumule cierta cantidad de puntos, en este caso se le indica al usuario que indique la puntuación mínima acumulada para ganar. Un usuario podrá abandonar una partida en cualquier momento.

  3. Módulo De Estadísticas el j-UNO debe generar estadísticas para cada usuario (registrado o generado aleatoriamente) que haya jugado partida, considerando: Cantidad de partidas jugadas, Cantidad de partidas ganadas, cantidad de partidas perdidas, cantidad de partidas abandonadas y posición en que ocupa en el ranking de jugadores (considerando partidas ganadas).

  4. Módulo De Almacenamiento De Datos modulo que se encarga del almacenamiento y carga de datos generados por j-uno. Para ello es indispensable el uso de archivos XML.  La estructura y cantidad de archivos serán definidos por el equipo.

Diccionario de casos de uso

Nombre Caso de uso

Descripción

Administrar Cuenta

Permite al usuario administrar su cuenta, ya sea, creándose una cuenta nueva, accediendo a una cuenta ya creada, recuperando el acceso a su cuenta, modificando los datos asociados a su cuenta, consultando los datos asociados a su cuenta y cerrando temporalmente su cuenta.

Registrar nueva cuenta

Permite al usuario crear una cuenta nueva en el sistema con la cual accederá al mismo cuando lo desee.

Acceder a cuenta

Permite al usuario ingresar al sistema a través de su cuenta.

Recuperar cuenta

En caso de que el usuario haya olvidado su contraseña esta será enviada al email que él ingreso cuando registró su cuenta.

Modificar datos

Permite al usuario modificar los datos asociados a su cuenta, a excepción del Nickname y las estadísticas de juego.

Consultar datos

Permite al usuario consultar los datos asociados a su cuenta, a excepción de la contraseña.

Cerrar cuenta

Permite al usuario proteger su cuenta para que los datos asociados a la misma no sean modificados.

Jugar

Permite al usuario gestionar el inicio de una partida, ya sea como anfitrión o como invitado y ver el ranking de jugadores.

Ver Ranking

Permite al usuario ver la lista de los mejores jugadores ordenados por la cantidad de partidas ganadas.

Crear partida

Permite al usuario crear una partida en red LAN, siendo este el anfitrión de la misma y por ende establece ciertas reglas.

Unirse a partida

Permite al usuario unirse como invitado a una partida ya creada en red LAN.

Configurar Juego

Permite al anfitrión establecer el tipo de juego que se llevará a cabo (Acumulativo o Rápido), el máximo de puntos (de ser necesario) y la cantidad de jugadores que participarán en el juego.

Iniciar partida

Permite al usuario indicarle al sistema que ya se encuentra listo para empezar a jugar.

Ejecutar Turno

Permite al jugador elegir la acción que desea llevar a cabo durante su turno.

Tirar Carta

Permite al jugador descartar una carta de su mano y colocarla en la pila de descarte.

Decir UNO

Permite al jugador protegerse de cualquier sorpresa por parte de los otros jugadores y de este modo evitar un posible castigo.

Sorprender

Permite al jugador sorprender a otro jugador que se le haya olvidado decir UNO y de este modo hacer que se le aplique un castigo.

Robar Carta

Permite al jugador tomar una carta de la pila de robo y colocarla en su mano.

Desafiar

Permite al jugador someter a prueba el uso ilegal de una carta Comodín Toma Cuatro, por parte del jugador anterior.

Abandonar Partida

Permite al jugador abandonar la partida que se encuentre jugando y regresar a la sala de jugadores.

Aplicar Reglas/Castigos

En este caso al ser un juego que se desarrolla en un computador, el mismo juego se convierte en la máxima autoridad dentro de sí mismo, ya que es él quien se encarga de hacer cumplir las reglas y aplicar los castigos correspondientes.

Elegir Primer Jugador

Permite al juego seleccionar de forma aleatoria al jugador que comenzará con la partida.

Actualizar secuencia

Permite al juego modificar el orden que tienen los jugadores para jugar, en caso de que este sea alterado por una carta Reversa.

Verificar desafío

Permite al juego determinar qué jugador gana el desafío en caso de que se presente uno y de esta forma aplicar el castigo al perdedor.

Aplicar castigo

Permite al juego aplicar un castigo a un jugador en caso de que sea necesario.

Verificar ganador

Permite al juego determinar si ya hay un ganador, ya sea porque se quedó sin cartas o porque abandonaron los demás jugadores y de esta forma detener el juego.

Actualizar estadísticas

Permite al juego modificar las estadísticas de todos los jugadores involucrados en la partida.

Finalizar juego

Permite al juego dar por terminada una partida.

 

Diagramas de casos de uso (Ver Informe en los Enlaces)

 

Diccionario de Clases

Nombre Clase

Descripción

Cliente

Clase que representa un cliente el cual intercambiará datos con un servidor.

Usuario

Clase que representa a un usuario el cual podrá interactuar con el sistema a través de su cuenta, ya sea como un jugador durante el juego, el cual puede seleccionar la acción que desee ejecutar durante su turno o simplemente interactuar con las ventanas.

ListaJugadores

Clase que representa la lista de jugadores que participan en el juego.

Login

Clase que representa una ventana en la que un usuario puede gestionar su acceso al sistema o consultar ayuda.

Sala

Clase que representa una ventana a través de la cual un usuario puede gestionar su cuenta o gestionar el inicio de una partida.

Creacion

Clase que representa una ventana a través de la cual un anfitrión puede configurar el juego.

ConexionMYSQL

Clase que permite la conexión a la base de datos, en la cual están alojados los datos de los usuarios registrados en el sistema.

Registro

Clase que representa un formulario en el cual un usuario ingresará sus datos para registrarse en el sistema.

Carta

Clase abstracta que servirá de base para la creación de los dos tipos de cartas necesarios para el desarrollo del juego (Normales y Especiales).

CartaNormal

Clase que representa una carta normal es decir, además posee un número.

CartaEspecial

Clase que representa una carta especial, es decir, adicionalmente posee un nombre y una acción.

ListaCartas

Clase que representa una lista de cartas bien sea de un jugador, de la pila de robo o de la pila de descarte.

PilaRobo

Clase que representa la pila de robo, es decir, de esta pila los jugadores tomarán cartas cuando sea necesario.

PilaDescarte

Clase que representa la pila de descarte, es decir, en esta pila los jugadores colocarán las cartas que descarten de su mano.

Servidor

Clase que representa el servidor que alojara a los clientes e intercambiará datos con ellos.

Juego

 

Clase que representa la máxima autoridad dentro del juego, la cual se encarga de aplicar las reglas y castigos.

Email

Clase que permite enviar correos electrónicos a los usuarios, como puede ser el envío de una clave temporal en caso de que olvidara su clave.

Imagen

Clase que permite codificar una imagen en una cadena de caracteres y decodificar una cadena de caracteres en una imagen.

Sonido

Clase que permite reproducir sonidos de fondo.

XML

Clase que permite el manejo de archivos .xml ya sea creándolos, leyéndolos, escribiendo en ellos etc.

Ranking

Clase que permite gestionar y visualizar las posiciones de los mejores jugadores, tomando como criterio de ordenamiento las partidas ganadas.

Tablero

Clase que permite visualizar y manipular los elementos de la partida, como la pila de robo, pila de descarte, las cartas del jugador, en fin interactuar con el juego y con los demás jugadores.

 

Diagrama de Clases (Ver Informe en los Enlaces)

 

Diagrama de Colaboración (Ver Informe en los Enlaces)

 

Diagrama de Secuencia (Ver Informe en los Enlaces)

 

Diseño de interfaz

  • Login: Pantalla que permite al usuario consultar ayuda, registrarse en el sistema, recuperar el acceso a su cuenta y acceder al sistema ingresando su Nickname y su contraseña a través de su cuenta. El acceso a esta pantalla se realiza de forma automática al iniciar el sistema.

  • Registro: Pantalla que permite al usuario ingresar los datos correspondientes para registrarse en el sistema. El acceso a esta pantalla se realiza cuando el usuario elige Registrarse en Login.

  • Sala: Pantalla que permite al usuario crear una partida, consultar los datos asociados a su cuenta, modificar los datos asociados a su cuenta, ver el ranking de jugadores, cerrar temporalmente su cuenta, y unirse a una partida ingresando el ip del servidor donde se encuentra la partida creada a la cual desea unirse. El acceso a esta pantalla se realiza cuando el usuario ingresa al sistema o termina una partida.

  • Creación: Pantalla que permite al usuario establecer el tipo de juego que se llevará a cabo, el máximo de puntos (de ser necesario) y la cantidad de jugadores que participarán en él. El acceso a esta pantalla se realiza cuando el usuario elige Crear Partida en Sala.

  • Tablero: Pantalla sobre la cual se desarrollará el juego, en ella se muestra el Nickname de cada jugador, su imagen asociada a su cuenta, el número de cartas que le quedan, las acciones que puede ejecutar un jugador durante su turno y la secuencia de jugadores.