sql >> Base de Datos >  >> RDS >> Database

Los secretos del dominó o un modelo de datos del juego de dominó

Los juegos de mesa como el dominó siguen siendo muy populares. Echemos un vistazo a las fichas de dominó desde el punto de vista del modelado de datos.

El juego de dominó existe desde hace cientos de años y se juega en todo el mundo. Como era de esperar, ¡esto significa muchas variaciones en el juego! En este artículo, vamos a examinar un modelo de datos que podría admitir las variantes más comunes:dibujar y bloquear. Los conceptos básicos de estas dos variantes son casi los mismos; solo hay ligeras diferencias en las reglas. Dos o más jugadores pueden jugar al dominó, por lo que nuestro modelo de datos admitirá varios jugadores.

Comencemos con algunos conceptos básicos del juego de dominó, luego pasaremos al modelo de datos.

¿Qué debemos saber sobre el dominó?

  • Un juego de dominó contiene 28 piezas de juego, que se llaman "huesos" o "fichas". Son rectangulares, con una línea en el centro que divide cada mosaico en dos extremos cuadrados (o caras).
  • Cada extremo tiene una cantidad de puntos que van del 0 al 6. Estos puntos se denominan "pips".
  • Las fichas con los mismos valores en ambos extremos se denominan "dobles", p. un doble seis tiene seis puntos en cada extremo.
  • La colección de fichas de dominó en la superficie de juego se denomina línea de juego. Los extremos de la línea de juego se denominan esquinas de rama. Esquinas de las ramas es donde los jugadores pueden jugar fichas nuevas.

Comenzar un juego

  • Todas las fichas se colocan boca abajo sobre una mesa.
  • Si hay 2 o 3 jugadores, cada jugador roba 7 fichas. Si hay 4-5 jugadores, cada jugador roba 5 fichas. Las fichas restantes se dejan en una pila llamada "cementerio".
  • El jugador con el doble más alto obtiene el primer movimiento. El juego generalmente se mueve en el sentido de las agujas del reloj.
  • Para jugar al dominó, un jugador coloca una ficha junto a otra que ya se ha colocado sobre la mesa. Los extremos de las fichas deben coincidir, es decir, un extremo de dos pepitas solo se puede colocar junto a otro extremo de dos pepitas. (Nota:algunas variantes del juego tienen reglas diferentes con respecto a las coincidencias).

Reglas del juego

  • El primer jugador coloca el doble más alto boca arriba sobre la mesa.
  • El siguiente jugador debe jugar un dominó que coincida con el dominó colocado anteriormente.
  • Un jugador que no puede coincidir con ninguno de los extremos de la formación debe "golpear" o "pasar". En un juego de bloques, esto simplemente significa que el juego pasa al siguiente jugador. En un juego de sorteo, los jugadores deben sacar fichas del cementerio hasta que encuentren una ficha jugable. Si el cementerio está vacío, el juego simplemente pasa a la siguiente persona. Algunas variantes del juego de sorteo limitan la cantidad de fichas que un jugador debe robar, es decir, hasta 3 fichas. Si el jugador saca el número especificado de fichas y no obtiene una coincidencia, el juego pasa a la siguiente persona.
  • La línea de juego tiene dos o más ramas (extremos jugables) en cualquier momento. Los jugadores pueden jugar en cualquier rama que tenga el mismo número de pips que una de sus fichas. Los dobles se colocan en ángulo recto con respecto a todas las demás fichas. (Nota:algunas variantes tienen reglas diferentes sobre la línea de juego).

Ganar un juego de dominó

  • En un juego de sorteo, el primer jugador en jugar todas sus fichas gana. El juego puede (o no) continuar hasta que ambos extremos de la línea de juego estén bloqueados y no queden más fichas de dominó en el cementerio.
  • En un juego de bloques, el jugador con la menor cantidad de fichas gana cuando los extremos están bloqueados y a nadie le quedan fichas jugables.

Puntuación

En un juego de empate, la suma de los puntos en las fichas de dominó restantes de los perdedores es la puntuación del ganador. En un juego de bloques, gana la persona con la suma más baja de pips sobrantes; este jugador resta su suma de la suma de su oponente; la diferencia es la puntuación del ganador. Nota:en algunos juegos, los jugadores deben alcanzar una puntuación mínima para ganar.

El modelo de datos de dominó

El modelo de datos de dominó consta de dos áreas temáticas:

  • “Entities: players, dominoes and games” y
  • “Game progress and tracking”

Discutiremos cada área temática en el orden en que se enumeran.




Área temática 1:jugadores, dominó y juegos

Esta área temática contiene lo que podemos llamar las entidades principales de un juego de dominó:los jugadores, las fichas de dominó y el juego.

La tabla de "jugadores" contiene detalles de perfil para todos los jugadores individuales. Las columnas de esta tabla son:

  • id –Una identificación única para cada jugador.
  • player_name – El nombre y apellido del jugador.

Las siguientes columnas de esta tabla almacenan las estadísticas de juego de cada jugador:

  • num_block_game_played – El número de juegos de bloque que ha jugado ese jugador.
  • num_draw_game_played – El número de juegos de sorteo que ha jugado ese jugador.
  • num_block_game_win – El número de juegos de bloque ganados por el jugador.
  • num_draw_game_win – El número de juegos de sorteo ganados por el jugador.
  • highest_block_score – La puntuación más alta del jugador en un juego de bloques.
  • highest_draw_score – La puntuación más alta del jugador en un juego de empate.

El “bone La tabla contiene información sobre las propias fichas de dominó. Las columnas de esta tabla son:

  • id – Una clave única para cada ficha. Esta clave será referenciada por otras tablas.
  • first_face_value – El número de puntos en la primera cara (final).
  • second_face_value – El número de puntos en la segunda cara (final).

El “game La tabla ” almacena información sobre los juegos. Las columnas de esta tabla son:

  • id – La clave principal de esta tabla; identifica de forma única cada juego.
  • game_variant – La variante jugada, es decir, "bloquear" o "empatar".
  • score_to_win – La puntuación mínima necesaria para ganar un juego.
  • num_round_complete – El número de rondas jugadas en ese juego. Cada juego suele contener varias rondas y dura hasta que alguien logra la puntuación ganadora.

El “player_in_game La tabla nos dice qué jugadores participan en un juego. Además del player_id , esta tabla contiene sus puntajes actuales en el player_curr_score columna. Cuando un jugador gana, se coloca una "Y" en is_winner columna. Dado que más de un jugador puede ganar un juego, registraremos este detalle aquí en lugar de en el "game " mesa.

Área temática 2:Progreso y seguimiento del juego

Como sabe cualquier jugador de dominó, la acción real del juego se compone de sus manos, rondas y movimientos:los pequeños detalles que hacen o deshacen un juego. Esta área temática se encargará de esos detalles.

Un juego generalmente requiere múltiples rondas. Para cada ronda, se distribuye una cantidad de fichas a cada jugador. Llamemos a esta distribución de fichas una “mano”. Cada vez que comienza una ronda, cada jugador tiene una mano de fichas que puede jugar. (Nota:en algunos juegos de sorteo, la cantidad de fichas en cada mano puede exceder las siete).

El “round La tabla ” almacena detalles de cada ronda. Esto incluye una instantánea del estado actual del juego, p. valores de mosaico actuales en las esquinas de las ramas. Las columnas de esta tabla son:

  • id – Un número único asignado a cada ronda.
  • game_id – Hace referencia al “game ” mesa e indica el juego al que pertenece la ronda.
  • left_branch_value – Mantiene el valor de la izquierda esquina de la rama. Cualquier ficha con un valor coincidente (número de pips) se puede jugar en el siguiente movimiento.
  • right_branch_value – Mantiene el valor del derecho esquina de la rama. Cualquier ficha con un valor coincidente (número de pips) se puede jugar en el siguiente movimiento.
  • curr_num_tiles_boneyard – El número de fichas en el cementerio en un momento dado. El valor de esta columna se reducirá en uno cada vez que un jugador saque una ficha. Esta columna es útil durante los juegos de sorteo.

La “hand La tabla ” registra todas las fichas en las manos de los jugadores durante una ronda. Las columnas de esta tabla son:

  • id – La clave principal de esta tabla.
  • round_id – Hace referencia al “round ” e indica la ronda correspondiente.
  • player_id – Hace referencia al “player ” mesa e indica el jugador relevante.
  • bone_id – Hace referencia al “bone ” e indica qué fichas tiene/tenía el jugador en su mano.
  • is_played – Si se ha jugado una ficha. Inicialmente, esta columna será nula. Se completará con 'Y' solo cuando se juegue un mosaico. La misma ficha no se puede jugar dos veces en una ronda.
  • is_fetched –Una 'Y' en esta columna significa que se han robado fichas en un movimiento. Útil para juegos de sorteo.

El “move La tabla ” registra la secuencia de movimientos para cada ficha jugada en una ronda. Las columnas de esta tabla son:

  • id – Identifica de forma única cada movimiento en una ronda.
  • round_id – Hace referencia al “round ” e indica la ronda correspondiente.
  • move_type – El tipo de movimiento, es decir, pasar (P), dibujar (D) o colocar (L).
  • hand_id – Hace referencia a la “hand ” e indica qué jugador está haciendo el movimiento.
  • branch_played_at – Significa la rama (izquierda o derecha) donde se realiza el movimiento. Esta columna solo se completará en caso de un movimiento de 'recostarse'.
  • move_sequence – Esta columna de números comienza con 1 y se incrementa en uno después de cada movimiento.

El “player_round_score La tabla almacena las puntuaciones de los jugadores individuales para cada ronda. Esta tabla tiene una clave principal compuesta formada por game_id , player_id y round_id columnas El game_id y player_id se hace referencia a las columnas desde el "player_in_game " mesa.

¿Qué agregaría al modelo de datos de Domino?

Tren básico, Tren mexicano, Pata de pollo, Bendomino, Chipre, Cruz de Malta, Matador, Spinner:¡estas son solo algunas de las muchas variantes de dominó! ¿Qué crees que se necesitaría para extender este modelo para acomodar esos juegos? ¿Qué cambiarías o añadirías al modelo básico? ¡Cuéntanos en la sección de comentarios a continuación!