Saya sedang mengerjakan permainan dan saya butuh ide untuk kerusakan yang akan terjadi pada musuh ketika pemain Anda menyerang. Jumlah total kesehatan yang dimiliki musuh disebut enemyHealth
, dan memiliki nilai 1000. Anda memulai dengan senjata yang menghasilkan 40 poin kerusakan (dapat diubah). Pemain memiliki stat serangan yang dapat Anda tingkatkan, disebut playerAttack
. Nilai ini dimulai pada 1, dan memiliki nilai maks 100 yang mungkin setelah Anda naikkan berkali-kali dan membuatnya semakin jauh ke dalam permainan. Jumlah kerusakan yang dilakukan senjata adalah memotong dan mengeringkan, dan mengurangi 40 poin dari total 1000 poin kesehatan setiap kali musuh terkena. Tapi apa yang playerAttack
dilakukan adalah menambah nilai itu dengan persentase. Berikut adalah algoritma yang saya miliki sekarang. (Saya telah menghapus semua gui, kelas, dll. Dan memberikan variabel nama yang sangat maju)
double totalDamage = weaponDamage + (weaponDamage*(playerAttack*.05))
enemyHealth -= (int)totalDamage;
Ini tampaknya bekerja sangat baik untuk sebagian besar. Jadi saya statrted menguji beberapa nilai ...
//enemyHealth ALWAYS starts at 1000
weaponDamage = 50;
playerAttack = 30;
Jika saya menetapkan nilai-nilai ini, jumlah kerusakan yang dilakukan pada musuh adalah 125. Tampak seperti jumlah yang baik, jadi saya ingin melihat apa yang akan terjadi jika serangan pemain dimaksimalkan, tetapi dengan senjata awal terlemah.
weaponDamage = 50;
playerAttack = 100;
totalDamage berakhir menjadi 300, yang akan membunuh musuh hanya dalam beberapa serangan. Bahkan dengan seranganmu setinggi itu, aku tidak ingin senjata terlemah mampu membunuh musuh secepat itu. Saya berpikir untuk menambah pertahanan, tetapi saya merasa permainan akan kehilangan konsistensi dan menjadi tidak seimbang dalam jangka panjang. Mungkin algoritma yang dirancang dengan baik untuk pengubah pengurangan senjata akan bekerja untuk senjata tingkat rendah atau sesuatu seperti itu. Hanya perlu istirahat dari mencoba mencari cara terbaik untuk menyelesaikannya, dan mungkin seseorang yang memiliki pengalaman dengan permainan dan menjaga leveling konsisten dapat memberi saya beberapa ide / petunjuk.
sumber
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?)Jawaban:
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.
sumber
a
artinya lagi?" dan gulir ke atas?Saya akan merekomendasikan Anda untuk mendesain gim Anda dari arah lain: Pertama-tama pikirkan bagaimana Anda ingin gim Anda dimainkan (dalam hal pengalaman gim, bukan dalam hal angka), dan kemudian rancang baik rumus dan rentang angka untuk mendapatkan hasil itu.
Tujuan permainan Anda adalah dibutuhkan sejumlah hit untuk membunuh musuh. Berapa banyak klik tergantung pada tiga variabel:
Pertama-tama Anda harus membuat tabel dari semua kemungkinan kombinasi dari ketiga variabel ini menjadi rendah, menengah atau tinggi (belum ada angka konkret, hanya "rendah", "menengah" atau "tinggi") dan berapa banyak klik yang ingin Anda buat diperlukan untuk kombinasi ini.
Maka Anda harus mencoba menemukan formula dan rentang nilai yang paling mendekati nilai harapan Anda.
sumber
Cara termudah, adalah meningkatkan kerusakan senjata di antara level senjata secara eksponensial.
Namun, yang penting adalah Anda juga harus mendefinisikan bagaimana HP musuh tumbuh ketika mereka semakin kuat. Jadi, ketika Anda sangat kuat, Anda harus membunuh musuh yang mudah hanya dengan beberapa pukulan, tetapi mereka yang berada di level Anda harus relatif lebih sulit untuk dibunuh daripada musuh yang berada di level Anda di awal. Jadi saya akan mendesainnya agar terlihat seperti di bawah ini:
Saya men-tweak faktor-faktor konstan dalam formula hanya untuk mencapai hasil yang saya pikir dapat diterima, tetapi yang penting adalah di mana Anda ingin pertumbuhan linier dan di mana Anda ingin eksponensial.
Anda juga harus memperhatikan bahwa untuk membunuh musuh lvl 20 yang memiliki 100 serangan dan memiliki senjata lvl1 yang membutuhkan total 6 dmg akan memakan banyak waktu. Jika terlalu banyak menurut Anda, bermainlah dengan konstanta.
sumber
Saya pikir metode kerajinan perang dunia adalah salah satu yang terbaik. Statistik pangkalan pemain memiliki dampak rendah pada total kerusakan, dengan sebagian besar pengubah kerusakan berasal dari statistik bonus di gigi. Itu membuatnya lebih mudah untuk memperluas permainan dan menyeimbangkannya seiring berjalannya waktu
sumber