Saat ini saya sedang membuat permainan pertahanan di mana musuh akan menelurkan dan menyerang pasukan pemain. Ini mirip dengan game Tower Defense, kecuali hanya ada satu level. Musuh akan terus memijah sampai akhirnya pengguna mati atau dia mengumpulkan pasukan yang cukup besar sehingga mereka memusnahkan musuh yang muncul secara instan (mudah-mudahan itu akan cukup menantang sehingga ini tidak akan terjadi).
Apa yang saya perjuangkan saat ini adalah bagaimana membuat game ini semakin sulit dan kemungkinan pemijahan musuh pada dasarnya mencapai 100%.
Sejauh ini saya punya sesuatu yang mirip dengan yang berikut ini
if(Math.random() < 1 - (1/elapsed_time) && spawnTimer <= 0 ){
spawnEnemy()
spawnTimer = rand(); // random number between 1 and 3
}
Tapi sepertinya terlalu seragam untuk memulai. Saat ini saya hanya memunculkan satu jenis musuh, gagasan bahwa musuh yang lebih tangguh juga muncul seiring berjalannya waktu.
Saya juga berpikir saya perlu mengacak saya spawnTimer
sedikit lebih banyak dan membuatnya menjadi lebih cepat seiring berjalannya waktu, tetapi saya tidak bisa melihat bagaimana pikiran saya sebenarnya terlihat seperti untuk seluruh bagian ini. Adakah yang bisa membantu dengan gagasan kasar tentang formula seperti ini?
Saat ini saya menggunakan javascript untuk menulis permainan, tetapi jelas ini lebih tentang konsep.
Jawaban:
Fungsi yang Anda pilih sepertinya tidak cocok untuk tujuan Anda. Pertama, jika Anda menggunakan rute ini, kondisi acak yang gagal akan menghasilkan penundaan sebelum kali berikutnya Anda melempar dadu. Juga, tidak mungkin bahwa menjaga spawn timer dalam kisaran konstan baik untuk tujuan Anda.
Biarkan
thresh
menjadi ambang kesulitan yang menurut Anda tinggi. Kami menggunakannya nanti untuk memutuskan kapan harus memperlambat laju permainan yang semakin sulit.Biarkan
rate
menjadi jumlah monster yang Anda inginkan datang setiap menit (atau putaran).Membiarkan
GROWTH_RATE
menjadi tingkat di mana kesulitan meningkat (untuk saat ini akan terjadi0.2
).Katakanlah Anda mulai dengan
rate = 10
. Sekarang pemain membunuh5
monster sehingga Anda dapat meningkatkan rate olehGROWTH_RATE * 5 = 1.0
dan yang barurate = 11
.Cara menerapkan kondisi yang akan menghasilkan
rate
monster setiap menit:Setel spawn timer ke angka antara
0.5
untuk1.0
multiplied by 60 seconds or
round-timeand divided by
rate. Also leave a
0,25` peluang bahwa tidak ada monster yang muncul ketika timer mencapai 0 dan waktu diacak lagi.Jika
rate
pernah mencapaithresh
Anda perlu memperlambat. Sekarang bukannya meningkatkanrate
olehGROWTH_RATE
, Anda dapat meningkatkan dengan1 / math.sqrt(rate)
. Dengan cara itu pemain tidak akan dihancurkan secara instan dalam pengaturan yang lebih sulit.Anda dapat mengatur ulang
thresh
menjadi sekitar 80% darirate
saat pemain kalah.Jika Anda ingin mengacak kekuatan monster, berhati-hatilah dengan timer. Misalnya, jika Anda memutuskan bahwa
player-score
(ditentukan oleh monster tewas sejauh ini) akan digunakan untuk menentukan kekuatan max dari rakasa yang bisa bertelur, Anda dapat melakukan sesuatu seperti ini:max-monster-strength = player-score / 1000
. Kemudian secara acak afloat
ataudouble
antara0.0
ke1.0
dan gandakan hasilnya dengan sendirinya.Sekarang ketika Anda mengacak timer, Anda mungkin harus mempertimbangkan level daya. Misalnya, Anda bisa mengalikan hasil penghitung waktu dengan akar kuadrat dari kekuatan monster berikutnya.
sumber
Ada banyak opsi, dua dengan pengaturan Anda saat ini:
Kemudian lebih banyak dengan fitur tambahan:
Sedangkan untuk membuat kurva kesulitan, benar-benar tidak ada jawaban yang benar. Butuh banyak playtesting dan tweaker untuk memperbaikinya. Ini akan tergantung pada berapa lama permainan seharusnya berlangsung dan seberapa sulit yang Anda inginkan. Saya sarankan Anda menggunakan Excel atau situs seperti WolframAlpha dan melihat kurva apa yang dibuat berbagai fungsi. Coba kenaikan eksponensial, peningkatan linear, dll. Temukan yang sesuai untuk Anda.
sumber
Alih-alih memiliki jumlah musuh tetap (satu) bertelur dengan probabilitas variabel, Anda bisa memutarnya dan memiliki sejumlah variabel musuh bertelur dengan probabilitas tetap.
Pada tingkat kesulitan 1, ini akan memiliki peluang 1% untuk menelurkan satu musuh per centang.
Pada tingkat kesulitan 1000, itu akan menelurkan hingga 1000 musuh, masing-masing dengan peluang terpisah 1%. Ini berarti bahwa rata-rata 10 akan muncul per kutu, tetapi bisa juga lebih atau kurang. Ada kemungkinan bahwa angka yang sangat berbeda dari 10 akan muncul sekaligus, mungkin bahkan semua 1000. tapi itu kejadian yang sangat tidak mungkin karena cara kerja probabilitas (bandingkan: Hukum Angka Besar ).
Ketika Anda menambahkan lebih banyak musuh yang berbeda dengan perilaku dan statistik yang berbeda, Anda mungkin ingin beberapa musuh yang lebih tangguh hanya mulai melahirkan pada kesulitan yang lebih tinggi dan bahkan kemudian dengan kepadatan rendah pada awalnya. Untuk melakukan ini, Anda bisa menambahkan pengubah kesulitan yang dikurangi dari kesulitan saat ini. Dengan cara itu musuh tidak akan muncul sebelum tingkat kesulitan tercapai dan itupun hanya dengan peluang yang lebih rendah pada awalnya:
sumber