sql >> Databáze >  >> RDS >> Database

The Secrets of Dominoes aneb A Domino Game Data Model

Deskové hry jako domino jsou stále velmi oblíbené. Pojďme se podívat na domino z pohledu datového modelování.

Hra domino existuje již stovky let a hraje se po celém světě. Jak můžete očekávat, znamená to spoustu variací ve hře! V tomto článku prozkoumáme datový model, který by mohl podporovat nejběžnější varianty – kreslení a blokování. Základy těchto dvou variant jsou téměř stejné; jsou jen drobné rozdíly v pravidlech. Domino mohou hrát dva nebo více hráčů, takže náš datový model bude podporovat více hráčů.

Začněme základy hry domino a poté přejdeme k datovému modelu.

Co potřebujeme vědět o domino?

  • Sada domino obsahuje 28 hracích figurek, které se nazývají „kosti“ nebo „dlaždice“. Jsou obdélníkové s čárou uprostřed, která rozděluje každou dlaždici na dva čtvercové konce (nebo plochy).
  • Na každém konci je počet skvrn v rozsahu od 0 do 6. Tyto skvrny se nazývají „pips“.
  • Dlaždice se stejnými hodnotami na obou koncích se nazývají „dvojky“, např. dvojitá šestka má na každém konci šest pecek.
  • Sbírka kostek domina na hrací ploše se nazývá čára hry. Konce hrací řady se nazývají rohy větví. Rohy větví jsou místa, kde mohou hráči hrát nové dlaždice.

Spuštění hry

  • Všechny dlaždice jsou umístěny na stůl lícem dolů.
  • Pokud jsou 2–3 hráči, každý si lízne 7 žetonů. Pokud je 4–5 hráčů, každý si lízne 5 žetonů. Zbývající dlaždice jsou ponechány na hromádce zvané „boneyard“.
  • Hráč s nejvyšším dvojnásobkem dostane první tah. Hra se obvykle pohybuje ve směru hodinových ručiček.
  • Chcete-li hrát domino, hráč položí žeton vedle žetonu, který již byl položen na stůl. Konce destiček se musí shodovat, tj. konec se dvěma čárkami může být umístěn pouze vedle jiného konce se dvěma čárkami. (Poznámka:Některé varianty her mají odlišná pravidla týkající se shody.)

Pravidla hry

  • První hráč položí nejvyšší dvojici lícem nahoru na stůl.
  • Další hráč musí zahrát domino, které odpovídá dříve položenému dominu.
  • Hráč, který se nemůže rovnat ani jednomu konci formace, musí „zaklepat“ nebo „přihrát“. V blokové hře to jednoduše znamená, že hra přechází na dalšího hráče. V remízové ​​hře musí hráči lízat destičky z hřbitova, dokud nenajdou hratelnou destičku. Pokud je hřbitov prázdný, hra jednoduše přejde na další osobu. Některé varianty losovací hry omezují počet žetonů, které musí hráč táhnout, tedy až 3 žetony. Pokud si hráč vylosuje zadaný počet kamenů a nedosáhne shody, hra se přesune na další osobu.
  • Hraní linie má kdykoli dvě nebo více větví (hratelné konce). Hráči mohou hrát na libovolné větvi, která má stejný počet pecek jako jedna z jejich destiček. Dvojice jsou umístěny v pravém úhlu ke všem ostatním dlaždicím. (Poznámka:Některé varianty mají různá pravidla týkající se linie hry.)

Vyhrát hru Domino

  • V remízové ​​hře vyhrává hráč, který jako první odehraje všechny své destičky. Hra může (ale nemusí) pokračovat, dokud nebudou zablokovány oba konce hrací čáry a na dvoře nezůstanou žádné domino.
  • V blokové hře vyhrává hráč s nejmenším počtem žetonů, když jsou konce zablokovány a nikomu nezbývají žádné hratelné žetony.

Skóre

V remízové ​​hře je součet pecek na zbývajících domino poražených skóre vítěze. V blokové hře vyhrává osoba s nejnižším součtem zbývajících pecek; tento hráč odečte jejich součet od součtu soupeře; rozdíl je skóre vítěze. Poznámka:V některých hrách musí hráči dosáhnout minimálního skóre, aby vyhráli.

Datový model Dominoes

Datový model domino se skládá ze dvou tematických oblastí:

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

Budeme diskutovat o každé tematické oblasti v pořadí, v jakém jsou uvedeny.




Předmětová oblast 1:Hráči, domino a hry

Tato oblast obsahuje to, co můžeme nazvat hlavními entitami hry domino:hráči, kostky domina a hra.

Tabulka „hráč“ obsahuje podrobnosti o profilu všech jednotlivých hráčů. Sloupce v této tabulce jsou:

  • id – Jedinečné ID pro každého hráče.
  • player_name – Jméno a příjmení hráče.

Následující sloupce v této tabulce ukládají herní statistiky každého hráče:

  • num_block_game_played – Počet blokových her, které hráč hrál.
  • num_draw_game_played – Počet remízových her, které hráč odehrál.
  • num_block_game_win – Počet blokových her, které hráč vyhrál.
  • num_draw_game_win – Počet remízových her, které hráč vyhrál.
  • highest_block_score – Nejvyšší skóre hráče vůbec v blokové hře.
  • highest_draw_score – Nejvyšší skóre hráče v historii remízy.

bone ” tabulka obsahuje informace o samotných domino dlaždicích. Sloupce v této tabulce jsou:

  • id – Jedinečný klíč pro každou dlaždici. Na tento klíč budou odkazovat jiné tabulky.
  • first_face_value – Počet bodů na první ploše (konci).
  • second_face_value – Počet bodů na druhé ploše (konci).

game ” tabulka ukládá informace o hrách. Sloupce v této tabulce jsou:

  • id – Primární klíč této tabulky; jedinečně identifikuje každou hru.
  • game_variant – Hraná varianta, tedy „blok“ nebo „remíza“.
  • score_to_win – Minimální skóre potřebné k vítězství ve hře.
  • num_round_complete – Počet odehraných kol v této hře. Každá hra obvykle obsahuje více kol a trvá, dokud někdo nedosáhne vítězného skóre.

player_in_game ” tabulka nám říká, kteří hráči se účastní hry. Kromě player_id , tato tabulka obsahuje jejich aktuální skóre v player_curr_score sloupec. Když hráč vyhraje, do pole is_winner se umístí „Y“. sloupec. Vzhledem k tomu, že hru může vyhrát více než jeden hráč, zaznamenáme tento detail zde namísto ve „game " stůl.

Předmět 2:Průběh a sledování hry

Jak každý hráč domino ví, skutečná akce hry se skládá z rukou, kol a pohybů – drobných detailů, které hru dělají nebo rozbíjejí. Tato oblast se bude zabývat těmito detaily.

Hra obvykle vyžaduje více kol. Pro každé kolo se každému hráči rozdá určitý počet destiček. Nazvěme toto rozložení dlaždic „rukou“. Pokaždé, když kolo začíná, má každý hráč ruku dlaždic, které může hrát. (Poznámka:V některých hrách s losováním může počet žetonů v každé ruce překročit sedm.)

round Tabulka obsahuje podrobnosti o každém kole. To zahrnuje snímek aktuálního stavu hry, např. aktuální hodnoty dlaždic v rozích větví. Sloupce v této tabulce jsou:

  • id – Jedinečné číslo přidělené každému kolu.
  • game_id – Odkazuje na „game ” a označuje hru, do které kolo patří.
  • left_branch_value – Obsahuje hodnotu left odbočný roh. V dalším tahu lze zahrát jakoukoli destičku se shodnou hodnotou (počet pecek).
  • right_branch_value – Obsahuje hodnotu vpravo odbočný roh. V dalším tahu lze zahrát jakoukoli destičku se shodnou hodnotou (počet pecek).
  • curr_num_tiles_boneyard – Počet kamenů na hřbitově v daném okamžiku. Tato hodnota sloupce se sníží o jednu pokaždé, když si hráč lízne žeton. Tento sloupec je užitečný při losovacích hrách.

hand “ tabulka zaznamenává všechny destičky v rukou hráčů během kola. Sloupce v této tabulce jsou:

  • id – Primární klíč této tabulky.
  • round_id – Odkazuje na „round ” a označuje příslušné kolo.
  • player_id – Odkazuje na „player ” a označuje příslušného hráče.
  • bone_id – Odkazuje na „bone ” a označuje, jaké žetony hráč má/měl v ruce.
  • is_played – Zda byla zahrána destička. Zpočátku bude tento sloupec prázdný. Bude vyplněna „Y“ pouze při hraní dlaždice. Stejný kámen nelze zahrát dvakrát v jednom kole.
  • is_fetched – „Y“ v tomto sloupci znamená, že dlaždice byly nakresleny v tahu. Užitečné pro losovací hry.

move ” tabulka zaznamenává sekvenci tahů pro každý dílek hraný v kole. Sloupce v této tabulce jsou:

  • id – Jednoznačně identifikuje každý pohyb v kole.
  • round_id – Odkazuje na „round ” a označuje příslušné kolo.
  • move_type – Typ pohybu, tj. přihrávka (P), remíza (D) nebo položení (L).
  • hand_id – Odkazuje na „hand ” a označuje, který hráč provádí tah.
  • branch_played_at – Označuje větev (vlevo nebo vpravo), kde je tah proveden. Tento sloupec se vyplní pouze v případě pohybu „položit“.
  • move_sequence – Tento sloupec čísel začíná číslem 1 a po každém tahu se zvýší o jedničku.

player_round_score ” tabulka ukládá skóre jednotlivých hráčů pro každé kolo. Tato tabulka má složený primární klíč složený z game_id , player_id a round_id sloupců. game_id a player_id sloupce jsou odkazovány z „player_in_game " stůl.

Co byste přidali do datového modelu Domino?

Basic Train, Mexican Train, Chicken Foot, Bendomino, Kypr, Maltézský kříž, Matador, Spinner – to jsou jen některé z mnoha variant domino! Co si myslíte, že by bylo potřeba rozšířit tento model tak, aby vyhovoval těmto hrám? Co byste změnili nebo přidali na základním modelu? Řekněte nám to v sekci komentářů níže!


  1. Nejúčinnější způsob, jak v SQL Server získat datum z data a času?

  2. Rails:Žádný fond připojení pro ActiveRecord::Base

  3. Jak DIV funguje v MariaDB

  4. Jak ladit překročení časového limitu čekání na zámek na MySQL?