Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Bí mật của Dominoes, hoặc Mô hình dữ liệu trò chơi Domino

Các trò chơi board như domino vẫn rất phổ biến. Hãy xem các quân cờ domino từ quan điểm mô hình hóa dữ liệu.

Trò chơi domino đã có hàng trăm năm và nó được chơi trên khắp thế giới. Như bạn có thể mong đợi, điều này có nghĩa là có rất nhiều biến thể trong cách chơi! Trong bài viết này, chúng ta sẽ xem xét một mô hình dữ liệu có thể hỗ trợ các biến thể phổ biến nhất - vẽ và khối. Những điều cơ bản của hai biến thể này gần như giống nhau; chỉ có sự khác biệt nhỏ về quy tắc. Dominoes có thể được chơi bởi hai hoặc nhiều người chơi, vì vậy mô hình dữ liệu của chúng tôi sẽ hỗ trợ nhiều người chơi.

Hãy bắt đầu với một số khái niệm cơ bản về cách chơi domino, sau đó chúng ta sẽ chuyển sang mô hình dữ liệu.

Chúng ta cần biết gì về Dominoes?

  • Một bộ domino chứa 28 quân chơi, được gọi là 'xương' hoặc 'gạch'. Chúng có hình chữ nhật với một đường kẻ ở giữa chia mỗi ô thành hai đầu (hoặc mặt) hình vuông.
  • Mỗi đầu có một số điểm khác nhau, từ 0 đến 6. Những điểm này được gọi là 'pips'.
  • Các ô có cùng giá trị ở cả hai đầu được gọi là "đôi", ví dụ:số kép sáu có sáu pips ở mỗi đầu.
  • Tập hợp các quân cờ domino trên bề mặt chơi được gọi là đường chơi. Các điểm cuối của đường chơi được gọi là góc nhánh. Các góc nhánh là nơi người chơi có thể chơi các ô mới.

Bắt đầu trò chơi

  • Tất cả các ô được đặt úp xuống bàn.
  • Nếu có 2-3 người chơi, mỗi người chơi sẽ rút được 7 ô. Nếu có 4-5 người chơi, mỗi người chơi rút 5 gạch. Các ô còn lại được để thành một đống được gọi là 'boneyard'.
  • Người chơi có số đôi cao nhất sẽ có nước đi đầu tiên. Trò chơi thường di chuyển theo chiều kim đồng hồ.
  • Để chơi domino, người chơi đặt một ô bên cạnh một ô đã được đặt sẵn trên bàn. Các đầu của ô phải khớp nhau, tức là chỉ có thể đặt một đầu hai pip bên cạnh một đầu hai pip khác. (Lưu ý:Một số biến thể trò chơi có các quy tắc khác nhau về đối sánh.)

Quy tắc trò chơi

  • Người chơi đầu tiên đặt mặt đôi cao nhất trên bàn.
  • Người chơi tiếp theo phải chơi một quân cờ domino khớp với quân cờ domino đã đặt trước đó.
  • Một cầu thủ không thể đối đầu với một trong hai đầu của đội hình phải “đánh” hoặc “chuyền”. Trong trò chơi khối, điều này đơn giản có nghĩa là lượt chơi sẽ được chuyển cho người chơi tiếp theo. Trong trò chơi bốc thăm, người chơi phải rút các ô từ vườn nho cho đến khi họ tìm thấy ô có thể chơi được. Nếu vườn nho trống, chơi chỉ cần chuyển cho người tiếp theo. Một số biến thể của trò chơi bốc thăm giới hạn số ô mà người chơi phải rút, tức là tối đa 3 ô. Nếu người chơi rút số ô đã chỉ định và không khớp, hãy chơi di chuyển với người tiếp theo.
  • Đường chơi có hai hoặc nhiều nhánh (các đầu có thể chơi được) bất kỳ lúc nào. Người chơi có thể chơi trên bất kỳ nhánh nào có cùng số pips với một ô của họ. Đôi được đặt ở góc vuông với tất cả các ô khác. (Lưu ý:Một số biến thể có các quy tắc khác nhau về đường chơi.)

Chiến thắng trong trò chơi Dominoes

  • Trong một trò chơi hòa, người chơi đầu tiên chơi tất cả các ô của họ sẽ thắng. Trò chơi có thể (hoặc có thể không) tiếp tục cho đến khi cả hai đầu của đường chơi bị chặn và không còn quân cờ domino nào nữa trong vườn nho.
  • Trong trò chơi xếp hình, người chơi có ít ô nhất sẽ thắng khi các ô cuối bị chặn và không ai còn ô có thể chơi được.

Chấm điểm

Trong một trò chơi hòa, tổng số pips trên các quân cờ domino còn lại của người thua cuộc là số điểm của người chiến thắng. Trong trò chơi khối, người có tổng số pips còn lại thấp nhất sẽ thắng; người chơi này trừ tổng của họ với tổng của đối thủ; sự khác biệt là điểm của người chiến thắng. Lưu ý:Trong một số trò chơi, người chơi phải đạt được số điểm tối thiểu để giành chiến thắng.

Mô hình dữ liệu Dominoes

Mô hình dữ liệu domino bao gồm hai lĩnh vực chủ đề:

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

Chúng ta sẽ thảo luận về từng lĩnh vực chủ đề theo thứ tự được liệt kê.




Chủ đề Khu vực 1:Người chơi, Dominoes và Trò chơi

Chủ đề này chứa những gì chúng ta có thể gọi là các thực thể chính của trò chơi cờ domino:người chơi, ô xếp domino và trò chơi.

Bảng "người chơi" chứa thông tin chi tiết về hồ sơ của tất cả người chơi cá nhân. Các cột trong bảng này là:

  • id –Một ID duy nhất cho mỗi người chơi.
  • player_name - Họ và tên của người chơi.

Các cột sau trong bảng này lưu trữ thống kê trò chơi của từng người chơi:

  • num_block_game_played - Số lượng trò chơi khối mà người chơi đã chơi.
  • num_draw_game_played - Số trò chơi bốc thăm mà người chơi đã chơi.
  • num_block_game_win - Số trò chơi khối mà người chơi đã thắng.
  • num_draw_game_win - Số ván hòa mà người chơi thắng.
  • highest_block_score - Điểm số cao nhất của người chơi từ trước đến nay trong trò chơi đánh khối.
  • highest_draw_score - Điểm số cao nhất của người chơi trong trò chơi hòa.

bone ”Bảng chứa thông tin về chính các ô xếp domino. Các cột trong bảng này là:

  • id - Một chìa khóa duy nhất cho mỗi ô. Khóa này sẽ được tham chiếu bởi các bảng khác.
  • first_face_value - Số chấm trên mặt đầu tiên (cuối).
  • second_face_value - Số chấm trên mặt thứ hai (cuối).

game ”Bảng lưu trữ thông tin về trò chơi. Các cột trong bảng này là:

  • id - Khóa chính của bảng này; nó xác định duy nhất mỗi trò chơi.
  • game_variant - Biến thể được chơi, tức là "chặn" hoặc "vẽ".
  • score_to_win - Điểm số tối thiểu cần thiết để thắng một trò chơi.
  • num_round_complete - Số vòng chơi trong trò chơi đó. Mỗi trò chơi thường bao gồm nhiều vòng và kéo dài cho đến khi ai đó đạt được điểm chiến thắng.

player_in_game ”Bảng cho chúng tôi biết những người chơi tham gia vào một trò chơi. Bên cạnh player_id , bảng này chứa điểm số hiện tại của họ trong player_curr_score cột. Khi người chơi thắng, chữ “Y” được đặt trong is_winner cột. Vì nhiều người chơi có thể thắng một trò chơi, chúng tôi sẽ ghi lại chi tiết này ở đây thay vì trong “game " bàn.

Chủ đề Khu vực 2:Tiến trình và Theo dõi Trò chơi

Như bất kỳ người chơi cờ domino nào đều biết, hành động thực sự của trò chơi được tạo nên từ bàn tay, vòng tròn và di chuyển - những chi tiết nhỏ tạo nên hoặc phá vỡ một trò chơi. Chủ đề này sẽ xử lý các chi tiết đó.

Một trò chơi thường yêu cầu nhiều vòng. Đối với mỗi vòng, một số ô được phân phối cho mỗi người chơi. Hãy gọi việc phân phối ô xếp này là một “bàn tay”. Mỗi khi một vòng bắt đầu, mỗi người chơi có một tay các ô để họ có thể chơi. (Lưu ý:Trong một số trò chơi bốc thăm, số ô trong mỗi ván bài có thể vượt quá bảy.)

round ”Bảng lưu trữ thông tin chi tiết của mỗi vòng. Điều này bao gồm một ảnh chụp nhanh về trạng thái chơi hiện tại, ví dụ:giá trị ô hiện tại ở các góc nhánh. Các cột trong bảng này là:

  • id - Một số duy nhất được chỉ định cho mỗi vòng.
  • game_id - Tham khảo “game ”Và cho biết trò chơi thuộc về vòng đó.
  • left_branch_value - Giữ giá trị của bên trái góc nhánh. Bất kỳ ô nào có giá trị phù hợp (số pips) đều có thể được phát trong lần di chuyển tiếp theo.
  • right_branch_value - Nắm giữ giá trị của quyền góc nhánh. Bất kỳ ô nào có giá trị phù hợp (số pips) đều có thể được phát trong lần di chuyển tiếp theo.
  • curr_num_tiles_boneyard - Số lượng gạch trong boneyard tại bất kỳ thời điểm nào. Giá trị cột này sẽ bị giảm đi một lần mỗi khi người chơi vẽ một ô. Cột này hữu ích trong các trò chơi bốc thăm.

hand ”Bảng ghi lại tất cả các ô trong tay người chơi trong một hiệp đấu. Các cột trong bảng này là:

  • id - Khóa chính của bảng này.
  • round_id - Tham khảo “round ”Và cho biết vòng liên quan.
  • player_id - Tham khảo “player ”Và cho biết trình phát có liên quan.
  • bone_id - Tham khảo “bone ”Và chỉ ra những ô mà người chơi có / có trong tay.
  • is_played - Cho dù một ô đã được chơi. Ban đầu, cột này sẽ trống. Nó sẽ chỉ được điền bằng 'Y' khi một ô được phát. Không thể chơi cùng một ô hai lần trong một hiệp.
  • is_fetched –Một ‘Y’ trong cột này biểu thị rằng các ô đã được vẽ trong một lần di chuyển. Hữu ích cho các trò chơi rút thăm.

move ”Bảng ghi lại trình tự di chuyển cho mỗi ô được chơi trong một vòng. Các cột trong bảng này là:

  • id - Xác định duy nhất mỗi nước đi trong một hiệp.
  • round_id - Tham khảo “round ”Và cho biết vòng liên quan.
  • move_type - Kiểu di chuyển, tức là chuyền (P), rút ​​(D) hoặc nằm xuống (L).
  • hand_id - Tham khảo “hand ”Và cho biết người chơi nào đang di chuyển.
  • branch_played_at - Báo hiệu nhánh (trái hoặc phải) nơi thực hiện động thái. Cột này sẽ chỉ được điền trong trường hợp có động thái "tạm dừng".
  • move_sequence - Cột số này bắt đầu bằng 1 và tăng lên một sau mỗi lần di chuyển.

player_round_score ”Bảng lưu trữ điểm số của từng người chơi cho mỗi vòng. Bảng này có một khóa chính tổng hợp được tạo thành từ game_id , player_idround_id cột. game_idplayer_id các cột được tham chiếu từ “player_in_game " bàn.

Bạn sẽ thêm gì vào Mô hình dữ liệu Domino?

Tàu cơ bản, Tàu Mexico, Chân gà, Bendomino, Cyprus, Chữ thập Maltese, Matador, Spinner - đây chỉ là một số biến thể của dominos! Bạn nghĩ sẽ cần những gì để mở rộng mô hình này để đáp ứng các trò chơi đó? Bạn sẽ thay đổi hoặc thêm điều gì vào mô hình cơ bản? Hãy cho chúng tôi biết trong phần bình luận bên dưới!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối MS SQL với IRI Workbench

  2. Cách cài đặt và cấu hình ClickHouse trên Ubuntu 20.04

  3. Điều chỉnh:Một nơi tốt để bắt đầu

  4. Cách tăng tốc truy vấn SQL

  5. SQL giữa toán tử