Database
 sql >> Database >  >> RDS >> Database

I segreti del domino o un modello di dati di gioco del domino

I giochi da tavolo come il domino sono ancora molto popolari. Diamo un'occhiata ai domino dal punto di vista della modellazione dei dati.

Il gioco del domino esiste da centinaia di anni e viene giocato in tutto il mondo. Come ci si potrebbe aspettare, questo significa molte variazioni di gioco! In questo articolo, esamineremo un modello di dati che potrebbe supportare le varianti più comuni:disegnare e bloccare. Le basi di queste due varianti sono quasi le stesse; ci sono solo lievi differenze nelle regole. I domino possono essere giocati da due o più giocatori, quindi il nostro modello di dati supporterà più giocatori.

Iniziamo con alcune nozioni di base sul gameplay del domino, poi passeremo al modello dati.

Cosa dobbiamo sapere sui domino?

  • Un set di domino contiene 28 pezzi da gioco, chiamati "ossa" o "tessere". Sono rettangolari, con una linea al centro che divide ogni piastrella in due estremità (o facce) quadrate.
  • Ogni estremità ha un numero di punti che va da 0 a 6. Questi punti sono chiamati "pip".
  • Le tessere con gli stessi valori su entrambe le estremità sono chiamate "doppie", ad es. un doppio sei ha sei pip su ciascuna estremità.
  • La collezione di domino sulla superficie di gioco è chiamata linea di gioco. Le estremità della linea di gioco sono chiamate angoli dei rami. Angoli delle diramazioni sono dove i giocatori possono giocare nuove tessere.

Avvio di una partita

  • Tutte le tessere vengono posizionate a faccia in giù su un tavolo.
  • Se ci sono 2-3 giocatori, ogni giocatore pesca 7 tessere. Se ci sono 4-5 giocatori, ogni giocatore pesca 5 tessere. Le tessere rimanenti vengono lasciate in una pila chiamata "boneyard".
  • Il giocatore con il doppio più alto ottiene la prima mossa. Il gioco di solito si muove in senso orario.
  • Per giocare a domino, un giocatore posiziona una tessera accanto a una tessera che è già stata posata sul tavolo. Le estremità delle tessere devono corrispondere, cioè un'estremità a due semi può essere posizionata solo accanto a un'altra estremità a due semi. (Nota:alcune varianti di gioco hanno regole diverse per quanto riguarda l'abbinamento.)

Regole del gioco

  • Il primo giocatore mette la doppia più alta a faccia in su sul tavolo.
  • Il giocatore successivo deve giocare un domino che corrisponda al domino precedentemente piazzato.
  • Un giocatore che non può eguagliare nessuna delle due estremità del modulo deve "bussare" o "passare". In un gioco a blocchi, questo significa semplicemente che il gioco passa al giocatore successivo. In una partita di pareggio, i giocatori devono pescare tessere dal cimitero fino a quando non trovano una tessera giocabile. Se il cimitero è vuoto, il gioco passa semplicemente alla persona successiva. Alcune varianti del gioco del sorteggio limitano il numero di tessere che un giocatore deve pescare, ovvero fino a 3 tessere. Se il giocatore pesca il numero specificato di tessere e non ottiene una corrispondenza, il gioco passa alla persona successiva.
  • La linea di gioco ha due o più rami (estremità giocabili) in qualsiasi momento. I giocatori possono giocare su qualsiasi ramo che ha lo stesso numero di pips di una delle loro tessere. I doppi sono posizionati ad angolo retto rispetto a tutte le altre tessere. (Nota:alcune varianti hanno regole diverse sulla linea di gioco.)

Vincere una partita di domino

  • In una partita a pareggio, vince il primo giocatore che gioca tutte le proprie tessere. Il gioco può (o non può) continuare fino a quando entrambe le estremità della linea di gioco non vengono bloccate e non rimangono più tessere nel cimitero.
  • In una partita a blocchi, il giocatore con il minor numero di tessere vince quando le estremità sono bloccate e nessuno ha più tessere giocabili.

Punteggio

In una partita a pareggio, la somma dei pip sulle tessere rimanenti dei perdenti è il punteggio del vincitore. In un gioco a blocchi, vince la persona con la somma più bassa di pip rimanenti; questo giocatore sottrae la sua somma dalla somma dell'avversario; la differenza è il punteggio del vincitore. Nota:in alcuni giochi, i giocatori devono raggiungere un punteggio minimo per vincere.

Il modello di dati di Domino

Il modello dei dati del domino è costituito da due aree tematiche:

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

Discuteremo ogni area tematica nell'ordine in cui è elencata.




Area tematica 1:giocatori, domino e giochi

Questa area tematica contiene quelle che possiamo chiamare le entità principali di un gioco di domino:i giocatori, le tessere del domino e il gioco.

La tabella "giocatore" contiene i dettagli del profilo di tutti i singoli giocatori. Le colonne di questa tabella sono:

  • id –Un ID univoco per ogni giocatore.
  • player_name – Il nome e il cognome del giocatore.

Le seguenti colonne di questa tabella memorizzano le statistiche di gioco di ciascun giocatore:

  • num_block_game_played – Il numero di partite in blocchi che il giocatore ha giocato.
  • num_draw_game_played – Il numero di partite di estrazione che il giocatore ha giocato.
  • num_block_game_win – Il numero di partite in blocco vinte dal giocatore.
  • num_draw_game_win – Il numero di pareggi vinti dal giocatore.
  • highest_block_score – Il punteggio più alto mai ottenuto dal giocatore in una partita a blocchi.
  • highest_draw_score – Il punteggio più alto mai ottenuto dal giocatore in una partita di pareggio.

Il "bone La tabella contiene informazioni sulle tessere del domino stesse. Le colonne di questa tabella sono:

  • id – Una chiave univoca per ogni tessera. Questa chiave sarà referenziata da altre tabelle.
  • first_face_value – Il numero di punti sulla prima faccia (fine).
  • second_face_value – Il numero di punti sulla seconda faccia (fine).

Il “game La tabella memorizza le informazioni sui giochi. Le colonne di questa tabella sono:

  • id – La chiave primaria di questa tabella; identifica in modo univoco ogni gioco.
  • game_variant – La variante giocata, ovvero “blocco” o “pareggio”.
  • score_to_win – Il punteggio minimo necessario per vincere una partita.
  • num_round_complete – Il numero di round giocati in quella partita. Ogni gioco di solito contiene più round e dura finché qualcuno non raggiunge il punteggio vincente.

Il "player_in_game La tabella ci dice a cosa partecipano i giocatori in una partita. Oltre al player_id , questa tabella contiene i punteggi attuali nel player_curr_score colonna. Quando un giocatore vince, viene inserita una "Y" in is_winner colonna. Poiché più di un giocatore può vincere una partita, registreremo questo dettaglio qui invece che nel "game " tavolo.

Area tematica 2:progressi e monitoraggio del gioco

Come ogni giocatore di domino sa, la vera azione del gioco è costituita dalle sue mani, round e mosse:i piccoli dettagli che creano o rompono un gioco. Questa area tematica gestirà questi dettagli.

Un gioco di solito richiede più round. Per ogni round, un numero di tessere viene distribuito a ciascun giocatore. Chiamiamo "mano" questa distribuzione di tessere. Ogni volta che inizia un round, ogni giocatore ha una mano di tessere che può giocare. (Nota:in alcuni giochi di estrazione, il numero di tessere in ogni mano può superare sette.)

Il "round La tabella memorizza i dettagli di ogni round. Ciò include un'istantanea dello stato di avanzamento attuale, ad es. valori correnti delle tessere negli angoli dei rami. Le colonne di questa tabella sono:

  • id – Un numero univoco assegnato a ogni round.
  • game_id – Fa riferimento al "game ” e indica il gioco a cui appartiene il round.
  • left_branch_value – Contiene il valore di sinistra angolo di ramo. Qualsiasi tessera con un valore corrispondente (numero di pip) può essere giocata nella mossa successiva.
  • right_branch_value – Contiene il valore del diritto angolo di ramo. Qualsiasi tessera con un valore corrispondente (numero di pip) può essere giocata nella mossa successiva.
  • curr_num_tiles_boneyard – Il numero di tessere nel cimitero in un dato momento. Il valore di questa colonna verrà ridotto di uno ogni volta che un giocatore pesca una tessera. Questa colonna è utile durante le partite a sorteggio.

La “hand ” registra tutte le tessere nelle mani dei giocatori durante un round. Le colonne di questa tabella sono:

  • id – La chiave primaria di questa tabella.
  • round_id – Fa riferimento al "round ” e indica il turno di pertinenza.
  • player_id – Fa riferimento al "player ” e indica il giocatore rilevante.
  • bone_id – Fa riferimento a "bone ” e indica quali tessere il giocatore ha/aveva in mano.
  • is_played – Se una tessera è stata giocata. Inizialmente, questa colonna sarà nulla. Verrà popolato con "Y" solo quando viene giocata una tessera. La stessa tessera non può essere giocata due volte in un round.
  • is_fetched –Una 'Y' in questa colonna significa che le tessere sono state pescate in una mossa. Utile per i giochi di estrazione.

La "move La tabella ” registra la sequenza di mosse per ogni tessera giocata in un round. Le colonne di questa tabella sono:

  • id – Identifica in modo univoco ogni mossa in un round.
  • round_id – Fa riferimento al "round ” e indica il turno di pertinenza.
  • move_type – Il tipo di mossa, ovvero passaggio (P), pareggio (D) o lay down (L).
  • hand_id – Fa riferimento alla “hand ” e indica quale giocatore sta effettuando la mossa.
  • branch_played_at – Indica il ramo (sinistro o destro) in cui viene eseguita la mossa. Questa colonna verrà compilata solo in caso di spostamento "abbandonato".
  • move_sequence – Questa colonna numerica inizia con 1 e viene aumentata di uno dopo ogni mossa.

Il “player_round_score La tabella memorizza i punteggi dei singoli giocatori per ogni round. Questa tabella ha una chiave primaria composita composta da game_id , player_id e round_id colonne. Il game_id e player_id le colonne sono referenziate da "player_in_game " tavolo.

Cosa aggiungeresti al modello di dati di Domino?

Treno di base, Treno messicano, Zampa di pollo, Bendomino, Cipro, Croce di Malta, Matador, Spinner:queste sono solo alcune delle tante varianti di domino! Cosa pensi ci vorrebbe per estendere questo modello per ospitare quei giochi? Cosa cambieresti o aggiungeresti al modello base? Dicci nella sezione commenti qui sotto!