Jika Anda adalah penggemar Star Trek, Anda mungkin tahu bahwa Kapten Kirk dan Mr. Spock sering memainkan varian catur yang disebut Catur Tri-Dimensi, atau catur 3D, sebuah permainan yang mirip dengan catur standar tetapi dengan perbedaan yang mencolok. Dalam artikel ini, kami akan membuat model data untuk aplikasi catur 3D yang memungkinkan pemain untuk bersaing satu sama lain. Semangati kami, Scotty!
Konsep Catur 3D
Meskipun catur itu sendiri sudah merupakan permainan yang kompleks, menggabungkan papan dan beberapa set bidak dapat meningkatkan kompleksitas permainan secara signifikan.
Dalam catur 3D, papan ditumpuk dalam lapisan paralel, dan aturan gerakan khusus berlaku untuk bidak tertentu, tergantung di mana letaknya. Misalnya, pion di papan tengah dapat meniru perilaku ratu. Potongan juga dapat berpindah dari satu papan ke papan lainnya, dengan batasan tertentu yang diterapkan, dan papan itu sendiri bahkan dapat bergerak dan berputar. Tidak heran Kirk dan Spock sangat menikmati catur 3D—ini membutuhkan cukup banyak kemahiran taktis!
Catur Tri-Dimensi juga menyimpang dari catur standar dalam hal properti papannya. Dalam catur 3D, ada tujuh papan yang berbeda dengan sifat yang berbeda. Tiga dari papan ini berukuran 4x4, sedangkan empat papan lainnya berukuran 2x2. Anda dapat memindahkan papan yang lebih kecil ini.
Model data kami diharapkan akan mencakup semua yang kami butuhkan untuk memainkan permainan catur 3D di aplikasi web. Kami akan bekerja dengan asumsi bahwa segala sesuatu dapat bergerak dan papan dapat memberlakukan batasan gerakan yang berbeda pada bagian yang sama. Ini harus cukup untuk mencakup semua kemungkinan varian catur 3D. Mari langsung masuk ke model data!
Model Data
Model data kami terdiri dari tiga bagian:
- Pemain dan Game
- Penyiapan Permainan
- Cocok
Sekarang kita akan membahas masing-masing area ini secara lebih rinci.
Bagian 1:Pemain dan Game
Segala sesuatu dalam model kami terkait langsung atau tidak langsung dengan game. Tentu saja, permainan tidak dapat berjalan tanpa pemain!
Daftar semua pemain disimpan di player
meja. Dalam model kami, semua pemain adalah pengguna terdaftar dari aplikasi kami. Untuk setiap pemain, kami akan menyimpan informasi berikut:
first_name
danlast_name
– masing-masing nama depan dan belakang pemain.user_name
– nama pengguna yang dipilih pemain, yang harus unik.password
– nilai hash dari kata sandi pemain.nickname
– nama layar pemain, yang, seperti nama pengguna mereka, harus unik.email
– alamat email pemain, yang akan mereka berikan selama proses pendaftaran. Kode yang diperlukan untuk menyelesaikan proses pendaftaran akan dikirimkan ke email ini.confirmation_code
– kode yang dikirimkan ke alamat email pemain untuk menyelesaikan proses pendaftaran mereka.confirmation_date
– stempel waktu saat pemain mengonfirmasi alamat email mereka. Atribut ini akan menyimpan NULL hingga pemain mengonfirmasi email mereka.current_rating
– peringkat pemain saat ini, dihitung berdasarkan kinerja mereka melawan pemain lain. Pemain akan memulai dengan beberapa nilai awal, dan peringkat mereka akan meningkat atau menurun sesuai dengan peringkat lawan dan hasil permainan mereka.
result
tabel adalah kamus yang menyimpan nilai dari semua kemungkinan hasil permainan yang unik, yaitu “in_progress”, “draw”, “win”, dan “lose”.
Mungkin tabel terpenting dalam keseluruhan model data adalah game
, yang menyimpan informasi tentang setiap permainan catur 3D. Dalam model ini, kami akan mengasumsikan bahwa dua pemain manusia akan bersaing satu sama lain dan mereka dapat memilih untuk menyimpan status permainan mereka saat ini dan melanjutkannya di lain waktu (seperti jika mereka ingin melakukan satu gerakan per hari, di dalam hal ini para pemain akan masuk ke aplikasi, melihat gerakan terbaru lawan mereka, memikirkan gerakan mereka sendiri, mengeksekusi gerakan mereka, dan kemudian keluar). Kami akan menyimpan nilai berikut dalam tabel ini:
player_id_1
danplayer_id_2
– referensi keplayer
tabel yang menunjukkan kedua peserta permainan. Seperti yang disebutkan, kami berasumsi bahwa permainan akan benar-benar terjadi antara dua pemain manusia.number_of_moves
– menunjukkan jumlah gerakan yang telah dieksekusi sejauh ini dalam game saat ini. Saat permainan dimulai, angka ini disetel ke 0 dan bertambah 1 setiap kali pemain melakukan gerakan.player_id_next
– referensi ke pemain yang harus melakukan langkah selanjutnya dalam game saat ini.result_id_1
danresult_id_2
– referensi keresult
tabel yang menyimpan hasil pertandingan untuk setiap pemain.player_1_points_won
danplayer_2_points_won
– menunjukkan jumlah poin yang diberikan kepada pemain, sesuai dengan hasil permainan.
Kami akan membahas bagaimana pemain dapat melacak semua gerakan di bagian Pertandingan di akhir artikel ini. Untuk saat ini, kita akan beralih ke Penyiapan Game.
Bagian 2:Penyiapan Game
Bagian Pengaturan Game berisi deskripsi semua papan dan bidak dalam catur 3D, serta daftar semua gerakan legal yang dapat dilakukan pemain.
Seperti yang kami sebutkan sebelumnya, catur 3D sering melibatkan lebih dari satu papan. Papan ini dapat mematuhi dimensi 8x8 standar dengan posisi tetap, tetapi tidak perlu demikian. Daftar semua papan disimpan di board
meja. Untuk setiap papan, kami akan menyimpan board_name
yang unik , starting_position
papan dalam kaitannya dengan koordinat 3D yang kami pilih, dan semua details
additional tambahan .
Selanjutnya, kita akan menentukan semua jenis bidak yang mungkin muncul di papan catur kita. Untuk melakukannya, kita akan menggunakan piece_type
kamus. Selain kunci utamanya, kamus ini hanya berisi satu nilai unik, type_name. Untuk set catur standar, kami berharap untuk melihat nilai "pion", "benteng", "ksatria", "uskup", "raja", dan "ratu" dalam kamus ini.
Daftar semua bidak individual yang digunakan dalam permainan catur 3D disimpan di piece
meja. Untuk setiap bagian, kami akan menyimpan informasi berikut:
piece_name
– nama unik yang menjelaskan jenis bidak dan posisi awalnya.starting_position
– nilai yang menunjukkan papan dan bujur sangkar yang tepat di mana bidak ditempatkan pada awalnya.board_id
– referensi ke papan tempat bidak ditempatkan.piece_type_id
– referensi yang menunjukkan jenis karya tersebut.
Terakhir, kita akan menggunakan move_type
meja untuk menyimpan daftar semua kemungkinan gerakan yang dapat dilakukan bidak di papan kami (juga gerakan apa pun yang dapat dilakukan papan itu sendiri). Ingat dari pendahuluan bahwa papan tertentu menerapkan aturan gerakan khusus pada bidaknya. Untuk setiap gerakan, kami akan menentukan yang berikut:
type_name
– nama yang akan kita gunakan untuk menunjukkan gerakan yang telah dilakukan, yang tidak akan menjadi nilai unik (misalnya, kita dapat “memajukan bidak 1 kotak ke depan” sebanyak yang diperlukan).piece_type_id
– referensi untuk jenis potongan yang dipindahkan. Jika nilai ini NULL, maka pergerakannya menyangkut seluruh papan dan bukan bagian tertentu.board_id
– menunjukkan papan tempat gerakan ini akan dilakukan (jika bidak catur bergerak). Jika papan itu sendiri bergerak, nilai ini secara alami akan mewakili papan yang sedang dipindahkan. Bersama dengan dua atribut sebelumnya, ini membentuk kunci unik untuk tabel ini.is_piece_move
danis_board_move
– menunjukkan apakah suatu gerakan menyangkut bidak catur atau papan. Hanya satu dari tanda ini yang dapat disetel ke true untuk gerakan tertentu.
Karena terlalu banyak gerakan dan rotasi yang perlu dipertimbangkan, kami tidak akan menyimpan semua kemungkinan seperti itu di database kami. Sebagai gantinya, kami hanya akan menyimpan nama pemindahan dan menerapkan logika sebenarnya dalam aplikasi itu sendiri. Misalnya, kita akan mendefinisikan bahwa pion dapat maju ke depan satu kotak, memajukan dua kotak dari posisi awalnya, mengambil bidak secara diagonal, berpindah dari satu papan ke papan lainnya, dan bergerak sebagai ratu di papan tengah. Jadi, kita akan memiliki lima kemungkinan jenis gerakan yang ditentukan untuk pion, bergantung pada papan tempat mereka ditempatkan dan posisinya saat ini.
Bagian 3:Kecocokan
Kami hampir selesai! Bagian terakhir dari model kami bernama Matches dan berisi tiga tabel baru yang akan kami gunakan untuk melacak riwayat pergerakan dalam permainan catur 3D. Tabel yang tersisa hanyalah salinan dari tabel lain dari model data kami, yang membantu menghindari hubungan yang tumpang tindih. Kami juga akan menyimpan posisi saat ini dari semua papan dan bagiannya di area ini. Mari selami.
move
tabel sebenarnya adalah tabel yang paling kompleks di bagian ini. Ini berisi daftar semua gerakan yang dilakukan selama pertandingan. Tabel ini akan menampilkan daftar semua gerakan ke pemain, yang nantinya dapat digunakan untuk meninjau atau menganalisis pertandingan. Untuk setiap gerakan, kami akan menyimpan yang berikut ini:
game_id
– referensi kegame
di mana gerakan itu dilakukan.player_id
– referensi keplayer
siapa yang bergerak.move_in_the_game
- nomor urut gerakan. Angka ini, dikombinasikan dengan posisi awal bidak dan semua gerakan lainnya, dapat digunakan untuk membuat ulang seluruh permainan. Idenya adalah untuk memungkinkan pemain mensimulasikan game setelah selesai sehingga mereka dapat menganalisis hasil pertandingan.piece_id
– referensi kepiece
yang dipindahkan. Ini memudahkan untuk melacak pergerakan sebuah karya dari awal hingga akhir (terutama untuk tujuan analisis).piece_type_id
– referensi untuk jenis potongan yang dipindahkan. Sementara referensi bidak akan selalu tetap, jenisnya dapat berubah sepanjang permainan (seperti jika bidak dipromosikan). Jika kita memindahkan papan, atribut ini akan berisi nilai NULL.board_id
– referensi keboard
tempat perpindahan itu terjadi.move_notation
– notasi yang disepakati yang akan kita gunakan untuk mewakili gerakan.
Dua tabel yang tersisa memungkinkan kita untuk menyimpan snapshot dari status permainan saat ini dalam database, yang berguna jika pemain ingin melanjutkan permainan di lain waktu.
current_board_position
digunakan untuk menyimpan posisi semua papan dalam sistem koordinat 3D kami. Ini diperlukan untuk permainan catur 3D di mana setidaknya satu papan dapat mengubah posisinya. Untuk setiap catatan dalam tabel ini, kami akan menyimpan referensi ke permainan dan papan terkait, serta notasi posisi papan. Dua pasangan atribut tertentu, game_id
+ board_id
dan game_id
+ position_notation
, bentuk kunci unik untuk tabel ini.
Tabel terakhir kami adalah current_piece_position
, yang menyimpan referensi ke game terkait, bidak tertentu, jenis bidak, dan notasi posisi untuk bidak tersebut. Kami akan kembali memiliki dua pasang atribut yang berfungsi sebagai kunci unik untuk tabel ini:game_id
dan piece_id
pasangkan dan game_id
dan position_notation
pasangan.
Kesimpulan
Itu saja untuk model data ini—dengan bangga kami umumkan bahwa Kapten Kirk dan Mr. Spock sekarang dapat bermain catur 3D di komputer!
Apakah Anda memiliki saran untuk meningkatkan model data kami? Jangan ragu untuk meninggalkan komentar Anda di bawah. Panjang umur dan sejahtera ??