Saya menulis versi komputer dari permainan Dominion . Ini adalah permainan kartu berbasis giliran di mana kartu aksi, kartu harta, dan kartu poin kemenangan diakumulasikan ke dalam dek pribadi pemain. Saya memiliki struktur kelas yang cukup berkembang, dan saya mulai mendesain logika permainan. Saya menggunakan python, dan saya dapat menambahkan GUI sederhana dengan pygame nanti.
Urutan giliran pemain diatur oleh mesin negara yang sangat sederhana. Bergantian berlalu searah jarum jam, dan seorang pemain tidak bisa keluar dari permainan sebelum game berakhir. Permainan satu belokan juga merupakan mesin negara; secara umum, pemain melewati "fase aksi", "fase beli", dan "fase pembersihan" (dalam urutan itu). Berdasarkan jawaban atas pertanyaan Bagaimana menerapkan mesin game berbasis giliran? , mesin negara adalah teknik standar untuk situasi ini.
Masalah saya adalah bahwa selama fase aksi pemain, dia dapat menggunakan kartu aksi yang memiliki efek samping, baik pada dirinya sendiri, atau pada satu atau lebih pemain lain. Misalnya, satu kartu aksi memungkinkan pemain untuk mengambil belokan kedua segera setelah kesimpulan dari belokan saat ini. Kartu aksi lain menyebabkan semua pemain lain membuang dua kartu dari tangan mereka. Namun kartu aksi lain tidak melakukan apa-apa untuk giliran saat ini, tetapi memungkinkan pemain untuk menggambar kartu tambahan pada giliran berikutnya. Untuk membuat segalanya lebih rumit, sering ada ekspansi baru ke permainan yang menambahkan kartu baru. Sepertinya saya bahwa pengkodean keras hasil setiap kartu aksi ke dalam mesin keadaan gim akan jelek dan tidak dapat diadaptasi. Jawaban untuk Loop Strategi Berbasis Turn tidak masuk ke tingkat detail yang membahas desain untuk menyelesaikan masalah ini.
Apa jenis model pemrograman yang harus saya gunakan untuk mencakup fakta bahwa pola umum untuk bergiliran dapat dimodifikasi oleh tindakan yang terjadi dalam belokan? Haruskah objek game melacak efek dari setiap kartu aksi? Atau, jika kartu harus menerapkan efeknya sendiri (misalnya dengan mengimplementasikan antarmuka), pengaturan apa yang diperlukan untuk memberi mereka kekuatan yang cukup? Saya telah memikirkan beberapa solusi untuk masalah ini, tetapi saya bertanya-tanya apakah ada cara standar untuk menyelesaikannya. Secara khusus, saya ingin tahu objek / kelas / apa pun yang bertanggung jawab untuk melacak tindakan yang harus dilakukan setiap pemain sebagai konsekuensi dari kartu aksi yang dimainkan, dan juga bagaimana itu berkaitan dengan perubahan sementara dalam urutan normal dari mesin turn state.