Database
 sql >> Base de données >  >> RDS >> Database

Les secrets des dominos, ou un modèle de données de jeu Domino

Les jeux de société comme les dominos sont toujours très populaires. Examinons les dominos du point de vue de la modélisation des données.

Le jeu de dominos existe depuis des centaines d'années et se joue partout dans le monde. Comme vous vous en doutez, cela signifie beaucoup de variations dans le jeu ! Dans cet article, nous allons examiner un modèle de données qui pourrait prendre en charge les variantes les plus courantes - dessiner et bloquer. Les bases de ces deux variantes sont presque les mêmes; il y a juste de légères différences dans les règles. Les dominos peuvent être joués par deux joueurs ou plus, donc notre modèle de données prendra en charge plusieurs joueurs.

Commençons par quelques bases du jeu de dominos, puis nous passerons au modèle de données.

Que devons-nous savoir sur les dominos ?

  • Un jeu de dominos contient 28 pièces de jeu, appelées "os" ou "tuiles". Ils sont rectangulaires, avec une ligne au centre qui divise chaque tuile en deux extrémités carrées (ou faces).
  • Chaque extrémité a un nombre de points allant de 0 à 6. Ces points sont appelés "pips".
  • Les tuiles avec les mêmes valeurs aux deux extrémités sont appelées "doubles", par ex. un double-six a six points à chaque extrémité.
  • La collection de dominos sur la surface de jeu s'appelle la ligne de jeu. Les extrémités de la ligne de jeu sont appelées coins de branche. Coins des branches sont les endroits où les joueurs peuvent jouer de nouvelles tuiles.

Démarrer une partie

  • Toutes les tuiles sont placées face cachée sur une table.
  • S'il y a 2-3 joueurs, chaque joueur pioche 7 tuiles. S'il y a 4-5 joueurs, chaque joueur pioche 5 tuiles. Les tuiles restantes sont laissées dans une pile appelée le "ossuaire".
  • Le joueur avec le double le plus élevé obtient le premier coup. Le jeu se déroule généralement dans le sens des aiguilles d'une montre.
  • Pour jouer un domino, un joueur pose une tuile à côté d'une tuile qui a déjà été posée sur la table. Les extrémités des tuiles doivent correspondre, c'est-à-dire qu'une extrémité à deux points ne peut être placée qu'à côté d'une autre extrémité à deux points. (Remarque :Certaines variantes de jeu ont des règles différentes concernant la correspondance.)

Règles du jeu

  • Le premier joueur pose le plus haut double face visible sur la table.
  • Le joueur suivant doit jouer un domino qui correspond au domino posé précédemment.
  • Un joueur qui ne peut correspondre à aucune des extrémités de la formation doit "frapper" ou "passer". Dans un jeu de blocs, cela signifie simplement que le jeu passe au joueur suivant. Dans un jeu de tirage, les joueurs doivent tirer des tuiles du cimetière jusqu'à ce qu'ils trouvent une tuile jouable. Si le boneyard est vide, le jeu passe simplement à la personne suivante. Certaines variantes du jeu de tirage limitent le nombre de tuiles qu'un joueur doit piocher, c'est-à-dire jusqu'à 3 tuiles. Si le joueur pioche le nombre de tuiles spécifié et n'obtient pas de correspondance, le jeu passe à la personne suivante.
  • La ligne de jeu a deux branches ou plus (extrémités jouables) à tout moment. Les joueurs peuvent jouer sur n'importe quelle branche qui a le même nombre de pépins qu'une de leurs tuiles. Les doubles sont placés à angle droit par rapport à toutes les autres tuiles. (Remarque :certaines variantes ont des règles différentes concernant la ligne de jeu.)

Gagner une partie de dominos

  • Dans un jeu de tirage, le premier joueur à jouer toutes ses tuiles gagne. Le jeu peut (ou non) continuer jusqu'à ce que les deux extrémités de la ligne de jeu soient bloquées et qu'il ne reste plus de dominos dans le boneyard.
  • Dans un jeu de blocs, le joueur avec le moins de tuiles gagne lorsque les extrémités sont bloquées et qu'il ne reste plus de tuiles jouables.

Score

Dans un jeu de tirage, la somme des pips sur les dominos restants des perdants est le score du gagnant. Dans un jeu de blocs, la personne avec la plus petite somme de pips restants gagne; ce joueur soustrait sa somme à la somme de son adversaire ; la différence est le score du gagnant. Remarque :dans certains jeux, les joueurs doivent atteindre un score minimum pour gagner.

Le modèle de données des dominos

Le modèle de données des dominos se compose de deux domaines :

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

Nous aborderons chaque domaine dans l'ordre dans lequel il est répertorié.




Domaine 1 :joueurs, dominos et jeux

Ce domaine contient ce que l'on peut appeler les principales entités d'un jeu de dominos :les joueurs, les dominos et le jeu.

Le tableau "joueur" contient les détails du profil de tous les joueurs individuels. Les colonnes de ce tableau sont :

  • id –Un identifiant unique pour chaque joueur.
  • player_name – Le prénom et le nom du joueur.

Les colonnes suivantes de ce tableau stockent les statistiques de jeu de chaque joueur :

  • num_block_game_played – Le nombre de jeux de blocs auxquels le joueur a joué.
  • num_draw_game_played – Le nombre de matchs nuls auxquels le joueur a joué.
  • num_block_game_win – Le nombre de jeux de blocs gagnés par le joueur.
  • num_draw_game_win – Le nombre de matchs nuls gagnés par le joueur.
  • highest_block_score – Le score le plus élevé du joueur dans un jeu de bloc.
  • highest_draw_score – Le score le plus élevé jamais atteint par le joueur dans un match nul.

Le "bone ” Le tableau contient des informations sur les tuiles dominos elles-mêmes. Les colonnes de ce tableau sont :

  • id – Une clé unique pour chaque tuile. Cette clé sera référencée par d'autres tables.
  • first_face_value – Le nombre de points sur la première face (fin).
  • second_face_value – Le nombre de points sur la seconde face (fin).

Le "game ” table stocke des informations sur les jeux. Les colonnes de ce tableau sont :

  • id – La clé primaire de cette table; il identifie chaque jeu de manière unique.
  • game_variant – La variante jouée, c'est-à-dire "bloquer" ou "nul".
  • score_to_win – Le score minimum requis pour gagner une partie.
  • num_round_complete – Le nombre de tours joués dans ce jeu. Chaque jeu contient généralement plusieurs tours et dure jusqu'à ce que quelqu'un atteigne le score gagnant.

Le "player_in_game ” Le tableau nous indique quels joueurs participent à une partie. Outre le player_id , ce tableau contient leurs scores actuels dans le player_curr_score colonne. Lorsqu'un joueur gagne, un "Y" est placé dans le is_winner colonne. Étant donné que plusieurs joueurs peuvent gagner un jeu, nous enregistrerons ce détail ici plutôt que dans le "game " table.

Domaine 2 :progression et suivi du jeu

Comme tout joueur de dominos le sait, l'action réelle du jeu est composée de ses mains, de ses tours et de ses mouvements - les petits détails qui font ou défont un jeu. Ce domaine traitera ces détails.

Un jeu nécessite généralement plusieurs tours. Pour chaque tour, un certain nombre de tuiles sont distribuées à chaque joueur. Appelons cette distribution de tuiles une "main". Chaque fois qu'un tour commence, chaque joueur a une main de tuiles qu'il peut jouer. (Remarque :dans certains jeux de tirage, le nombre de tuiles dans chaque main peut dépasser sept.)

Le "round ” Le tableau stocke les détails de chaque tour. Cela inclut un instantané de l'état actuel du jeu, par ex. les valeurs de mosaïque actuelles dans les coins des branches. Les colonnes de ce tableau sont :

  • id – Un numéro unique attribué à chaque manche.
  • game_id – Fait référence au "game ” tableau et indique le jeu auquel appartient ce tour.
  • left_branch_value – Contient la valeur de la gauche coin de branche. Toute tuile avec une valeur correspondante (nombre de pips) peut être jouée au coup suivant.
  • right_branch_value – Contient la valeur de la droite coin de branche. Toute tuile avec une valeur correspondante (nombre de pips) peut être jouée au coup suivant.
  • curr_num_tiles_boneyard – Le nombre de tuiles dans le boneyard à un moment donné. Cette valeur de colonne sera réduite de un à chaque fois qu'un joueur pioche une tuile. Cette colonne est utile lors des jeux de tirage.

La « hand ” table enregistre toutes les tuiles dans les mains des joueurs au cours d'un tour. Les colonnes de ce tableau sont :

  • id – La clé primaire de cette table.
  • round_id – Fait référence au "round ” tableau et indique le tour concerné.
  • player_id – Fait référence au "player ” tableau et indique le joueur concerné.
  • bone_id – Fait référence au "bone ” et indique les tuiles que le joueur a/avait dans sa main.
  • is_played – Si une tuile a été jouée. Initialement, cette colonne sera nulle. Il sera peuplé de « Y » uniquement lorsqu'une tuile est jouée. La même tuile ne peut pas être jouée deux fois dans un tour.
  • is_fetched –Un « Y » dans cette colonne signifie que les tuiles ont été piochées en un coup. Utile pour les jeux de tirage.

Le "move ” Le tableau enregistre la séquence de coups pour chaque tuile jouée dans un tour. Les colonnes de ce tableau sont :

  • id - Identifie de manière unique chaque mouvement dans un tour.
  • round_id – Fait référence au "round ” tableau et indique le tour concerné.
  • move_type – Le type de mouvement, c'est-à-dire passe (P), match nul (D) ou couché (L).
  • hand_id – Fait référence à la "hand ” tableau et indique quel joueur effectue le coup.
  • branch_played_at – Signifie la branche (gauche ou droite) où le déplacement est effectué. Cette colonne ne sera renseignée qu'en cas de déménagement "calé".
  • move_sequence – Cette colonne de chiffres commence par 1 et est augmentée de un après chaque coup.

Le "player_round_score ” Le tableau stocke les scores des joueurs individuels pour chaque tour. Cette table a une clé primaire composite composée du game_id , player_id , et round_id Colonnes. Le game_id et player_id les colonnes sont référencées à partir du "player_in_game " table.

Qu'ajouteriez-vous au modèle de données Domino ?

Basic Train, Mexican Train, Chicken Foot, Bendomino, Cyprus, Maltese Cross, Matador, Spinner - ce ne sont là que quelques-unes des nombreuses variantes de dominos ! Que pensez-vous qu'il faudrait pour étendre ce modèle pour accueillir ces jeux ? Que changeriez-vous ou ajouteriez-vous au modèle de base ? Dites-le nous dans la section des commentaires ci-dessous !