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

Dominoernes hemmeligheder eller en domino-spildatamodel

Brætspil som dominobræt er stadig meget populære. Lad os tage et kig på dominobrikker fra et datamodelleringssynspunkt.

Domino-spillet har eksisteret i hundreder af år, og det er spillet over hele verden. Som du måske forventer, betyder det mange variationer i spillet! I denne artikel skal vi undersøge en datamodel, der kunne understøtte de mest almindelige varianter - tegne og blokere. Det grundlæggende i disse to varianter er næsten det samme; der er kun små forskelle i reglerne. Domino kan spilles af to eller flere spillere, så vores datamodel understøtter flere spillere.

Lad os starte med nogle grundlæggende principper for domino-gameplay, så går vi videre til datamodellen.

Hvad skal vi vide om dominobrikker?

  • Et dominosæt indeholder 28 spillebrikker, som kaldes 'knogler' eller 'fliser'. De er rektangulære med en linje i midten, der deler hver flise i to firkantede ender (eller flader).
  • Hver ende har et antal pletter fra 0 til 6. Disse pletter kaldes "pletter".
  • Fliser med samme værdier i begge ender kaldes 'dobbelt', f.eks. en dobbelt-sekser har seks spidser i hver ende.
  • Samlingen af ​​dominobrikker på spillefladen kaldes spillelinjen. Enderne af spillelinjen kaldes grenhjørner. Grenhjørner er, hvor spillere kan spille nye brikker.

Start et spil

  • Alle fliser placeres med forsiden nedad på et bord.
  • Hvis der er 2-3 spillere, trækker hver spiller 7 brikker. Hvis der er 4-5 spillere, trækker hver spiller 5 brikker. De resterende fliser efterlades i en bunke kaldet 'boneyard'.
  • Spilleren med den højeste double får det første træk. Spil bevæger sig normalt med uret.
  • For at spille en domino lægger en spiller en brikke ved siden af ​​en brikke, der allerede er lagt på bordet. Enderne af fliserne skal matche, det vil sige, at en to-pips-ende kun kan placeres ved siden af ​​en anden to-pip-ende. (Bemærk:Nogle spilvarianter har forskellige regler vedrørende matchning.)

Spilleregler

  • Den første spiller lægger den højeste dobbelte med billedsiden opad på bordet.
  • Den næste spiller skal spille en domino, der matcher den tidligere lagte domino.
  • En spiller, der ikke kan matche nogen af ​​enderne af formationen, skal "banke" eller "pas". I et blokspil betyder det blot, at spillet går videre til den næste spiller. I et uafgjort spil skal spillerne trække fliser fra boneyard, indtil de finder en spilbar flise. Hvis bengården er tom, går spillet simpelthen videre til den næste person. Nogle varianter af lodtrækningsspillet begrænser antallet af brikker en spiller skal trække, dvs. op til 3 fliser. Hvis spilleren trækker det angivne antal brikker og ikke får en kamp, ​​flyttes spillet til den næste person.
  • Spillelinjen har to eller flere grene (spilbare ender) til enhver tid. Spillere kan spille på enhver gren, der har det samme antal pips som en af ​​deres brikker. Doubles placeres i en ret vinkel på alle andre fliser. (Bemærk:Nogle varianter har forskellige regler om spillelinjen.)

Vind et Domino-spil

  • I et uafgjort spil vinder den første spiller, der spiller alle deres brikker. Spillet kan (eller måske ikke) fortsætte, indtil begge ender af spillelinjen er blokeret, og der ikke er flere dominobrikker tilbage i boneyard.
  • I et blokspil vinder spilleren med færrest brikker, når enderne er blokeret, og ingen har nogen spilbare brikker tilbage.

Scoring

I et uafgjort spil er summen af ​​kernerne på tabernes resterende dominobrikker vinderens score. I et blokspil vinder personen med den laveste sum af resterende pips; denne spiller trækker deres sum fra deres modstanders sum; forskellen er vinderens score. Bemærk:I nogle spil skal spillere nå en minimumsscore for at vinde.

Domino-datamodellen

Domino-datamodellen består af to emneområder:

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

Vi diskuterer hvert emneområde i den rækkefølge, det er angivet.




Emneområde 1:Spillere, Domino og spil

Dette emneområde indeholder, hvad vi kan kalde hovedenhederne i et dominospil:spillerne, dominobrikkerne og spillet.

"Spiller"-bordet indeholder profiloplysninger for alle individuelle spillere. Kolonnerne i denne tabel er:

  • id – Et unikt ID for hver spiller.
  • player_name – Spillerens for- og efternavn.

Følgende kolonner i denne tabel gemmer hver spillers spilstatistikker:

  • num_block_game_played – Antallet af blokspil, som spilleren har spillet.
  • num_draw_game_played – Antallet af uafgjorte spil, som spilleren har spillet.
  • num_block_game_win – Antallet af blokspil vundet af spilleren.
  • num_draw_game_win – Antallet af uafgjorte spil vundet af spilleren.
  • highest_block_score – Spillerens højeste score nogensinde i et blokspil.
  • highest_draw_score – Spillerens højeste score nogensinde i et uafgjort spil.

"bone ” tabel indeholder oplysninger om selve dominobrikkerne. Kolonnerne i denne tabel er:

  • id – En unik nøgle til hver flise. Denne nøgle vil blive refereret af andre tabeller.
  • first_face_value – Antallet af prikker på den første side (ende).
  • second_face_value – Antallet af prikker på den anden side (ende).

"game ” tabel gemmer oplysninger om spil. Kolonnerne i denne tabel er:

  • id – Den primære nøgle i denne tabel; det identificerer hvert spil unikt.
  • game_variant – Den afspillede variant, dvs. "blok" eller "uafgjort".
  • score_to_win – Den mindste score, der kræves for at vinde et spil.
  • num_round_complete – Antallet af runder spillet i det spil. Hvert spil indeholder normalt flere runder og varer, indtil nogen opnår den vindende score.

"player_in_game ” tabel fortæller os, hvilke spillere der deltager i et spil. Udover player_id , denne tabel indeholder deres nuværende score i player_curr_score kolonne. Når en spiller vinder, placeres et "Y" i is_winner kolonne. Da mere end én spiller kan vinde et spil, vil vi registrere denne detalje her i stedet for i "game " bord.

Emneområde 2:Spilfremskridt og sporing

Som enhver dominospiller ved, består spillets virkelige handling af dets hænder, runder og bevægelser - de små detaljer, der gør eller ødelægger et spil. Dette emneområde vil håndtere disse detaljer.

Et spil kræver normalt flere runder. For hver runde uddeles et antal brikker til hver spiller. Lad os kalde denne fordeling af fliser for en "hånd". Hver gang en runde begynder, har hver spiller en hånd med fliser, de kan spille. (Bemærk:I nogle uafgjorte spil kan antallet af brikker i hver hånd overstige syv.)

"round ” tabellen gemmer detaljer om hver runde. Dette inkluderer et øjebliksbillede af den aktuelle tilstand, f.eks. aktuelle fliseværdier i grenhjørnerne. Kolonnerne i denne tabel er:

  • id – Et unikt nummer tildelt hver runde.
  • game_id – Henviser til "game ” tabel og angiver det spil, som runden hører til.
  • left_branch_value – Holder værdien af ​​venstre grenhjørne. Enhver brik med en matchende værdi (antal pips) kan spilles i næste træk.
  • right_branch_value – Indeholder værdien af ​​ret grenhjørne. Enhver brik med en matchende værdi (antal pips) kan spilles i næste træk.
  • curr_num_tiles_boneyard – Antallet af fliser i boneyard på et givet tidspunkt. Denne kolonneværdi reduceres med én, hver gang en spiller trækker en brikke. Denne kolonne er nyttig under uafgjorte spil.

"hand ”-bordet registrerer alle brikkerne i spillernes hænder under en runde. Kolonnerne i denne tabel er:

  • id – Den primære nøgle i denne tabel.
  • round_id – Henviser til "round ” tabel og angiver den relevante runde.
  • player_id – Henviser til "player ”-tabellen og angiver den relevante spiller.
  • bone_id – Henviser til "bone ”-tabellen og angiver hvilke brikker spilleren har/havde i hånden.
  • is_played – Om en flise er blevet spillet. Til at begynde med vil denne kolonne være nul. Den vil kun blive udfyldt med 'Y', når en brikke spilles. Den samme brikke kan ikke spilles to gange i én runde.
  • is_fetched – Et 'Y' i denne kolonne betyder, at fliser er blevet tegnet i et træk. Nyttigt til remisspil.

"move ”-tabellen registrerer træksekvensen for hver brik, der spilles i en runde. Kolonnerne i denne tabel er:

  • id – Identificerer unikt hvert træk i en runde.
  • round_id – Henviser til "round ” tabel og angiver den relevante runde.
  • move_type – Typen af ​​træk, dvs. aflevering (P), remis (D) eller læg ned (L).
  • hand_id – Henviser til "hand ”-tabellen og angiver, hvilken spiller der foretager træk.
  • branch_played_at – Betyder den gren (venstre eller højre), hvor træk er foretaget. Denne kolonne vil kun blive udfyldt i tilfælde af en "læg ned"-bevægelse.
  • move_sequence – Denne talkolonne starter med 1 og øges med én efter hvert træk.

"player_round_score ”-tabellen gemmer scorerne for individuelle spillere for hver runde. Denne tabel har en sammensat primær nøgle, der består af game_id , player_id og round_id kolonner. game_id og player_id kolonner er refereret fra "player_in_game " bord.

Hvad ville du tilføje til Domino-datamodellen?

Basic Train, Mexican Train, Chicken Foot, Bendomino, Cypern, Malteser Cross, Matador, Spinner – det er blot nogle af de mange varianter af dominoer! Hvad tror du, der skal til for at udvide denne model til at rumme disse spil? Hvad ville du ændre eller tilføje til grundmodellen? Fortæl os i kommentarfeltet nedenfor!


  1. Oracle:Konverter valutabeløb i ord ved hjælp af PL/SQL

  2. Sådan ÆNDRES Tabelværdiparameteren

  3. For loop eksempel i MySQL

  4. Sletning af rækker fra overordnede og underordnede tabeller