Database
 sql >> Base de Dados >  >> RDS >> Database

Os segredos do dominó, ou um modelo de dados de jogo de dominó


Jogos de tabuleiro como dominó ainda são muito populares. Vamos dar uma olhada no dominó do ponto de vista da modelagem de dados.

O jogo de dominó existe há centenas de anos e é jogado em todo o mundo. Como você pode esperar, isso significa muitas variações no jogo! Neste artigo, vamos examinar um modelo de dados que pode suportar as variantes mais comuns – desenhar e bloquear. O básico dessas duas variantes é quase o mesmo; há apenas pequenas diferenças nas regras. Os dominós podem ser jogados por dois ou mais jogadores, então nosso modelo de dados suportará vários jogadores.

Vamos começar com algumas noções básicas de jogabilidade de dominó, depois passaremos para o modelo de dados.

O que precisamos saber sobre dominó?

  • Um conjunto de dominó contém 28 peças de jogo, que são chamadas de 'ossos' ou 'ladrilhos'. Eles são retangulares, com uma linha no centro que divide cada ladrilho em duas extremidades quadradas (ou faces).
  • Cada extremidade tem um número de pontos que varia de 0 a 6. Esses pontos são chamados de "pips".
  • Ladrilhos com os mesmos valores em ambas as extremidades são chamados de 'duplos', por exemplo, um duplo seis tem seis pips em cada extremidade.
  • A coleção de dominós na superfície de jogo é chamada de linha de jogo. As extremidades da linha de jogo são chamadas de cantos de ramal. Cantos de ramificação são onde os jogadores podem jogar novas peças.

Iniciando um jogo

  • Todas as peças são colocadas viradas para baixo em uma mesa.
  • Se houver 2-3 jogadores, cada jogador compra 7 peças. Se houver 4-5 jogadores, cada jogador compra 5 peças. As peças restantes são deixadas em uma pilha chamada 'boneyard'.
  • O jogador com o dobro mais alto faz o primeiro movimento. O jogo geralmente se move no sentido horário.
  • Para jogar um dominó, um jogador coloca uma peça ao lado de uma peça que já foi colocada na mesa. As extremidades das peças devem coincidir, ou seja, uma extremidade de duas sementes só pode ser colocada ao lado de outra extremidade de duas sementes. (Observação:algumas variantes do jogo têm regras diferentes em relação à correspondência.)

Regras do jogo

  • O primeiro jogador coloca a face dupla mais alta na mesa.
  • O próximo jogador deve jogar um dominó que corresponda ao dominó colocado anteriormente.
  • Um jogador que não pode combinar com nenhuma das extremidades da formação deve “bater” ou “passar”. Em um jogo de blocos, isso significa simplesmente que o jogo passa para o próximo jogador. Em um jogo de empate, os jogadores devem retirar peças do cemitério até encontrarem uma peça jogável. Se o cemitério estiver vazio, o jogo simplesmente passa para a próxima pessoa. Algumas variantes do jogo de sorteio limitam o número de peças que um jogador deve desenhar, ou seja, até 3 peças. Se o jogador comprar o número especificado de peças e não conseguir uma partida, o jogo passa para a próxima pessoa.
  • A linha de jogo tem duas ou mais ramificações (finais jogáveis) a qualquer momento. Os jogadores podem jogar em qualquer ramo que tenha o mesmo número de pips que uma de suas peças. Duplas são colocadas em ângulo reto com todas as outras peças. (Observação:algumas variantes têm regras diferentes sobre a linha de jogo.)

Vencendo um jogo de dominó

  • Em um jogo de empate, o primeiro jogador a jogar todas as suas peças vence. O jogo pode (ou não) continuar até que ambas as extremidades da linha de jogo sejam bloqueadas e não haja mais peças de dominó no cemitério.
  • Em um jogo de blocos, o jogador com menos peças vence quando as extremidades estão bloqueadas e não há mais peças jogáveis.

Pontuação

Em um jogo de empate, a soma dos pips nos dominós restantes dos perdedores é a pontuação do vencedor. Em um jogo de blocos, a pessoa com a menor soma de pips restantes ganha; este jogador subtrai sua soma da soma de seu oponente; a diferença é a pontuação do vencedor. Nota:Em alguns jogos, os jogadores devem atingir uma pontuação mínima para ganhar.

O modelo de dados do dominó


O modelo de dados dominó consiste em duas áreas de assunto:
  • “Entities: players, dominoes and games” e
  • “Game progress and tracking”

Discutiremos cada área de assunto na ordem em que está listada.



Área de Assunto 1:Jogadores, Dominó e Jogos


Esta área de assunto contém o que podemos chamar de entidades principais de um jogo de dominó:os jogadores, as peças de dominó e o jogo.



A tabela "jogador" contém detalhes do perfil de todos os jogadores individuais. As colunas desta tabela são:

  • id –Um ID exclusivo para cada jogador.
  • player_name – O nome e sobrenome do jogador.

As seguintes colunas nesta tabela armazenam as estatísticas de jogo de cada jogador:
  • num_block_game_played – O número de jogos de bloco que o jogador jogou.
  • num_draw_game_played – O número de jogos de empate que o jogador jogou.
  • num_block_game_win – O número de jogos de blocos ganhos pelo jogador.
  • num_draw_game_win – O número de jogos de empate ganhos pelo jogador.
  • highest_block_score – A maior pontuação do jogador em um jogo de blocos.
  • highest_draw_score – A pontuação mais alta do jogador em um jogo de empate.

O “bone ” contém informações sobre as próprias peças de dominó. As colunas desta tabela são:
  • id – Uma chave única para cada peça. Esta chave será referenciada por outras tabelas.
  • first_face_value – O número de pontos na primeira face (final).
  • second_face_value – O número de pontos na segunda face (final).

O “game ” armazena informações sobre jogos. As colunas desta tabela são:
  • id – A chave primária desta tabela; ele identifica exclusivamente cada jogo.
  • game_variant – A variante jogada, ou seja, “bloquear” ou “empatar”.
  • score_to_win – A pontuação mínima necessária para vencer um jogo.
  • num_round_complete – O número de rodadas jogadas nesse jogo. Cada jogo geralmente contém várias rodadas e dura até que alguém alcance a pontuação vencedora.

O “player_in_game ” tabela nos diz quais jogadores participam de um jogo. Além do player_id , esta tabela contém suas pontuações atuais no player_curr_score coluna. Quando um jogador vence, um “Y” é colocado no is_winner coluna. Como mais de um jogador pode ganhar um jogo, registraremos esse detalhe aqui em vez de no “game " tabela.

Área de assunto 2:progresso e acompanhamento do jogo


Como qualquer jogador de dominó sabe, a ação real do jogo é composta por suas mãos, rodadas e movimentos – os pequenos detalhes que fazem ou quebram um jogo. Esta área de assunto tratará desses detalhes.



Um jogo geralmente requer várias rodadas. Para cada rodada, um número de peças é distribuído para cada jogador. Vamos chamar essa distribuição de peças de “mão”. Cada vez que uma rodada começa, cada jogador tem uma mão de peças que pode jogar. (Nota:Em alguns jogos de empate, o número de peças em cada mão pode exceder sete.)

A “round ” armazena os detalhes de cada rodada. Isso inclui um instantâneo do estado atual do jogo, por exemplo, valores de ladrilhos atuais nos cantos da ramificação. As colunas desta tabela são:

  • id – Um número único atribuído a cada rodada.
  • game_id – Refere-se ao “game ” e indica o jogo ao qual a rodada pertence.
  • left_branch_value – Mantém o valor da esquerda canto do ramo. Qualquer peça com um valor correspondente (número de pips) pode ser jogada na próxima jogada.
  • right_branch_value – Mantém o valor do direito canto do ramo. Qualquer peça com um valor correspondente (número de pips) pode ser jogada na próxima jogada.
  • curr_num_tiles_boneyard – O número de peças no cemitério em um determinado momento. Este valor de coluna será reduzido em um cada vez que um jogador comprar uma peça. Esta coluna é útil durante os jogos de empate.

A “hand ” registra todas as peças nas mãos dos jogadores durante uma rodada. As colunas desta tabela são:
  • id – A chave primária desta tabela.
  • round_id – Refere-se à “round ” e indica a rodada relevante.
  • player_id – Refere-se ao “player ” e indica o jogador relevante.
  • bone_id – Refere-se ao “bone ” e indica quais peças o jogador tem na mão.
  • is_played – Se uma peça foi jogada. Inicialmente, esta coluna será nula. Ele será preenchido com 'Y' somente quando uma peça for jogada. A mesma peça não pode ser jogada duas vezes em uma rodada.
  • is_fetched –Um 'Y' nesta coluna significa que as peças foram desenhadas em um movimento. Útil para jogos de empate.

O “move ” registra a sequência de movimentos para cada peça jogada em uma rodada. As colunas desta tabela são:
  • id – Identifica exclusivamente cada movimento em uma rodada.
  • round_id – Refere-se à “round ” e indica a rodada relevante.
  • move_type – O tipo de movimento, ou seja, passe (P), empate (D) ou lay down (L).
  • hand_id – Refere-se à “hand ” e indica qual jogador está fazendo a jogada.
  • branch_played_at – Significa o ramo (esquerdo ou direito) onde o movimento é feito. Esta coluna só será preenchida no caso de um movimento de 'lay down'.
  • move_sequence – Esta coluna numérica começa com 1 e é aumentada em um após cada movimento.

O “player_round_score ” armazena as pontuações de jogadores individuais para cada rodada. Esta tabela tem uma chave primária composta composta pelo game_id , player_id e round_id colunas. O game_id e player_id colunas são referenciadas a partir do “player_in_game " tabela.

O que você adicionaria ao modelo de dados Domino?


Trem Básico, Trem Mexicano, Pé de Galinha, Bendomino, Chipre, Cruz de Malta, Matador, Spinner – essas são apenas algumas das muitas variantes de dominós! O que você acha que seria necessário para estender esse modelo para acomodar esses jogos? O que você mudaria ou acrescentaria ao modelo básico? Conte-nos na seção de comentários abaixo!