Pola desain aturan / validasi


8

Pola desain apa yang dapat digunakan untuk membuat sistem aturan / validasi untuk permainan seperti catur (ini hanyalah contoh sederhana, permainan yang sebenarnya membutuhkan perangkat aturan yang lebih sulit)

Saya telah membaca beberapa pertanyaan di situs ini dan belum menemukan jawaban konklusif atau jawaban yang menunjukkan saya ke arah yang benar.

Sistem ini akan membutuhkan yang berikut:

  • Setiap objek yang memiliki aturan yang diterapkan padanya harus mengimplementasikan antarmuka spesifik dengan metode yang merupakan titik awal untuk validasi
  • Aturan harus diterapkan dalam 2 langkah: pertama, perlu divalidasi (dapat menggadaikan A pindah ke kuadrat D4), jika benar maka jalankan metode A jika salah maka jalankan metode B
  • Setiap objek dapat memiliki beberapa aturan yang perlu diterapkan dalam urutan tertentu. Ketika aturan 1 selesai, aturan 2 kemudian harus mulai memvalidasi dll
  • Setiap aturan yang terpisah (misalnya: hanya bisa bergerak 1 persegi, hanya bisa bergerak secara diagonal dll) harus di kelasnya sendiri dan harus dapat digunakan kembali dan diterapkan pada objek yang membutuhkan aturan.
  • Perhatikan ini akan digunakan dalam game multipemain di backend
  • Perhatikan bahwa setiap aturan memerlukan beberapa objek untuk menguji validitasnya, misalnya, biasanya pion dapat bergerak 1 persegi, sekarang sqaure berikutnya pada gameboard diisi oleh pion lawan Anda. Hasil: pion Anda tidak bisa bergerak. Pion harus menyertakan posisi pion lain, atau gameboard dalam validasinya.

Kata lain untuk aturan ini adalah batasan perilaku.


Jawaban:


3

Pikirkan permainan sebagai urutan negara , dipisahkan oleh gerakan . Setiap kali pemain bergerak, status baru dihasilkan.

masukkan deskripsi gambar di sini
(Ini seperti komik XKCD ini !)

Bagaimana

Buat kelas Move, yang mewakili satu gerakan yang dilakukan oleh satu pemain . (Dalam Reversi, deskripsi yang cukup adalah satu set koordinat papan tempat sepotong harus ditempatkan. Dalam Catur, koordinat asal dan tujuan sudah cukup.)

Buat kelas GameState, yang mewakili kondisi permainan pada satu waktu . (Dalam Reversi, deskripsi yang cukup adalah isi papan dan giliran pemain mana. Di Catur, Anda juga perlu menyimpan apakah masih memungkinkan bagi setiap pemain untuk bermain kingside atau queenside.)

Sekarang, Anda mungkin dapat membayangkan GameStatememiliki suatu isMoveLegal(Move)metode. Bagaimanapun, ini berisi semua informasi yang diperlukan untuk membuat keputusan itu.

Mengapa

Desain ini dengan bersih mengisolasi logika aturan, mengurangi ketergantungan antar-komponen.

Itu juga membuat AI mudah! Anda dapat dengan mudah menghasilkan semua gerakan yang mungkin dari GameState, memeriksa apakah itu legal, menghasilkan lebih banyak GameStatedari itu dan pada dasarnya membangun pohon yang dapat Anda gunakan untuk minimax , mungkin dengan pemangkasan alpha-beta .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.