Crea Cartones de Bingo automáticamente en Java

Hola a todos, hoy os voy a explicar como podemos generar un cartón de bingo con Java.

Seguro que alguna vez has jugado al bingo en tu vida, tenemos unos cartones con una serie de números y de huecos, pero ¿Cómo podríamos generarlos? Vamos a verlo.

Formato y reglas de un cartón de bingo

El cartón de bingo tiene unas reglas especificas que se deben cumplir:

  • Cada fila tiene 5 números y 4 huecos vacíos.
  • Cada columna tiene 1 número y 2 huecos o 2 números y 1 hueco vacío.
  • Las columnas están ordenadas de menor a mayor, siendo el menor el que mas arriba este.
  • Cada columna tiene un rango de números:
    • Columna 1: 1-9
    • Columna 2: 10-19
    • Columna 3: 20-29
    • Columna 4: 30-39
    • Columna 5: 40-49
    • Columna 6: 50-59
    • Columna 7: 60-69
    • Columna 8: 70-79
    • Columna 9: 80-90

Analiza esta foto y comprueba que se cumple todo lo anterior:

carton bingo java

Te dejo un PDF con más ejemplos.

Pasos a realizar para crear un cartón de bingo

¿Cómo lo representamos? El cartón de bingo lo vamos a representar como una matriz de números de 3 filas y 9 columnas. Los huecos los representaremos como un -1.

Tenemos una serie de pasos que tenemos que realizar para generarlo:

  1. Rellenar nuestra matriz de números.
  2. Ordenar números por cada columna.
  3. Poner los huecos.
  4. Mostrar el cartón, sustituyendo -1 por el carácter deseado.

Seguramente, te estés preguntado que porque no marco los huecos antes de rellenar todo si luego lo voy a sustituir por -1, la razón es simple, por la ordenación de columnas, ya que puede afectar a la ordenación, se puede hacer, pero implica más código.

Código base para nuestro cartón de bingo

Para cada paso, utilizaremos una función pero tendremos un código inicial que es este:

Si te interesa saber más como generar números aleatorios lo puedes ver en este tutorial:

Como generar números aleatorios con el método Math.random de Java

Rellenar números de nuestro cartón de bingo

Nuestro primer paso, será rellenar la matriz de números aleatorios, este seria el código para rellenar los números:

Ordenar números por cada columna de nuestro cartón de bingo

El siguiente paso es ordenar cada una de las columnas. Este es el código:

Poner los huecos en nuestro cartón

Esta parte es la más difícil de todas, ya que hay ciertas cosas que debemos tener en cuenta.

Lo primero que podemos pensar, es que si ponemos aleatoriamente los huecos en cada fila ya estaría, el problema de esto es que es muy probable es que se queden columnas sin huecos o que se repartan mal los huecos.

Mi consejo es generar grupos de huecos por cada columna, habiendo 6 grupos de 1 hueco vacío y 3 grupos de 2 huecos vacíos, revisa la foto del inicio y veras que se cumple. Por lo que cuando estemos en una columna que tenga dos huecos, recorreremos de nuevo la columna.

La estrategia es la siguiente, debemos «nivelar» el numero de huecos, es decir, si tenemos 3 huecos en la fila 0 y 1 y en la fila 2 hay 2 huecos, debemos darle prioridad a este ultimo, para que estén nivelados. En caso de empate, elegiremos un hueco al azar. Tendremos un array para indicar si una posición de la columna esta o no disponible para poner un hueco vacio.

Resumen

  1. Generar un array con 6 unos y 3 doses.
  2. Recorrer las columnas.
  3. Marcar todos los huecos disponibles.
  4. Comprobar si el numero de huecos vacíos son iguales.
  5. Sino son iguales, buscamos la fila con menores huecos e indicamos que el resto no están disponibles.
  6. Coloco el hueco vacío en una posición aleatoria disponible.
  7. Si es una columna en la que tengo que poner 2 huecos vacíos, compruebo el numero de posiciones ocupadas y si es menor que 2, restamos en uno el índice de la columna para que vuelva a hacer todo el proceso.
  8. Volvemos al paso 3.

Te muestro el código explicado paso a paso:

Mostrar el cartón

Y ya por fin, el último paso que es mostrar nuestro cartón. Recuerda que los huecos los hemos marcado como -1, este es el código:

Resultado

El código final es el siguiente:

Veamos algunos ejemplos:

carton bingo java 2 carton bingo java 3 carton bingo java 4

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

Compartir

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


Warning: Trying to access array offset on value of type null in /home2/discodur/public_html/discoduroderoer/wp-content/themes/disto/single.php on line 539