Permainan papan seperti domino masih sangat populer. Mari kita lihat domino dari sudut pandang pemodelan data.
Permainan domino telah ada selama ratusan tahun, dan dimainkan di seluruh dunia. Seperti yang Anda duga, ini berarti banyak variasi dalam permainan! Dalam artikel ini, kita akan memeriksa model data yang dapat mendukung varian paling umum – menggambar dan memblokir. Dasar dari kedua varian ini hampir sama; hanya ada sedikit perbedaan dalam aturan. Domino dapat dimainkan oleh dua pemain atau lebih, jadi model data kami akan mendukung banyak pemain.
Mari kita mulai dengan beberapa dasar permainan domino, lalu beralih ke model data.
Apa yang Perlu Kita Ketahui Tentang Domino?
- Satu set domino berisi 28 buah permainan, yang disebut 'tulang' atau 'ubin'. Mereka berbentuk persegi panjang, dengan garis di tengah yang membagi setiap ubin menjadi dua ujung (atau wajah) persegi.
- Setiap ujung memiliki sejumlah titik mulai dari 0 hingga 6. Titik-titik ini disebut 'pips'.
- Ubin dengan nilai yang sama di kedua ujungnya disebut 'ganda', mis. double-enam memiliki enam pip di setiap ujungnya.
- Kumpulan kartu domino di permukaan permainan disebut garis permainan. Ujung garis permainan disebut sudut cabang. Pojok cabang adalah tempat pemain dapat memainkan ubin baru.
Memulai Game
- Semua ubin diletakkan menghadap ke bawah di atas meja.
- Jika ada 2-3 pemain, setiap pemain menarik 7 ubin. Jika ada 4-5 pemain, setiap pemain menarik 5 ubin. Ubin yang tersisa dibiarkan dalam tumpukan yang disebut 'boneyard'.
- Pemain dengan dobel tertinggi mendapat langkah pertama. Permainan biasanya bergerak searah jarum jam.
- Untuk memainkan domino, pemain meletakkan ubin di sebelah ubin yang sudah diletakkan di atas meja. Ujung ubin harus cocok, yaitu ujung dua pip hanya dapat ditempatkan di sebelah ujung dua pip lainnya. (Catatan:Beberapa varian game memiliki aturan berbeda terkait pencocokan.)
Aturan Permainan
- Pemain pertama meletakkan double face tertinggi di atas meja.
- Pemain berikutnya harus memainkan kartu domino yang cocok dengan kartu domino yang telah dipasang sebelumnya.
- Pemain yang tidak dapat menandingi salah satu ujung formasi harus “mengetuk” atau “mengoper”. Dalam permainan blok, ini berarti bahwa permainan lolos ke pemain berikutnya. Dalam permainan seri, pemain harus menggambar ubin dari boneyard sampai mereka menemukan ubin yang dapat dimainkan. Jika boneyard kosong, mainkan cukup lewat ke orang berikutnya. Beberapa varian dari permainan undian membatasi jumlah ubin yang harus ditarik pemain, yaitu hingga 3 ubin. Jika pemain menarik jumlah ubin yang ditentukan dan tidak mendapatkan kecocokan, permainan berpindah ke orang berikutnya.
- Alur permainan memiliki dua cabang atau lebih (ujung yang dapat dimainkan) kapan saja. Pemain dapat bermain di cabang mana pun yang memiliki jumlah pip yang sama dengan salah satu ubin mereka. Ganda ditempatkan di sudut kanan ke semua ubin lainnya. (Catatan:Beberapa varian memiliki aturan berbeda tentang alur permainan.)
Memenangkan Game Domino
- Dalam permainan seri, pemain pertama yang memainkan semua ubinnya menang. Permainan dapat (atau mungkin tidak) berlanjut sampai kedua ujung garis permainan diblokir dan tidak ada lagi domino yang tersisa di boneyard.
- Dalam permainan blok, pemain dengan ubin paling sedikit menang ketika ujungnya diblokir dan tidak ada yang memiliki ubin yang bisa dimainkan.
Skor
Dalam permainan seri, jumlah pips pada sisa domino yang kalah adalah skor pemenang. Dalam permainan blok, orang dengan jumlah sisa pip terendah menang; pemain ini mengurangi jumlah mereka dari jumlah lawan mereka; perbedaannya adalah skor pemenang. Catatan:Dalam beberapa permainan, pemain harus mencapai skor minimum untuk menang.Model Data Domino
Model data domino terdiri dari dua bidang subjek:
“Entities: players, dominoes and games”
dan“Game progress and tracking”
Kami akan membahas setiap bidang subjek sesuai urutannya.
Area Subjek 1:Pemain, Domino, dan Game
Area subjek ini berisi apa yang dapat kita sebut entitas utama permainan domino:pemain, ubin domino, dan permainan.
Tabel “pemain” menyimpan detail profil untuk semua pemain individu. Kolom dalam tabel ini adalah:
id
–ID unik untuk setiap pemain.player_name
– Nama depan dan belakang pemain.
Kolom berikut dalam tabel ini menyimpan statistik permainan setiap pemain:
num_block_game_played
– Jumlah game blok yang dimainkan pemain.num_draw_game_played
– Jumlah permainan undian yang dimainkan pemain.num_block_game_win
– Jumlah permainan blok yang dimenangkan oleh pemain.num_draw_game_win
– Jumlah permainan seri yang dimenangkan oleh pemain.highest_block_score
– Skor tertinggi pemain dalam game blok.highest_draw_score
– Skor tertinggi pemain dalam permainan seri.
“bone
” tabel berisi informasi tentang ubin domino itu sendiri. Kolom dalam tabel ini adalah:
id
– Kunci unik untuk setiap ubin. Kunci ini akan direferensikan oleh tabel lain.first_face_value
– Jumlah titik pada wajah pertama (akhir).second_face_value
– Jumlah titik pada wajah kedua (akhir).
“game
” tabel menyimpan informasi tentang game. Kolom dalam tabel ini adalah:
id
– Kunci utama tabel ini; itu secara unik mengidentifikasi setiap game.game_variant
– Varian yang dimainkan, yaitu “block” atau “draw”.score_to_win
– Skor minimum yang dibutuhkan untuk memenangkan permainan.num_round_complete
– Jumlah putaran yang dimainkan dalam permainan itu. Setiap permainan biasanya berisi beberapa putaran dan berlangsung sampai seseorang mencapai skor kemenangan.
“player_in_game
” tabel memberi tahu kita apa yang dilakukan pemain dalam permainan. Selain player_id
, tabel ini menyimpan skor mereka saat ini di player_curr_score
kolom. Ketika seorang pemain menang, "Y" ditempatkan di is_winner
kolom. Karena lebih dari satu pemain dapat memenangkan permainan, kami akan mencatat detail ini di sini, bukan di “game
" meja.
Area Subjek 2:Kemajuan dan Pelacakan Game
Seperti yang diketahui oleh setiap pemain domino, aksi nyata gim ini terdiri dari tangan, putaran, dan gerakannya – detail kecil yang membuat atau menghancurkan gim. Area subjek ini akan menangani detail tersebut.
Sebuah permainan biasanya membutuhkan beberapa putaran. Untuk setiap putaran, sejumlah ubin dibagikan ke setiap pemain. Sebut saja distribusi ubin ini sebagai "tangan". Setiap kali putaran dimulai, setiap pemain memiliki kartu yang bisa mereka mainkan. (Catatan:Dalam beberapa permainan seri, jumlah ubin di setiap tangan dapat melebihi tujuh.)
“round
” tabel menyimpan detail setiap putaran. Ini termasuk snapshot dari status permainan saat ini, mis. nilai ubin saat ini di sudut cabang. Kolom dalam tabel ini adalah:
id
– Nomor unik yang ditetapkan untuk setiap putaran.game_id
– Merujuk pada “game
” dan menunjukkan permainan yang termasuk dalam ronde tersebut.left_branch_value
– Memegang nilai kiri sudut cabang. Setiap ubin dengan nilai yang cocok (jumlah pips) dapat dimainkan di langkah berikutnya.right_branch_value
– Memegang nilai kanan sudut cabang. Setiap ubin dengan nilai yang cocok (jumlah pips) dapat dimainkan di langkah berikutnya.curr_num_tiles_boneyard
– Jumlah ubin di boneyard pada waktu tertentu. Nilai kolom ini akan berkurang satu setiap kali pemain menggambar ubin. Kolom ini berguna selama permainan undian.
“hand
” tabel mencatat semua ubin di tangan pemain selama putaran. Kolom dalam tabel ini adalah:
id
– Kunci utama tabel ini.round_id
– Merujuk pada “round
” tabel dan menunjukkan putaran yang relevan.player_id
– Merujuk pada “player
” tabel dan menunjukkan pemain yang relevan.bone_id
– Merujuk pada “bone
” dan menunjukkan ubin apa yang dimiliki/dimiliki pemain di tangan mereka.is_played
– Apakah ubin telah dimainkan. Awalnya, kolom ini akan menjadi nol. Ini akan diisi dengan 'Y' hanya ketika ubin dimainkan. Ubin yang sama tidak dapat dimainkan dua kali dalam satu putaran.is_fetched
–A 'Y' di kolom ini menandakan bahwa ubin telah digambar dalam satu gerakan. Berguna untuk permainan menggambar.
“move
” tabel mencatat urutan gerakan untuk setiap ubin yang dimainkan dalam satu putaran. Kolom dalam tabel ini adalah:
id
– Secara unik mengidentifikasi setiap gerakan dalam satu putaran.round_id
– Merujuk pada “round
” tabel dan menunjukkan putaran yang relevan.move_type
– Jenis gerakan, yaitu pass (P), draw (D) atau lay down (L).hand_id
– Merujuk pada “hand
” tabel dan menunjukkan pemain mana yang bergerak.branch_played_at
– Menandakan cabang (kiri atau kanan) tempat gerakan dilakukan. Kolom ini hanya akan diisi jika terjadi gerakan 'berbaring'.move_sequence
– Kolom angka ini dimulai dengan 1 dan ditambah satu setelah setiap gerakan.
“player_round_score
” tabel menyimpan skor untuk masing-masing pemain untuk setiap putaran. Tabel ini memiliki kunci utama gabungan yang terdiri dari game_id
, player_id
, dan round_id
kolom. game_id
dan player_id
kolom direferensikan dari “player_in_game
" meja.
Apa yang Akan Anda Tambahkan ke Model Data Domino?
Kereta Dasar, Kereta Meksiko, Kaki Ayam, Bendomino, Siprus, Maltese Cross, Matador, Spinner – ini hanyalah beberapa dari banyak varian domino! Menurut Anda apa yang diperlukan untuk memperluas model ini agar dapat mengakomodasi permainan tersebut? Apa yang akan Anda ubah atau tambahkan ke model dasar? Beri tahu kami di bagian komentar di bawah!