Jawaban yang diberikan oleh Grzegorz Sławecki sudah bagus, tetapi saya ingin menjelaskan alasan di balik metodenya dan memberi Anda alat untuk menyesuaikan solusi dengan kebutuhan gameplay Anda.
Parameter dari masalah ini adalah tingkat serangan pemain a , kerusakan senjata w , total kerusakan yang ditimbulkan dalam satu serangan d , kesehatan musuh H dan jumlah minimum serangan yang diperlukan untuk membunuh musuh, sebut saja n .
Jika Anda ingin pemain untuk membunuh dalam n hits, maka total kerusakannya d harus sedemikian rupa sehingga
(n-1) .d <H ≤ nd atau dengan kata lain, n = ceil (H / d) .
d tergantung pada kerusakan senjata w dan pada tingkat serangan pemain a dan kita dapat mengharapkan senjata menjadi lebih baik ketika tingkat meningkat, jadi mari kita menulis d (a) dan w (a) bukan hanya d dan w . Musuh-musuh yang dihadapi pemain juga diharapkan menjadi lebih tangguh jadi, sekali lagi, H (a) . Ini semua adalah fungsi peningkatan seorang , dan Anda ingin mereka untuk memenuhi inequations di atas. Yang tidak diketahui dari masalahnya adalah fungsi. Anda menetapkan satu sebagai kendala, dan Anda menemukan yang lain. Anda memang memiliki derajat kebebasan, yang merupakan hal yang baik.
Jika saya memahami pertanyaan Anda dengan baik, Anda memiliki gameplay yang tepat dalam pikiran, dan gameplay ini terutama diwakili di sini oleh jumlah hit yang diperlukan untuk membunuh musuh, n (a) . Oleh karena itu, atur n (a) tergantung pada gameplay yang Anda impikan untuk gim dan kemudian temukan sisa variabel masalahnya . Inilah yang harus selalu Anda lakukan karena, seperti yang ditunjukkan pertanyaan Anda, upaya pertama Anda adalah mencoba algoritme yang menurut Anda mungkin dilakukan dan kemudian menyadari bahwa itu menghasilkan gameplay yang tidak diinginkan.
Anggaplah, misalnya, bahwa Anda ingin pemain harus memukul lebih banyak dan lebih banyak saat ia berkembang dalam permainan. Anda juga menginginkan itu, karena jumlah hit yang dibutuhkan meningkat, itu semakin sedikit dan semakin jarang, sehingga pemain menghabiskan bagian yang lebih lama dari permainan memukul 5 kali dari 2 kali. Seperti apa n (a) terlihat:
Fungsi yang digunakan adalah n (a) = ceil (2 / 3.sqrt (a)) .
Kami ingin H (a) / d (a) tetap berada dalam rentang nilai yang membuat n (a) memiliki nilai yang diinginkan dan karena n (a) = ceil (H (a) / d (a)) , rentang ini adalah persegi panjang berikut:
dan H (a) / d (a) secara alami dapat diatur ke 2 / 3.sqrt (a) sehingga kita mendapatkan grafik berikut, dengan kurva merah menjadi H (a) / d (a) :
Catatan: kita dapat dengan mudah menemukan H (a) / d (a) di sini karena kita tahu fungsi yang n (a) adalah langit-langit, tetapi jika spesifikasi kita untuk n kurang bagus, kita harus membuat fitting kita sendiri berfungsi menggunakan berbagai trik. Tidak semua masalah ini bagus!
Jadi kita ingin H (a) / d (a) menyerupai fungsi akar kuadrat yang disesuaikan dan kita tahu bahwa H dan d harus meningkatkan fungsi. Solusi sangat banyak. Sebagai contoh,
H (a) = a. 2 / 3.sqrt (a) dan d (a) = a
Tapi kami ingin kerusakan dan HP musuh bertambah banyak sehingga ada angka besar dan mengesankan di akhir permainan, hanya untuk gaya, jadi kami malah mengatur
H (a) = a². 20 / 3.sqrt (a) dan d (a) = 10.a²
Intinya, dan bagian yang terbaik, adalah ini: Anda tahu bahwa solusi Anda untuk masalah ( H (a) dan d (a) ) mematuhi spesifikasi ( n (a) ), sehingga Anda mendapatkan n yang sama (a) , tetapi Anda memiliki kebebasan. Anda tahu persis kebebasan yang Anda miliki, dan Anda bisa menggunakannya untuk menyesuaikan pengalaman. Anda harus selalu berusaha memberi diri Anda kebebasan seperti itu sambil memuaskan kebutuhan terpenting Anda, kapan pun memungkinkan.
Sekarang kita telah memilih kerusakan satu-hit d (a) , dan karena d (a) tergantung pada kerusakan senjata w (a) , kita dapat menggunakan d (a) sebagai spesifikasi kami dan mencoba menemukan w (a) ) yang memberi kita ini d (a) . Prinsipnya sama, masalahnya berbeda: kami ingin pemain menyebabkan lebih banyak kerusakan saat levelnya meningkat, bahkan dengan senjatanya tetap sama, dan kami juga ingin kerusakan meningkat ketika senjata itu sendiri menjadi lebih baik dan levelnya tetap sama.
Tapi apa pentingnya masing-masing faktor? Misalkan kita ingin level lebih penting daripada senjata: bagian yang lebih besar dari variasi d (a) = a² harus independen dari w (a) , misalnya dengan
w (a) = 22.sqrt (a) dan, karenanya, d (a) = (22.sqrt (a)). (10 / 22.a.sqrt (a)) = w (a). (10 / 22.a.sqrt (a))
Kami mendapatkan grafik berikut untuk w (a) ...
... dan masih sama d (a) , karena kita lagi menemukan solusi yang dipatuhi spesifikasi , di sini d (a) , dan kami memiliki sifat-sifat yang disebutkan di atas dengan w dan sebuah kontribusi untuk kerusakan (kira kita melihat d sebagai fungsi dari a dan w : maka jika a diperbaiki dan kita memiliki variasi w dalam persamaan d (a, w) = a / 30.w , d masih akan menjadi fungsi yang meningkat dari w , dan hal yang sama berlaku juga jika Anda memperbaiki w dan membuat sebuah beragam).
Ini w (a) bisa memberi Anda nilai untuk ditampilkan dalam deskripsi ingame senjata: kita akan mendapatkan "Kerusakan Senjata: 220" dengan senjata terbaik dalam permainan misalnya.
Kami dapat menggunakan spesifikasi yang sama sekali berbeda untuk gameplay kami dan oleh karena itu untuk n (a) , misalnya yang membuat jumlah hit yang dibutuhkan meningkat dengan cepat saat game berkembang dan kemudian dataran tinggi, dan solusi yang dihasilkan akan berbeda.
playerAttack
menaikkan stat ke 100? Mengingat ini adalah nilai maksimal, bukankah membunuh musuh dalam beberapa serangan saja pantas dilakukan? (Apakah musuh 1000-HP sesuatu yang akan Anda lihat di awal permainan? Musuh standar? Bos?)