Saya memprogram permainan strategis menggunakan Flash. Gimnya bekerja sangat mirip dengan gim terkenal "Travian".
Masalah saya adalah sebagai berikut: Saya mencoba untuk membuat perhitungan pasukan yang hilang sebagai akibat dari pertarungan antara dua pasukan. Kedua pasukan memiliki tipe unit yang berbeda. Beberapa dari mereka lebih kuat terhadap beberapa unit lain dan lebih lemah terhadap tipe lainnya.
Bagaimana saya bisa menempatkan efek dari perbedaan ini dalam persamaan pertarungan?
Tampaknya mudah jika mereka hanya memiliki poin att dan def saja, tetapi ketika itu tergantung pada tipe ketergantungan unit, saya tersesat.
game-design
architecture
mathematics
Ali Albahrani
sumber
sumber
Jawaban:
Selain mendukung saran Amit untuk melihat persamaan Lanchester, saya hanya ingin menambahkan bahwa ini adalah keputusan desain game, bukan fakta empiris yang dapat kami berikan kepada Anda. Jika Anda ingin mempertimbangkan tipe unit, Anda harus memutuskan apa artinya itu. Ini berarti memilih persamaan yang mencakup semua faktor yang Anda ingin gameplay Anda sertakan. Jika Anda ingin infanteri lebih baik daripada kavaleri, maka Anda harus memutuskan apa artinya - mis. Berapa banyak kavaleri yang Anda butuhkan untuk menyamai 100 infantri? Dan apakah penting siapa yang menyerang siapa? Anda tampaknya menyiratkan bahwa hanya memberikan nilai serangan dan pertahanan yang berbeda pada infantri dan kavaleri tidak cukup baik - mengapa demikian? Apa lagi yang ingin Anda wakili yang tidak bisa ditangkap hanya dengan nilai-nilai itu?
Anda harus memutuskan faktor mana yang ingin Anda modelkan dalam gim Anda, karena mereka memengaruhi cara pemain akan mendekatinya. Ini mungkin termasuk ukuran unit / kuantitas, tipe unit, pengalaman unit (mis. Status veteran), medan dan efek lingkungan, perbedaan antara menyerang dan bertahan jika ada, apakah memodelkan kerusakan dan gesekan atau tidak, apakah memodelkan berlalunya waktu selama pertempuran, kemampuan untuk menarik atau melarikan diri (mungkin termasuk pemodelan moral), seberapa banyak keacakan yang Anda inginkan dalam persamaan, dan sebagainya.
Setelah Anda mengetahui semua ini, ada beberapa pendekatan matematika dasar yang dapat Anda ambil. Anda dapat melakukan sistem "kesempatan untuk memukul" satu demi satu seperti yang dimiliki banyak RPG, misalnya. sistem pertempuran d20. Anda bisa melakukan sistem undian koin berbobot "serang vs pertahanan" satu putaran seperti permainan Peradaban asli. Anda bisa meminta masing-masing pihak membuat skor dengan menambahkan atribut ke nomor acak dan siapa pun yang mendapat nilai tertinggi akan menang. Dan Anda dapat mengubah sistem ini untuk bekerja pada basis per putaran, atau untuk mengurangi poin hit atau poin moral, atau apa pun. Sistem apa pun bisa berfungsi, tetapi Anda harus menyeimbangkannya seperti yang Anda inginkan. Karena pada akhirnya pilihan bagaimana membuat model pertempuran adalah bagian kunci dari desain gim, dan bukan sesuatu yang bisa diberikan orang lain kepada Anda.
sumber
Untuk Solar Realms Elite, saya terinspirasi oleh Lanchester's Equations untuk memodelkan peperangan . Saya memiliki beberapa perkelahian simultan di setiap putaran pertempuran.
Dalam pertarungan pertama, semua orang menyerang tentara. Di SRE tentara paling baik melawan tentara (itu bukan gunting kertas batu, tetapi infanteri, serangan udara, dan ruang angkasa). Saya membuat serangan dan kekuatan pertahanan di mana tentara memiliki serangan terbaik:
Dalam pertarungan kedua, semua orang menyerang stasiun pertahanan. Di SRE, pejuang (udara) paling baik melawan stasiun pertahanan (mis. Anti-pesawat):
Di pertarungan ketiga, semua orang menyerang kapal penjelajah berat. Di SRE, penjelajah berat ada di luar angkasa dan paling baik melawan penjelajah berat lainnya:
(Saya tidak ingat konstanta apa yang saya gunakan; itu hanya contoh.) Dalam setiap putaran pertempuran, penyerang akan kehilangan sebagian kecil dari kekuatan pertahanan dan para pembela akan kehilangan sebagian kecil dari kekuatan serangan. Saya percaya ini sesuai dengan Hukum Lapangan Lanchester (persamaan di sini ). Saya telah menambahkan keacakan tetapi saya tidak ingat persis di mana. Setelah setiap putaran pertempuran, pasukan akan lebih kecil. Saya memberi batas maksimum pada jumlah putaran; setelah itu, pihak yang kalah akan mundur.
Itu tidak realistis untuk memiliki infanteri di lapangan menembakkan ke ruang angkasa, tetapi itu bekerja lebih baik untuk alasan gameplay untuk memiliki semua unit dapat melawan semua unit lainnya (dengan mengurangi efektivitas).
sumber
Saya cenderung mengatakan 'jika Anda tidak dapat menemukan solusi eksplisit, carilah solusi implisit'. Anda bisa mensimulasikan pertempuran secara internal sampai satu pasukan dihancurkan atau mundur (tergantung pada hasil permainan Anda).
Saya akan menggunakan sesuatu seperti ini:
Untuk setiap iterasi pertempuran, semua unit bersifat oportunistik, sehingga mereka mencoba melakukan kerusakan paling besar yang mereka bisa. Setiap unit memilih unit musuh yang akan diserang di babak ini, berdasarkan kelebihan / kekurangan yang diketahui.
Kemudian, semua subfight dilakukan. Sebuah contoh:
Biarkan spearman menjadi efektif melawan kavaleri, cavalaray efektif melawan pemanah dan pemanah efektif melawan spearman.
Dalam pertarungan antara dua pasukan yang terdiri dari kedua jenis unit dasar ini, semua spearman akan menyerang kavaleri, semua unit kavaleri akan menyerang pemanah dan semua pemanah akan menyerang spearman. Jika misalnya satu sisi tidak memiliki pemanah, sisi kavaleri yang lain akan memilih jenis target terbaik berikutnya (menjadi unit kavaleri musuh)
Setiap unit unit-serangan-unit diselesaikan secara terpisah, dengan unit yang kalah rusak atau ditandai sebagai dihancurkan.
Setelah semua perkelahian individu terselesaikan, pindahkan semua unit yang telah secara kritis dihancurkan atau dihancurkan.
Iterasi berikutnya mulai menggunakan tentara yang sekarang berkurang.
sumber
Saya sedang menguji coba gim yang saat ini merupakan versi sederhana dari Solar Realms ( Star Empire Elite ), dan saya mulai dengan menggunakan sesuatu yang mirip dengan persamaan Amit (di atas). Secara khusus, saya menyukai gagasan memiliki tiga fase untuk pertempuran, di mana Anda harus memenangkan dua dari tiga. Tetapi saya juga ingin memperkenalkan unsur keacakan dalam pertempuran, dan untuk itu saya dipengaruhi oleh beberapa permainan meja.
Pemrosesan adalah masalah jika gim ini ingin berkembang, jadi saya tidak ingin mengikuti metode yang disarankan oleh sum1stolemyname di atas, meskipun jika gim Anda menggunakan klien untuk memproses hasilnya, sebagai lawan dari server, ini tampaknya menjadi pendekatan yang bagus.
Saya memutuskan untuk memecah pertempuran menjadi dua fase (analog dengan tiga dalam model Amit): udara dan darat. Saya menghitung serangan dan mempertahankan kekuatan, dan menyesuaikan kekuatan serangan ke bawah dengan pecahan (untuk memberi bek keuntungan). Pada saat itu, jika kekuatan serangan dan kekuatan pertahanan sama, serangan itu memiliki peluang kemenangan 50%. Dari sana, saya menyesuaikan persentase peluang kemenangan naik atau turun berdasarkan pada seberapa banyak (atau kurang) kekuatan penyerang telah dibandingkan dengan bek. Berikut ini beberapa persamaan sederhana untuk udara:
Saya menetapkan bahwa chance_of_victory tidak akan pernah lebih besar dari 80 atau kurang dari 5. Dari sana, saya hanya menghasilkan angka acak dari 100, dan kemudian meneruskan hasil itu ke pertempuran darat.
Satu hal yang belum saya selesaikan untuk kepuasan saya adalah tingkat korban. Tapi saya berpikir bahwa cara yang baik untuk mencari tahu ini adalah dengan membandingkan chance_of_victory dengan angka acak yang dihasilkan, dan menggunakannya untuk mengambil sebagian kecil dari pasukan yang menyerang-menyerang sebagai korban.
sumber