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!