Dalam game saya, XP yang diperlukan untuk mencapai level berikutnya adalah Level Level × Level Threshold . Mengingat itu, bagaimana saya bisa mendapatkan level saya saat ini dari total XP yang pernah saya dapatkan?
Sebagai contoh:
Level Threshold = 50
Current Level = 1
Mulai dari level 1, saya perlu (1 × 50) = 50 XP untuk sampai ke level 2, dan seterusnya.
Level 1: 50 XP needed to reach level 2
Level 2: 100 more XP needed to reach level 3
Level 3: 150 more XP needed to reach level 4
Dengan kata lain, tabel perkembangan adalah sebagai berikut:
Level 1: 0 XP to 49 XP
Level 2: 50 XP to 149 XP
Level 3: 150 XP to 299 XP
Level 4: 300 XP to 499 XP
Jika saya memiliki 300 XP, saya hanya akan mencapai level 4. Bagaimana saya bisa menghitungnya secara umum?
levels
mathematics
progression
Jay van Diyk
sumber
sumber
Jawaban:
Saat mengerjakan matematika dan menyelesaikan dengan
Level
persyaratan pengalamanXP
, kami memperoleh:Misalnya, berapa level pemain untuk ?XP=300
Seperti yang diminta.
Atau, untuk level apa
XP = 100000
?Lebih umum diungkapkan, untuk ambang awal yang sewenang - wenang di Level 1:
Anda juga dapat melakukan kebalikannya dan menghitung yang
XP
dibutuhkan untuk setiap level dengan menyelesaikan rumus di atas untuk XP.Perhatikan bahwa rumus di atas berfungsi dengan pecahan tetapi Anda harus membulatkan ke nilai integer berikutnya. Misalnya di C ++ / C # Anda bisa menggunakan Level (int).
Untuk mendapatkan rumus bentuk tertutup di atas, saya menggunakan persamaan perbedaan, penjumlahan Gauss dan rumus kuadratik.
Jika Anda tertarik dengan solusi formula ini langkah demi langkah ...
Kami melakukan algoritma rekursif dengan memulai pertimbangan kami yang pada akhirnya
Experience(next_level) = Experience(current_level) + current_level*50
.Sebagai contoh, untuk mendapatkan kita memiliki:XPLevel3
Di mana,
2*50
berasal dari permintaan OP bahwa pengalaman yang diperlukan untuk mencapai level berikutnya adalah level saat ini * 50.Sekarang, kita mengganti dengan logika yang sama ke dalam rumus. Itu adalah:XpLevel2
Pengganti ke dalam rumus di atas:XPLevel2=XPLevel1+2×50
dan hanya 50, yang merupakan titik kita mulai. KarenanyaXpLevel1
Kita dapat mengenali pola untuk secara rekursif menghitung level yang lebih tinggi dan rantai penjumlahan yang terbatas.
Di mana N adalah level yang ingin dicapai. Untuk mendapatkan XP untuk level N, kita harus menyelesaikannya untuk N.
Sekarang sisi kanan hanya penjumlahan dari 1 sampai N-1, yang dapat dinyatakan dengan terkenal Gaussian penjumlahan . KarenanyaN×(N+1)÷2−N
atau hanya
Akhirnya, meletakkan segala sesuatu di satu sisi:
Ini sekarang merupakan formula kuadratik yang menghasilkan solusi negatif dan positif, yang hanya positif yang relevan karena tidak ada level negatif. Kami sekarang memperoleh:
Karenanya, level saat ini pada XP dan ambang linear adalah:
XP
Level 100
Sunting : Formula ini berfungsi penuh sebagaimana mestinya dan menghasilkan dengan benar
level
kondisi saat iniXP
dengan perkembangan ambang linier seperti yang diminta oleh OP. (Formula sebelumnya menampilkan "level + 1" dengan mengasumsikan pemain mulai dari Level 0, yang merupakan kesalahan saya - saya telah menyelesaikannya saat istirahat makan siang dengan menulis di tisu kecil! :)sumber
Solusi sederhana dan generik , jika Anda tidak perlu mengulangi perhitungan ini jutaan kali per detik (dan jika Anda melakukannya, Anda mungkin melakukan sesuatu yang salah), hanya menggunakan loop:
Keuntungan yang besar dari metode ini, selain tidak memerlukan matematika yang rumit, adalah bahwa ia bekerja untuk setiap fungsi exp per tingkat sewenang-wenang. Jika Anda suka, Anda bahkan bisa membuat nilai exp sembarang per level, dan menyimpannya dalam tabel.
Jika Anda (karena alasan aneh) membutuhkan solusi yang bahkan lebih cepat, Anda juga dapat menghitung ulang jumlah total exp yang diperlukan untuk mencapai setiap level, menyimpannya dalam sebuah tabel, dan menggunakan pencarian biner untuk menemukan level pemain. Pra-perhitungan masih membutuhkan waktu yang proporsional dengan jumlah total level, tetapi pencarian kemudian hanya membutuhkan waktu yang sebanding dengan logaritma jumlah level.
sumber
Pertanyaan telah dijawab dengan kode, tetapi saya pikir itu harus dijawab dengan matematika. Seseorang mungkin ingin memahami alih-alih hanya menyalin dan menempel.
Sistem Anda mudah dijelaskan oleh relasi berulang:
Yang menawarkan solusi bentuk tertutup sederhana yang bagus untukXP :
Yang bisa kita pecahkanTingkat :
(truncate ke integer, karena pemain membutuhkan semua XP yang diperlukan untuk mendapatkan salah satu bonus level-up)
sumber
XP_Level(0) = 50
dan kemudian kita bisa menghindari penyelesaian? Adakah manfaat, pro, kontra? Saya pikir akan lebih baik untuk menyentuh jawaban ini. +1Inilah salah satu pendekatan untuk memecahkan masalah menggunakan aljabar dasar. Jika Anda tidak peduli dengan langkah-langkahnya, lompat ke bawah.
Suatu hal yang mudah untuk muncul adalah, mengingat satu level
n
, total pengalaman yange
diperlukan untuk memperoleh level itu:The
t
Istilah singkatan peningkatan XP dibutuhkan per tingkat - 50, dalam contoh.Kita dapat menyelesaikan hal di atas menggunakan rumus untuk urutan aritmatika ( jumlah identitas ):
Namun, kami menginginkan formula yang berlawanan - level pemain memberikan pengalaman total. Apa yang benar-benar ingin kami lakukan adalah menyelesaikan untuk level
n
,. Pertama, mari kita kelompokkan persyaratan:Sekarang kita bisa menggunakan rumus kuadratik:
Persamaan terakhir:
sumber
Semua matematika yang terlibat di sini sangat penting untuk diketahui karena segala macam alasan, beberapa di antaranya berlaku untuk pengembangan game.
TAPI
Ini adalah situs pengembangan game, bukan situs matematika. Jadi mari kita bahas bagaimana hal-hal ini bekerja bukan sebagai seri algoritmik, tetapi sebagai set , karena itu adalah jenis matematika yang berlaku untuk leveling dalam game yang mungkin benar-benar dikembangkan untuk dijual, dan ini adalah sistem yang mendasari sebagian besar (tetapi tidak semua) leveling sistem (setidaknya secara historis).
Pemain cenderung lebih suka angka bulat yang mudah diingat dan divisualisasikan, dan tidak ada yang lebih penting daripada sistem permainan berbasis level di mana pemain membutuhkan jumlah xp xp untuk naik ke level Y.
Ada dua alasan bagus untuk memilih angka bulat:
Angka bulatnya menyenangkan. Tujuan permainan adalah untuk menjadi menyenangkan. Kesenangan itu penting, terutama karena dilema permainan sering kali sama sekali tidak menyenangkan menurut desain.
Mengapa ini penting untuk diingat?
Sebagian besar algoritma rangkaian majemuk tidak menghasilkan angka bulat yang bagus
Sebagian besar seri tidak berhenti pada titik yang indah (setiap jawaban yang saya lihat di sini sejauh ini berlangsung selamanya). Jadi apa yang kita lakukan? Kami memperkirakan, dan kemudian kami menentukan set level apa yang harus diterapkan pada sistem game .
Bagaimana kita tahu perkiraan apa yang tepat? Kami mempertimbangkan apa gunanya leveling dalam sistem game.
Sebagian besar permainan memiliki batas level yang menendang di beberapa titik. Ada beberapa cara yang bisa dilakukan:
XP + (XP * Modifier)
atau apa pun).Ada yang beberapa sistem permainan di mana tidak ada cap tingkat dan sistem algoritmik ditentukan. Biasanya sistem seperti ini menggunakan beberapa sistem X-power-of-Y untuk membuat angka meledak dengan cepat. Ini membuatnya sangat mudah untuk mencapai level L-1, cukup diharapkan bahwa sebagian besar pemain akan mencapai level L, terlalu sulit untuk mencapai level L + 1, dan pemain akan menjadi tua dan mati sebelum mencapai L + 2. Dalam hal ini "L" adalah level yang Anda putuskan adalah level target yang sesuai untuk dimainkan dan di mana biasanya akan membatasi sistem tetapi membiarkan opsi terbuka bagi orang-orang untuk menipu diri sendiri agar berpikir itu ide yang bagus untuk XP selamanya. (Seram!) Dalam sistem semacam ini, matematika yang ditemukan di sini masuk akal. Tapi itu adalah kasus yang sangat sempit, dan jarang ditemui dalam game sebenarnya.
Jadi apa yang kita lakukan?
Hitung level dan XP? Tidak. Tentukan level dan XP? Iya nih.
Anda menentukan level apa artinya, lalu memutuskan set level apa yang tersedia harus tersedia. Keputusan ini bermuara pada granularity di dalam sistem game (Apakah ada perbedaan besar dalam kekuatan antar level? Apakah setiap level memberikan kemampuan baru? Dll.) Dan apakah level digunakan sendiri atau tidak sebagai sistem gating ("Tidak bisa pergi ke kota berikutnya sampai Anda lvl 10, nak. ", atau sistem tangga yang kompetitif menegakkan tingkatan berbasis tingkat, dll.).
Kode untuk ini sangat mudah, dan hanya penentuan rentang:
Atau dengan pernyataan if, atau case, atau rantai if / elif, atau bahasa apa pun yang Anda gunakan menggunakan dukungan (Bagian ini adalah elemen yang paling menarik dari sistem game mana pun, saya hanya menyediakan dua cara karena kebetulan saya berada dalam mode Erlang sekarang, dan sintaks di atas mungkin tidak jelas bagi semua orang.):
Apakah ini matematika yang luar biasa? Tidak, tidak sama sekali. Apakah ini implementasi manual dari penentuan elemen yang ditetapkan? Ya. Itu saja, dan ini cukup banyak cara saya melihatnya benar - benar dilakukan di sebagian besar permainan sepanjang tahun.
Sebagai catatan, ini tidak boleh dilakukan setiap kali pemain mendapatkan pengalaman. Biasanya Anda melacak "XP untuk pergi" sebagai satu nilai, dan sekali pemain menghabiskan atau melampaui nilai "untuk pergi" (mana pun Anda melakukannya) maka Anda menghitung ini sekali untuk mencari tahu di mana pemain benar-benar di, simpan itu, hitung "pergi" berikutnya minus sisa (jika membawa XP ke depan diperbolehkan) dan ulangi.
sumber