Algoritma untuk menghitung level secara dinamis berdasarkan poin pengalaman? [Tutup]

41

Salah satu perjuangan yang selalu saya alami dalam pengembangan game adalah memutuskan bagaimana menerapkan poin pengalaman yang dikaitkan dengan mendapatkan level. Sepertinya tidak ada pola untuk mendapatkan level di banyak game yang saya mainkan, jadi saya berasumsi mereka memiliki tabel kamus statis yang berisi poin pengalaman vs level. misalnya

Experience   Level
0            1
100          2
175          3
280          4
800          5

... Tidak ada sajak atau alasan mengapa 280 poin sama dengan level 4, hanya saja.

Saya tidak yakin bagaimana level-level itu diputuskan, tetapi tentu saja itu tidak akan dinamis. Saya juga sudah memikirkan kemungkinan level eksponensial, karena tidak harus menyimpan tabel pencarian terpisah, misalnya

Experience   Level
0            1
100          2
200          3
400          4
800          5
1600         6
3200         7
6400         8

... tapi sepertinya itu akan tumbuh di luar kendali agak cepat, karena menuju level atas, musuh dalam game harus memberikan jumlah besar pengalaman ke level - dan itu akan sulit untuk dikendalikan. Leveling akan menjadi tugas yang mustahil.

Apakah ada yang punya petunjuk, atau metode yang mereka gunakan untuk memutuskan bagaimana tingkat karakter berdasarkan pengalaman? Saya ingin bersikap adil dalam leveling dan saya ingin tetap di depan para pemain karena tidak perlu khawatir terus-menerus menambah pengalaman baru / pencarian level.

George
sumber
4
Tidak, ini hanya eksponensial yang lebih lambat (dikalikan 10 setiap ~ 3,3 level, atau 100 setiap ~ 6,6 level, bukan setiap level). Geometris akan seperti 1 [00], 4, 9, 25, 36, dll. Bahkan 1100 1210 1331 1464 adalah seri eksponensial, dikalikan dengan 1,1.
Random832
1
en.wikipedia.org/wiki/Exponential_growth Harus menghapus semuanya.
aaaaaaaaaaaa
1
@Stephen: @ Random832 benar, baik pertumbuhan "eksponensial" dan "geometris" mengacu pada memiliki rasio konstan antara istilah berturut-turut / setara (yang berarti tingkat pertumbuhan sebanding dengan nilai saat ini - dalam kalkulus ini dinyatakan dengan mengatakan suatu memiliki fungsi eksponensial f'(x) = c*f(x)) . Istilah "geometrik" digunakan ketika domain (input) diskrit (mis. Integer). Rumus untuk contoh @ George, di atas level 1, adalah Experience = 100 * 2^(Level-2), yang eksponensial. Rumus untuk perkembangan Anda, di atas level 1, adalah Experience = 100^(Level-1), juga eksponensial.
BlueRaja - Danny Pflughoeft

Jawaban:

36

Sangat umum untuk menggunakan hubungan persegi.

level = constant * sqrt(XP)

Atau kira-kira setara dengan celah naik secara linear.

Level   XP      Difference
1       0       -
2       100     100
3       300     200
4       600     300
5       1000    400

Sistem-sistem ini bekerja cukup baik ketika perolehan XP kira-kira linier. Jika karakter level tinggi dapat memperoleh XP lebih cepat daripada karakter level rendah maka ini bukan sistem yang tepat.

aaaaaaaaaaaa
sumber
3
Untuk pemain tipe Achiever, saya curiga ada harapan kuat untuk mendapatkan XP yang lebih besar saat karakter mereka berkembang. Saya menemukan solusi Anda menarik, dan saya mungkin akan men-tweak hanya sedikit untuk menghasilkan perbedaan seperti 107-214-321-428, sehingga mencegah pemain dari hanya melihat angka bulat dan juga dengan harapan bahwa ini bisa menambah membuat permainan terasa hanya sedikit lebih "organik" (saya mencoba untuk datang dengan kata yang lebih baik dari ini, tetapi "organik" adalah semua yang saya punya saat ini).
Randolf Richardson
1
+1 inilah yang telah saya lakukan di masa lalu, sangat bagus
BlueRaja - Danny Pflughoeft
3
Persamaan untuk kesenjangan tingkat yang naik secara linear. level = (sqrt (100 (2experience + 25)) + 50) / 100 dan pengalaman = (level ^ 2 + level) / 2 * 100- (level * 100)
C9HDN
3
Jawaban yang bagus dan saya suka kurva yang dihasilkan ini. Saya akhirnya menggunakan konstanta 0,04. Bagi mereka yang bertanya-tanya, kebalikan dari rumus ini untuk menghitung untuk XP adalah: XP = level ^ 2 / konstan.
BradH
3
@ Radh Sebenarnya, tampaknya XP = (level / konstan) ^ 2. Dalam php, ini dapat direpresentasikan sebagai XP = pow (level / konstan, 2) atau dalam versi selanjutnya, (level / konstan) ** 2
Taylor Dondich
17

Anda mungkin akan menemukan fungsi logaritmik bermanfaat karena mereka dapat digunakan untuk memperlambat peningkatan karena lebih banyak poin pengalaman diperoleh. Berikut adalah dua halaman web yang menjelaskan cara kerjanya:

  Grafik Fungsi Logaritmik
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Pengantar Fungsi Grafik Logaritma
  http://www.purplemath.com/modules/graphlog.htm

Begini tampilannya pada grafik, yang diharapkan akan memenuhi kebutuhan Anda:

masukkan deskripsi gambar di sini

Randolf Richardson
sumber
1
@George Dengan bermain-main dengan koefisien, Anda dapat dengan mudah menggunakan fungsi logaritmik untuk mengukur leveling pemain Anda. +1 untuk menggunakan matematika
Stephen
2
Perhatikan bahwa ini adalah implementasi dari persyaratan XP eksponensial. level = log(XP) <=> XP = e^level. Persyaratan mungkin menjadi sedikit curam untuk level terakhir, tetapi akan berfungsi baik dengan pertumbuhan yang sesuai dalam akumulasi XP.
aaaaaaaaaaaa
@eBusiness: Poin bagus, tetapi ini mungkin tidak menjadi masalah karena karakter tingkat yang lebih tinggi cenderung mendapatkan poin lebih banyak dengan lebih mudah dan dalam durasi waktu yang lebih singkat (mis. dengan menyerang / membunuh monster yang lebih kuat dengan kecepatan hit yang lebih cepat). Ini adalah salah satu alasan mengapa saya pikir matematika ini bisa cocok untuk gim video (terutama dalam konteks MMORPG).
Randolf Richardson
2
Saya hanya merasa agak aneh bahwa OP secara khusus khawatir tentang pertumbuhan eksponensial dan kemudian menerima jawaban yang hanya menggambarkan hal yang sama dengan cara lain. Tapi saya kira itu masalahnya.
aaaaaaaaaaaa
1
@eBusiness: Mungkin jawaban saya menjelaskan sesuatu tentang pertumbuhan eksponensial yang sebelumnya tidak jelas? Ada banyak cara berbeda untuk menerapkan matematika, dan saya tidak yakin bahwa guru matematika terbaik pun bisa mengetahui semuanya (yah, mungkin guru matematika terbaik kedua).
Randolf Richardson
9

Ini adalah beberapa cara yang saya gunakan sejauh ini. Mereka diurutkan berdasarkan laju tumbuh (hanya dikalikan setiap persamaan dengan nilai konstan):

  1. exp = level (yang ini mungkin terlihat aneh tetapi untuk beberapa game yang menghargai perubahan exp sesuai dengan level pemain seperti perbatasan yang cocok untuk yang ini)

  2. exp = level * log 10 (level)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
    
  3. exp = level ^ const_value: untuk contoh saya, saya menetapkan nilai const ke 3/2

    1   1
    2   2.8
    3   5.1
    4   8
    5   11.2
    6   14.7
    
Ali1S232
sumber
4

Saya pikir itu tergantung seberapa mudah pemain bisa mendapatkan pengalaman. Jika pemain bisa mendapatkan 200 xp pada lvl 1 dalam 20 menit dan kemudian mendapatkan 200 xp pada lvl 2 dalam 2 menit, maka Anda perlu skala xp Anda secara eksponensial.

Namun jika mendapatkan level hanya membuatnya sedikit lebih mudah untuk mendapatkan xp, maka Anda harus melakukan fungsi xp lebih level. (Mungkin linear dengan beberapa koefisien> 1)

Wangburger
sumber
4

Seringkali poin yang dibutuhkan untuk mendapatkan level didasarkan pada kurva. Dalam banyak RPG itu ada juga banyak karakteristik dan atribut karakter Anda yang meningkat dengan level Anda, mereka juga akan ada di kurva sendiri.

Lihatlah pembuat RPGM untuk melihat bagaimana mereka melakukan sesuatu. Secara khusus lihat kurva parameter di tangkapan layar bagian "Tambahkan Beberapa Keunikan dengan Menyesuaikan Peralatan Awal" pada dokumen Membuat Karakter Utama .

Pada dasarnya Anda mungkin memiliki kurva untuk berapa banyak XP diperlukan untuk naik level, maka kurva berbeda untuk berapa banyak HP, MP, stamina, kekuatan dll diperoleh setiap level.

masukkan deskripsi gambar di sini

Adam Harte
sumber
2

Pertimbangkan Waktu

Pertama-tama Anda perlu mencari tahu bagaimana tingkat pengalaman mendapatkan skala dengan level. Kemudian Anda dapat menyesuaikan leveling Anda dengan waktu yang dibutuhkan . Jika setiap tingkat tambahan memungkinkan Anda untuk mendapatkan pengalaman dua kali lebih cepat, dan Anda perlu dua kali lebih banyak pengalaman untuk tingkat, setiap tingkat akan memerlukan yang sama jumlah waktu.

Saran saya adalah berpikir tentang berapa banyak waktu yang harus dihabiskan pemain, kemudian sesuaikan leveling untuk itu.

Willy Goat
sumber
-3

Mungkin saya harus menggunakan sistem leveling datar, di mana setiap level membutuhkan jumlah pengalaman yang sama.

Łukasz Baran
sumber
3
Jawaban harus sedikit lebih baik daripada sekadar saran sederhana. Cobalah menghubungkan beberapa manfaat dari strategi ini daripada memiliki sistem yang dinamis seperti yang diminta.
MichaelHouse
Perhatikan juga bahwa informasi tambahan harus diposting oleh penulis asli ; jika pengguna lain memiliki lebih banyak untuk ditambahkan, mereka harus mempertimbangkan untuk memposting jawaban yang terpisah.
Gnemlock