Database
 sql >> Baza danych >  >> RDS >> Database

Sekrety domina, czyli model danych gry w domino

Gry planszowe, takie jak domino, są nadal bardzo popularne. Rzućmy okiem na domino z punktu widzenia modelowania danych.

Gra w domino istnieje od setek lat i jest rozgrywana na całym świecie. Jak można się spodziewać, oznacza to wiele wariacji w grze! W tym artykule przyjrzymy się modelowi danych, który może obsługiwać najpopularniejsze warianty – rysuj i blokuj. Podstawy tych dwóch wariantów są prawie takie same; są tylko niewielkie różnice w zasadach. W domino może grać dwóch lub więcej graczy, więc nasz model danych będzie obsługiwać wielu graczy.

Zacznijmy od podstaw gry w domino, następnie przejdziemy do modelu danych.

Co musimy wiedzieć o domino?

  • Zestaw domino zawiera 28 elementów do gry, które nazywane są „kośćmi” lub „kafelkami”. Są prostokątne, z linią pośrodku, która dzieli każdą płytkę na dwa kwadratowe końce (lub ściany).
  • Każdy koniec ma liczbę plamek od 0 do 6. Te plamy nazywane są „pipsami”.
  • Płytki z tymi samymi wartościami na obu końcach nazywane są „dubletami”, np. podwójna szóstka ma sześć oczek na każdym końcu.
  • Zbiór domino na powierzchni gry nazywa się linią gry. Końce linii gry nazywane są rogami gałęzi. Narożniki oddziałów to miejsce, w którym gracze mogą grać w nowe kafelki.

Rozpoczęcie gry

  • Wszystkie kafelki kładzie się zakryte na stole.
  • Jeśli jest 2-3 graczy, każdy gracz dobiera 7 płytek. Jeśli jest 4-5 graczy, każdy gracz dobiera 5 płytek. Pozostałe kafelki są pozostawione na stosie zwanym „cmentarzem”.
  • Gracz z najwyższą wartością double wykonuje pierwszy ruch. Gra zwykle toczy się zgodnie z ruchem wskazówek zegara.
  • Aby zagrać w domino, gracz kładzie płytkę obok płytki, która została już ułożona na stole. Końce płytek muszą się zgadzać, tzn. koniec z dwoma czopami można umieścić tylko obok innego końca z dwoma czopami. (Uwaga:niektóre warianty gry mają inne zasady dotyczące dopasowywania.)

Zasady gry

  • Pierwszy gracz kładzie na stole najwyższą podwójną twarzą do góry.
  • Następny gracz musi zagrać domino, które pasuje do poprzednio ułożonego domina.
  • Gracz, który nie może dopasować żadnego końca formacji, musi „zapukać” lub „pasować”. W grze blokowej oznacza to po prostu, że gra przechodzi do następnego gracza. W grze dobierania gracze muszą losować kafelki z cmentarza, dopóki nie znajdą grywalnego kafelka. Jeśli cmentarz jest pusty, gra po prostu przechodzi na następną osobę. Niektóre warianty gry dobierania ograniczają liczbę płytek, które gracz musi dobrać, tj. do 3 płytek. Jeśli gracz wylosuje określoną liczbę płytek i nie dostanie dopasowania, gra przechodzi do następnej osoby.
  • Linia gry ma co najmniej dwie gałęzie (możliwe do zagrania końce) w dowolnym momencie. Gracze mogą grać na dowolnej gałęzi, która ma taką samą liczbę oczek, jak jedna z ich płytek. Dublety są umieszczane pod kątem prostym do wszystkich innych płytek. (Uwaga:niektóre warianty mają inne zasady dotyczące linii gry.)

Wygrywanie gry w domino

  • W grze remisowej wygrywa pierwszy gracz, który zagra wszystkie swoje kafelki. Gra może (lub nie) być kontynuowana, dopóki oba końce linii gry nie zostaną zablokowane i na cmentarzu nie pozostanie już więcej kostek domina.
  • W grze blokowej gracz z najmniejszą liczbą płytek wygrywa, gdy końce są zablokowane i nikt nie ma już żadnych grywalnych płytek.

Punktacja

W grze remisowej suma oczek na pozostałe domino przegranych to wynik zwycięzcy. W grze blokowej wygrywa osoba z najniższą sumą pozostałych pipsów; ten gracz odejmuje swoją sumę od sumy przeciwnika; różnica to wynik zwycięzcy. Uwaga:W niektórych grach gracze muszą osiągnąć minimalny wynik, aby wygrać.

Model danych Domino

Model danych domina składa się z dwóch obszarów tematycznych:

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

Omówimy każdy obszar tematyczny w kolejności, w jakiej jest wymieniony.




Obszar tematyczny 1:Gracze, domino i gry

Ten obszar tematyczny zawiera to, co możemy nazwać głównymi elementami gry w domino:graczy, płytki domina i grę.

Tabela „gracz” zawiera szczegóły profilu dla wszystkich indywidualnych graczy. Kolumny w tej tabeli to:

  • id –Unikalny identyfikator dla każdego gracza.
  • player_name – Imię i nazwisko gracza.

Poniższe kolumny w tej tabeli przechowują statystyki gry każdego gracza:

  • num_block_game_played – Liczba gier blokowych, w które gracz grał.
  • num_draw_game_played – Liczba gier losowych, w które gracz rozegrał.
  • num_block_game_win – Liczba gier blokowych wygranych przez gracza.
  • num_draw_game_win – Liczba gier losowych wygranych przez gracza.
  • highest_block_score – Najwyższy wynik gracza w historii w grze blokowej.
  • highest_draw_score – Najwyższy wynik gracza w historii w grze remisowej.

bone Tabela zawiera informacje o samych kostkach domina. Kolumny w tej tabeli to:

  • id – Unikalny klucz do każdej płytki. Do tego klucza będą się odwoływać inne tabele.
  • first_face_value – Liczba kropek na pierwszej twarzy (koniec).
  • second_face_value – Liczba kropek na drugiej powierzchni (koniec).

game Tabela przechowuje informacje o grach. Kolumny w tej tabeli to:

  • id – Klucz podstawowy tej tabeli; jednoznacznie identyfikuje każdą grę.
  • game_variant – zagrany wariant, tj. „blok” lub „remis”.
  • score_to_win – Minimalny wynik potrzebny do wygrania gry.
  • num_round_complete – Liczba rund rozegranych w tej grze. Każda gra zwykle składa się z wielu rund i trwa, dopóki ktoś nie osiągnie zwycięskiego wyniku.

player_in_game Tabela mówi nam jacy gracze biorą udział w grze. Oprócz player_id , ta tabela zawiera ich aktualne wyniki w player_curr_score kolumna. Kiedy gracz wygrywa, w polu is_winner umieszczany jest znak „Y”. kolumna. Ponieważ grę może wygrać więcej niż jeden gracz, zarejestrujemy ten szczegół tutaj zamiast w „game " stół.

Obszar tematyczny 2:Postęp w grze i śledzenie

Jak każdy gracz w domino wie, prawdziwa akcja gry składa się z jej rąk, rund i ruchów – drobnych szczegółów, które tworzą lub przerywają grę. Ten obszar tematyczny zajmie się tymi szczegółami.

Gra zwykle wymaga wielu rund. W każdej rundzie każdemu graczowi przydzielana jest pewna liczba płytek. Nazwijmy ten rozkład płytek „ręką”. Za każdym razem, gdy rozpoczyna się runda, każdy gracz ma rękę płytek, które może zagrać. (Uwaga:w niektórych grach dobieranych liczba płytek w każdym rozdaniu może przekraczać siedem).

round Tabela przechowuje szczegóły każdej rundy. Obejmuje to migawkę aktualnego stanu gry, m.in. aktualne wartości płytek w rogach gałęzi. Kolumny w tej tabeli to:

  • id – Unikalny numer przypisany do każdej rundy.
  • game_id – Odwołuje się do „game ” i wskazuje grę, do której należy runda.
  • left_branch_value – Przechowuje wartość lewego róg oddziału. W następnym ruchu można zagrać dowolną płytkę z pasującą wartością (liczba pipsów).
  • right_branch_value – Posiada wartość prawego róg oddziału. W następnym ruchu można zagrać dowolną płytkę z pasującą wartością (liczba pipsów).
  • curr_num_tiles_boneyard – Liczba płytek na cmentarzu w danym momencie. Ta wartość kolumny zostanie zmniejszona o jeden za każdym razem, gdy gracz dobierze płytkę. Ta kolumna jest przydatna podczas gier losowych.

hand ” tabela rejestruje wszystkie płytki w rękach graczy podczas rundy. Kolumny w tej tabeli to:

  • id – Klucz podstawowy tej tabeli.
  • round_id – Odwołuje się do „round ” i wskazuje odpowiednią rundę.
  • player_id – Odwołuje się do „player ” i wskazuje odpowiedniego gracza.
  • bone_id – Odwołuje się do „bone ” i wskazuje, jakie płytki gracz ma/miał na ręce.
  • is_played – Czy kafelek został zagrany. Początkowo ta kolumna będzie miała wartość pustą. Zostanie on wypełniony znakiem „Y” tylko wtedy, gdy zostanie zagrany kafelek. Nie można zagrać tego samego kafelka dwa razy w jednej rundzie.
  • is_fetched – „Y” w tej kolumnie oznacza, że ​​płytki zostały wylosowane w ruchu. Przydatne w grach do rysowania.

move Tabela zapisuje sekwencję ruchów dla każdej płytki zagranej w rundzie. Kolumny w tej tabeli to:

  • id – Jednoznacznie identyfikuje każdy ruch w rundzie.
  • round_id – Odwołuje się do „round ” i wskazuje odpowiednią rundę.
  • move_type – Rodzaj ruchu, czyli pas (P), remis (D) lub leżeć (L).
  • hand_id – Odwołuje się do „hand ” i wskazuje, który gracz wykonuje ruch.
  • branch_played_at – Oznacza gałąź (lewą lub prawą), w której wykonywany jest ruch. Ta kolumna zostanie wypełniona tylko w przypadku ruchu „odłóż”.
  • move_sequence – Ta kolumna liczbowa zaczyna się od 1 i jest zwiększana o jeden po każdym ruchu.

player_round_score Tabela przechowuje wyniki poszczególnych graczy dla każdej rundy. Ta tabela ma złożony klucz główny składający się z game_id , player_id i round_id kolumny. game_id i player_id kolumny są przywoływane z „player_in_game " stół.

Co byś dodał do modelu danych Domino?

Basic Train, Mexican Train, Chicken Foot, Bendomino, Cyprus, Maltański Krzyż, Matador, Spinner – to tylko niektóre z wielu wariantów domino! Jak myślisz, czego potrzeba, aby rozszerzyć ten model, aby pomieścić te gry? Co byś zmienił lub dodał do podstawowego modelu? Powiedz nam w sekcji komentarzy poniżej!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak czytać i interpretować błędy SQL

  2. Naturalne połączenie SQL

  3. Wskazówki dotyczące lepszego projektowania baz danych

  4. Skalowanie bazy danych szeregów czasowych — jak łatwo skalować bazę danych skali czasu

  5. Jak pomnożyć dwie kolumny w SQL?