Database
 sql >> база данни >  >> RDS >> Database

Тайните на доминото, или модел на данни за играта домино

Настолните игри като домино все още са много популярни. Нека да разгледаме доминото от гледна точка на моделиране на данни.

Играта на домино съществува от стотици години и се играе по целия свят. Както може да очаквате, това означава много вариации в играта! В тази статия ще разгледаме модел на данни, който може да поддържа най-често срещаните варианти – рисуване и блокиране. Основите на тези два варианта са почти еднакви; има само малки разлики в правилата. Доминото може да се играе от двама или повече играчи, така че нашият модел на данни ще поддържа множество играчи.

Нека започнем с някои основи на играта на домино, след което ще преминем към модела на данните.

Какво трябва да знаем за доминото?

  • Комплект домино съдържа 28 фигури за игра, които се наричат ​​„кости“ или „плочки“. Те са правоъгълни, с линия в центъра, която разделя всяка плочка на два квадратни края (или лица).
  • Всеки край има определен брой точки, вариращи от 0 до 6. Тези точки се наричат ​​„пипсове“.
  • Плочките с еднакви стойности в двата края се наричат ​​„двойни“, напр. двойно-шест има по шест семки на всеки край.
  • Колекцията от домино върху игралната повърхност се нарича линия на игра. Краищата на линията на игра се наричат ​​ъгли на клони. Ъгли на клони са мястото, където играчите могат да играят нови плочки.

Започване на игра

  • Всички плочки са поставени с лицето надолу върху маса.
  • Ако има 2-3 играчи, всеки тегли 7 плочки. Ако има 4-5 играчи, всеки тегли 5 плочки. Останалите плочки се оставят на купчина, наречена „бониар“.
  • Играчът с най-голям дубъл получава първия ход. Играта обикновено се движи по посока на часовниковата стрелка.
  • За да играе на домино, играчът слага плочка до плочка, която вече е положена на масата. Краищата на плочките трябва да съвпадат, т.е. край с две точки може да бъде поставен само до друг край с две пипа. (Забележка:Някои варианти на играта имат различни правила относно съвпадението.)

Правила на играта

  • Първият играч поставя най-високия двоен с лицето нагоре на масата.
  • Следващият играч трябва да играе на домино, което съвпада с по-рано положеното домино.
  • Играч, който не може да изравни нито един от двата края на формацията, трябва да „чукне“ или „подаде“. В блоковата игра това просто означава, че играта преминава към следващия играч. При игра на теглене играчите трябва да изтеглят плочки от костилката, докато намерят плочка за игра. Ако гробът е празен, играта просто преминава на следващия човек. Някои варианти на играта с теглене ограничават броя на плочките, които играчът трябва да изтегли, т.е. до 3 плочки. Ако играчът изтегли определения брой плочки и не получи съвпадение, играта преминава към следващия човек.
  • Линията на игра има две или повече разклонения (крайни точки за игра) по всяко време. Играчите могат да играят на всеки клон, който има същия брой точки като една от техните плочки. Двойните се поставят под прав ъгъл спрямо всички останали плочки. (Забележка:Някои варианти имат различни правила относно линията на игра.)

Спечелване на игра на домино

  • При игра на равенство печели първият играч, който изиграе всичките си плочки. Играта може (или не може) да продължи, докато двата края на линията на игра не бъдат блокирани и не останат повече домино в двора.
  • В блокова игра играчът с най-малко плочки печели, когато краищата са блокирани и никой не разполага с плочки за игра.

Отчитане

При игра на равен сбор сумата от точките на останалите домино на губещите е резултатът на победителя. В блоковата игра печели човекът с най-нисък сбор от остатъчни семки; този играч изважда тяхната сума от сумата на своя противник; разликата е резултатът на победителя. Забележка:В някои игри играчите трябва да достигнат минимален резултат, за да спечелят.

Моделът на данни Dominoes

Моделът на данни за доминото се състои от две предметни области:

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

Ще обсъдим всяка тематична област в реда, в който е изброен.




Област 1:Играчи, домино и игри

Тази тематична област съдържа това, което можем да наречем основните елементи на играта с домино:играчите, плочките домино и играта.

Таблицата „играч“ съдържа подробности за профила за всички отделни играчи. Колоните в тази таблица са:

  • id – Уникален идентификатор за всеки играч.
  • player_name – Името и фамилията на играча.

Следните колони в тази таблица съхраняват статистическите данни за играта на всеки играч:

  • num_block_game_played – Броят на блоковите игри, които играчът е играл.
  • num_draw_game_played – Броят игри на равенство, които играчът е изиграл.
  • num_block_game_win – Броят на блоковите игри, спечелени от играча.
  • num_draw_game_win – Броят на равенствата, спечелени от играча.
  • highest_block_score – Най-високият резултат на играча някога в игра с блокове.
  • highest_draw_score – Най-високият резултат на играча някога в игра на равенство.

bone ” таблицата съдържа информация за самите плочки домино. Колоните в тази таблица са:

  • id – Уникален ключ за всяка плочка. Този ключ ще бъде препратен от други таблици.
  • first_face_value – Броят на точките на първото лице (край).
  • second_face_value – Броят на точките на второто лице (край).

game ” таблицата съхранява информация за игрите. Колоните в тази таблица са:

  • id – Първичният ключ на тази таблица; той уникално идентифицира всяка игра.
  • game_variant – Изиграният вариант, т.е. „блокиране“ или „равни“.
  • score_to_win – Минималният резултат, необходим за спечелване на игра.
  • num_round_complete – Броят изиграни рундове в тази игра. Всяка игра обикновено съдържа няколко кръга и продължава, докато някой постигне печеливш резултат.

player_in_game ” таблицата ни казва кои играчи участват в дадена игра. Освен player_id , тази таблица съдържа техните текущи резултати в player_curr_score колона. Когато играч спечели, "Y" се поставя в is_winner колона. Тъй като повече от един играч могат да спечелят игра, ние ще запишем тази подробност тук вместо в „game ” таблица.

Тема област 2:Напредък и проследяване на играта

Както всеки играч на домино знае, истинското действие на играта се състои от нейните ръце, рундове и ходове – малките детайли, които създават или нарушават играта. Тази тема ще обработва тези подробности.

Една игра обикновено изисква няколко рунда. За всеки рунд на всеки играч се разпределят определен брой плочки. Нека наречем това разпределение на плочките „ръка“. Всеки път, когато започне рунд, всеки играч има ръка с плочки, които може да играе. (Забележка:В някои игри с теглене броят на плочките във всяка ръка може да надвишава седем.)

round ” таблицата съхранява подробности за всеки кръг. Това включва моментна снимка на текущото състояние на игра, напр. текущите стойности на плочките в ъглите на клона. Колоните в тази таблица са:

  • id – Уникален номер, присвоен на всеки рунд.
  • game_id – Препраща към „game ” и показва играта, към която принадлежи кръгът.
  • left_branch_value – Задържа стойността на ляво клон ъгъл. Всяка плочка със съвпадаща стойност (брой пипсове) може да се играе в следващия ход.
  • right_branch_value – Задържа стойността на дясно клон ъгъл. Всяка плочка със съвпадаща стойност (брой пипсове) може да се играе в следващия ход.
  • curr_num_tiles_boneyard – Броят на плочките в гробницата във всеки даден момент. Стойността на тази колона ще бъде намалена с едно всеки път, когато играч тегли плочка. Тази колона е полезна по време на игри с теглене.

hand ” таблицата записва всички плочки в ръцете на играчите по време на рунд. Колоните в тази таблица са:

  • id – Първичният ключ на тази таблица.
  • round_id – Препраща към „round ” и посочва съответния кръг.
  • player_id – Препраща към „player ” и посочва съответния играч.
  • bone_id – Препраща към „bone ” и показва какви плочки има/имал играчът в ръката си.
  • is_played – Дали е изиграна плочка. Първоначално тази колона ще бъде нула. Ще бъде попълнено с „Y“ само когато се играе плочка. Една и съща плочка не може да се играе два пъти в един рунд.
  • is_fetched – „Y“ в тази колона означава, че плочките са изтеглени при движение. Полезно за игри с теглене.

move ” таблицата записва последователността на движение за всяка изиграна плочка в рунд. Колоните в тази таблица са:

  • id – Уникално идентифицира всеки ход в рунд.
  • round_id – Препраща към „round ” и посочва съответния кръг.
  • move_type – Видът на движението, т.е. пас (P), равен (D) или лягане (L).
  • hand_id – Препраща към „hand ” и показва кой играч прави хода.
  • branch_played_at – Означава клона (вляво или вдясно), където е направено движението. Тази колона ще бъде попълнена само в случай на „лягане“.
  • move_sequence – Тази колона с числа започва с 1 и се увеличава с едно след всеки ход.

player_round_score ” таблицата съхранява резултатите за отделните играчи за всеки рунд. Тази таблица има съставен първичен ключ, съставен от game_id , player_id и round_id колони. game_id и player_id колоните са препратки от „player_in_game ” таблица.

Какво бихте добавили към модела на данните на Domino?

Основен влак, Мексикански влак, Пилешки крак, Бендомино, Кипър, Малтийски кръст, Матадор, Спинър – това са само част от многото варианти на доминото! Какво мислите, че ще е необходимо, за да се разшири този модел, за да побере тези игри? Какво бихте променили или добавили към основния модел? Кажете ни в секцията за коментари по-долу!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка за сравняване на продажбите на продукти по месеци

  2. FrankenQueries:когато SQL и NoSQL се сблъскат

  3. ETL срещу ELT:Ние смятаме, вие преценете

  4. Премахване на проследяващи файлове с ADRCI

  5. Какво е ODBC?