Ruleta

Ruleta

El trabajo practico de este cuatrimestre se basa en el famoso juego de la Ruleta.Lo que vamos a modelar es una mesa de juego, los jugadores y las distintas apuestas que se hacen con su correspondiente pago.Para jugar a la ruleta un jugador se une a la mesa, cuando lo hace cambia dinero por fichas, esas fichas las apuesta colocandolas sobre el paño. Despues de cierto tiempo se hace jirar la ruleta hasta que sale el número ganador.

La banca paga a los ganadores y se queda con las fichas de los perdedores.

Y asi continúa el juego hasta que el jugador se retira de la mesa.

Aclaraciones antes de empezar

Vamos a simplificar algunas reglas del juego y a acotar algunas acciones, porque lo que nos importa es practicar interfaces gráficas y no hacer un juego 100% real.

Acuerdense que siempre vamos a preferir que haya mejores ideas de diseño a una interfaz mas estética con colores mas lindos y fondos mas vistosos.

El dominio

Vamos a tener una unica mesa de juego, en esa mesa es donde está la ruleta y a la que se incorporan los jugadores que quieren participar.

Para la mesa hay una cantidad maxima de jugadores, cuando un jugador se une a la mesa cambia una cantidad de dinero por fichas, tambien cada mesa cuenta con un pozo que es una cantidad de dinero con la cual paga. Vamos a considerar que cada ficha equivale a una unidad de su dinero y que todas las fichas se pueden usar para hacer cualquier apuesta.

Del jugador nos va a interesar la cantidad de dinero que tiene y la cantidad de fichas que tiene para apostar.

Las posibles apuestas que se pueden hacer son:

Pleno se apuesta una cantidad de fichas a un único número, en caso de resultar ganador la banca paga 36 fichas por cada una que se haya apostado.Par Impar se apuesta a alguna de las opciones posibles: par o impar. En caso de resultar ganador la banca paga 2 fichas por cada una apostada.Fila cada fila contiene 3 números consecutivos, el apostador 12 fichas por cada una apostada si sale cualquiera de los 3 numeros.Columna en cada columna hay 12 números, el apostador recibe 3 fichas por cada ficha apostada.

En todos los casos la ficha ganadora se devuelve al jugador. Por ejemplo si el jugador con el color rojo apuesta al numero 10 de forma plena una sola ficha y sale cuando paguen sus apuestas tendra 36 fichas nuevas + la que apostó.

Si la apuesta no resulta ganadora es la banca la que se queda con las fichas sobre la mesa.

Requerimientos

Codificar las clases Java necearias (con sus correspondientes tests) de forma que se pueda:

0: Modelar la situación

  1. Unir jugador a la mesa. El dinero que cambia el jugador es el 80% de lo que lleva.
  2. Permitir que un jugador apueste, en cualquiera de sus modalidades.
  3. Hacer girar la ruleta y que salga un número equiprobable entre el 0 y el 36.
  4. Pagar las apuestas hechas y recaudar el resto
  5. Se pide poder determinar
    1. si una apuesta resulto ganadora o no
    2. todas las apuestas que se hicieron en una mesa
    3. las apuestas en curso de una mesa(las que se estan haciendo pero aun no giro la ruleta para saber como resultaron)

TP 1: Interfaz con Arena

Se pide implementar una interfaz gráfica usando como framework de presentación Arena, de forma tal que permita:

NOTA: Las pantallas que se muestran a continuación son solo una forma de presentar la información. Sugerimos que empiecen con estos prototipos de pantalla y a partir de ellos los modifiquen a gusto

1. Unir a un jugador a una mesa con una determinada cantidad de dinero para gastar. Es obligatorio ingresar ambos datos y se debe tener en cuenta que el dinero debe de ser un numero mayor a cero. Ejemplo:

2. Visualizar el estado del tablero (las apuestas realizadas en cada casillero), asi como como el estado del jugador (cantidad de fichas que posee) y las acciones que se pueden realizar (Girar la ruleta, retirarse, apostar o cambiar fichas). Por ejemplo:

Viendo, notamos que esta pantalla propuesta quizas sea mas complicada de representar distintos tipos de apuestas, entonces les dejamos otra pantalla posible a modo de guia (recuerden que son solo sugerencias)

En el caso de que quieran que sea posible tener mas de un usario, una opcion podria ser:

3. Implementar las acciones que se pueden realizar.

3.1. Girar la ruleta (en el ejemplo No va mas!). Al hacer click se obtiene el numero ganador, luego de informado se debe permitir pargar las apuestas, una vez hecho esto se debe mostrar el nuevo estado del tablero y del jugador

3.2. Retirarse: permite a un jugador retirarse de la mesa y nos informa con cuanto dinero se retiró de la mesa.

3.3. Cambiar Fichas: permite ingresar un numero (entero positivo y menor o igual a la cantidad total de dinero que tiene el jugador) que sera la cantidad de fichas que cambiara para adicionar a las fichas que posee el jugador

3.4. Apostar: Permite crear las distintas apuestas y elegir la cantidad de fichas que se apostaran. En todos los casos la cantidad de fichas apostadas tiene que ser menor o igual a la cantidad de fichas que posee el jugador. Al momento de crear la apuesta se debe elegir que tipo de apuesta se va a crear.

Sugerencia: Para resolver el tp les sugerimos que el orden sea: 1 - 3.4 - 2 (solo con los datos y acciones de un jugador) - 3.2 - 3.3 - 2 (completo) - 3.1

Tp 2: Interfaz WEB

Usando las tecnologías web vistas durante la cursada (html, jsp, css, etc)

Se pide:

Mostrar una pantalla que permita:

  • Ver el nombre del jugador
  • Ver la cantidad de fichas que tiene el jugador
  • Visualizar la parte numérica del paño
  • Visualizar dentro de los casilleros las apuestas realizadas
  • Permitir girar la ruleta.
    • Cuando la ruleta gira se pagan las apuestas y el estado del paño pasa a estar vacio.
    • Se debe de informar el numero que salió (esto puede hacerse en otra pantalla o en la misma), pero luego de informar el numero debe de actualizarse la vista.
  • Permitir realizar una apuesta.
    • Se debe de poder indicar la cantidad de fichas y el numero por el que se apuesta (esto puede hacerse en otra pantalla).
    • Se debe de validar que el jugador no apueste mas de la cantidad de fichas que tiene.

Aclaraciones:

Para esta entrega solo nos importan las apuestas plenas y la parte numerica del paño (sin paridad, ni filas, ni columnas ,...). Tambien seguimos con nuestra idea de que hay un unico jugador.

Los puntos que se mencionan al principio son obligatorios para aprobar, los puntos que siguen es para pensar en una nota mas alta.

  • Realizar la apuesta seleccionando el casillero al hacer click sobre un casillero. Ayudita: miren el onclick ;)
  • Cuando se realiza una apuesta no refrescar toda la pantalla sino solamente el casillero sobre el que se apuesta y la cantidad de fichas del jugador.
  • Visualizar el paño completo.
  • Permitir realizar todos los tipos de apuestas y no solo las plenas.
  • Al realizar una apuesta mostrar el formlario que indica cantidad de fichas + los datos necesarios en una ventana modal.
  • Incorporar un modelo multijugador.

Tp 3: Interfaz WEB - Wicket

Utilizando el framework Wicket visto en la materia, se pide implementar el juego de la ruleta considerando un esquema multiusuario, es decir, varios usuarios que ingresan al juego y todos apuestan sobre la misma mesa.

La solucion debe cumplir con los siguientes requerimientos:

  • Permitir que un jugador se incorpore a la jugada actual de la ruleta.
  • Tener en cuenta que: La mesa es única y tiene una máxima cantidad de jugadores que pueden participar en ella, si la mesa ya está llena debe informar la situación y sugerir que intente nuevamente más tarde.
    • Cuando un jugador entra en la mesa indica su pseudónimo (que no puede coincidir con los que estan jugando en el momento) y la cantidad de dinero que va a jugar, si la mesa tiene lugar el usuario cambia fichas y puede empezar a apostar.
    • Una vez en la mesa de juego, se debe de poder visualizar el pseudónimo del jugador en todo momento.
  • Realizar apuestas (plenas, por paridad, fila o columna).
    • Para la realización de la apuesta se debe contar con una pantalla de acuerdo a lo definido en la sección Ventana para Apostar.
    • Se debe validar que el jugador cuente con la cantidad de fichas que desea apostar.
    • (Ver mas detalles abajo)
  • Visualizar el estado del tablero, es decir, por cada número las apuestas realizadas y el jugador que la hizo.
  • Girar la ruleta (ver mas detalles abajo)
  • Visualizar el resultado de la ultima tirada de la ruleta, mostrando el numero que salió y el resultado de las apuestas realizadas por el jugador.

Girar la ruleta

Cualquier jugador puede girar la ruleta, haciendo click en el boton de "Girar la ruleta". Luego de haceerlo, el jugador ve el resultado de la jugada, y el resto de los jugadores quedan imposibilitados de seguir apostando: sólo pueden ver los resultados de la jugada. Si cualquier otro usuario hace click en "Apostar" o en "Girar la ruleta" recibirá un mensaje indicando que esa jugada de la ruleta ya terminó y sólo puede ver los resultados.

Desde la pantalla de Resultados el jugador tiene la posibilidad de "Seguir Apostando". Al hacerlo el jugador se une a la jugada actual de ruleta, en la que todavía no se giro la ruleta.

Aclaraciones:

  • Puede haber varias jugadas de la ruleta, pero sólo una es la actual (porque no se giró la ruleta)
  • Al hacer click en el botón "Seguir Apostando" el jugador se une a la jugada abierta, después de que se gira la ruleta el primero que hace click en ese boton se une a una nueva jugada de la ruleta

Ventana para Apostar

En esta pantall el jugador podrá seleccionar el tipo de apuesta, a qué se apuesta y la cantidad de fichas.

Toda esa información se debe mostrar en una única pantalla similar a la siguiente:

Como se ve tenemos una dependencia entre los dos combos. En el primero se elije el tipo de apuesta y en el segundo a qué es lo que se apuesta; los valores de este segundo combo dependerán de lo que se haya seleccionado en el primero.

El detalle de las opciones es el siguiente:

Cada vez que se cambie el tipo de apuesta, el segundo combo deberá quedar en blanco.

Bonus!

Usar un Timer para refrescar el estado de la jugada (apuestas, numero resultado, etc), de forma que no sea necesario hacer click explícitamente para actualizar el estado. Para ello conviene mirar los Timers de Wicket. Aca hay un ejemplo de uso de los timers.