Deneyim noktalarına dayalı bir seviyeyi dinamik olarak hesaplamak için algoritma? [kapalı]


41

Oyun geliştirmede her zaman yaşadığım mücadelelerden biri, bir seviyeye ulaşmaya yönelik deneyim noktalarının nasıl uygulanacağına karar vermektir. Oynadığım oyunların çoğunda seviye kazanmanın bir yolu yok gibi görünüyor, bu yüzden seviye ile deneyim puanlarını içeren statik bir sözlük tablosuna sahip olduklarını varsayıyorum. Örneğin

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

... 280 puanın 4. seviyeye eşit olmasının tek kelimesi ya da nedeni yok, sadece.

Bu seviyelere nasıl karar verildiğinden emin değilim ama kesinlikle dinamik olmazdı. Ayrı bir arama tablosu tutmak zorunda olmadığından üstel seviyelerin olasılığını da düşündüm.

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

... ancak bu, hızlı bir şekilde kontrolden çıkacak gibi gözüküyor, üst seviyelere doğru, oyundaki düşmanlar, seviyeye kadar büyük miktarda deneyim sağlamak zorunda kalacak - ve bu da kontrolü zor olacak. Tesviye imkansız bir görev haline gelirdi.

Tecrübeye dayalı bir karakteri nasıl seviyelendireceğine karar vermek için kullandıkları herhangi bir işaretçi veya yöntem var mı ? Seviyelendirme konusunda adil olmak ve sürekli olarak yeni deneyim / seviye aramaları eklemek konusunda endişelenmemek için oyuncuların önünde kalmak istiyorum.


4
Hayır, daha yavaştır ve üsteldir (her seviye için her 10 ~ 3,3 veya 100 her ~ 6,6 seviye ile çarpma). Geometrik, 1, 00, 4, 9, 25, 36, vb. Gibi olur. 1100 1210 1331 1464 bile üstel bir seridir ve 1.1 ile çarpılır.
Random832


1
@Stephen: @ Random832 doğrudur, hem "üstel" hem de "geometrik" büyüme , art arda / eşit şartlar arasında sabit bir orana karşılık gelir (büyüme oranının mevcut değerle orantılı olduğu anlamına gelir) üstel işlevi vardır f'(x) = c*f(x)) . "Geometrik" terimi, alan (giriş) ayrık olduğunda (örneğin, tamsayı) kullanılır. @ George'un, seviye 1'in üzerindeki örneği için formül Experience = 100 * 2^(Level-2)üstel olan formüldür . İlerlemeniz için, seviye 1'in üzerindeki formül Experience = 100^(Level-1)de üsteldir.
BlueRaja - Danny Pflughoeft 14:11

Yanıtlar:


36

Kare bir ilişki kullanmak oldukça yaygındır.

level = constant * sqrt(XP)

Veya doğrusal olarak yükselen bir seviye farkının yaklaşık eşdeğeri.

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

Bu sistemler, XP kazancı yaklaşık lineer olduğunda oldukça iyi çalışır. Yüksek seviyeli bir karakter düşük seviyeli bir karakterden daha hızlı XP kazanabilirse, bu doğru sistem değildir.


3
Achiever-tipi oyuncular için, karakterleri ilerledikçe daha yüksek XP kazancı beklentisinin güçlü olduğundan şüpheleniyorum. Çözümünüzü ilginç buluyorum ve 107-214-321-428 gibi farklılıklar üretmek için muhtemelen biraz ince ayar yapıyorum, böylece oyuncunun yalnızca yuvarlak sayılar görmesini ve bunun da oyunu hissetmek için ekleyebileceğini umuyordu sadece biraz daha "organik" (bundan daha iyi bir kelime bulmaya çalışıyorum, ama "organik" şu an sahip olduğum tek şey).
Randolf Richardson

1
+1 bu geçmişte yaptığım
şeydi

3
Doğrusal yükselen seviye boşluğu için denklemler. seviye = (sqrt (100 (2 deneyim) + 25)) + 50) / 100 ve deneyim = (seviye ^ 2 + seviye) / 2 * 100- (seviye * 100)
C9HDN

3
Harika cevap ve bunun yarattığı eğriyi seviyorum. 0.04 sabit kullanarak sona erdi. Merak edenler için, XP için hesaplamak üzere bu formülün tersi şudur: XP = level ^ 2 / constant.
BradH

3
@BradH Aslında, XP = (seviye / sabit) ^ 2 gibi görünüyor. Php'de bu, XP = pow (seviye / sabit, 2) veya sonraki sürümlerde (seviye / sabit) olarak gösterilebilir. ** 2
Taylor Dondich

17

Büyük olasılıkla daha fazla deneyim puanı kazandıkça, artışı yavaşlatmak için kullanılabildiklerinden, logaritmik işlevleri göreceksiniz . İşte bunların nasıl çalıştığını açıklayan iki web sayfası:

  Logaritmik Fonksiyonların Grafikleri
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Logaritmik Fonksiyonların Grafiğine Giriş
  http://www.purplemath.com/modules/graphlog.htm

İhtiyaçlarınızı karşılayacak bir grafikte göründüğü gibi:

görüntü tanımını buraya girin


1
@George Katkıda bulunanlarla uğraşarak oyuncunuzun seviyesini ölçeklendirmek için kolayca bir logaritmik fonksiyon kullanabilirsiniz. Matematik kullanmak için +1
Stephen

2
Bunun üstel bir XP gereksinimi uygulaması olduğuna dikkat edin. level = log(XP) <=> XP = e^level. Bu gereksinim, son seviyeler için biraz dik olabilir, ancak XP birikiminde uygun bir büyüme ile iyi çalışır.
aaaaaaaaaaaa 14:11

@ eBusiness: İyi nokta, ancak bu bir problem olmayabilir çünkü yüksek seviyeli karakterler daha kolay ve daha kısa sürede daha fazla puan kazanma eğilimindedir (örneğin, daha hızlı bir vuruş hızında daha güçlü canavarlara saldırıp / öldürerek). Bu matematiğin video oyunlarına (özellikle de bir MMORPG bağlamında) uygun olabileceğini düşünüyorum.
Randolf Richardson

2
OP'nin özellikle üstel büyüme konusunda endişelendiğini ve sonra da aynı şeyi başka bir şekilde tanımlayan bir cevabı kabul ettiğini biraz garip buluyorum. Ama sanırım bu onun sorunu.
aaaaaaaaaaaa 15:11

1
@ eBusiness: Belki de cevabım, üssel büyüme ile ilgili daha önce net olmayan bir şeyi açıklığa kavuşturdu? Matematiği uygulamanın birçok farklı yolu vardır ve en iyi matematik öğretmeninin bile hepsini bildiğinden emin değilim (peki, belki de en iyi ikinci matematik öğretmeni).
Randolf Richardson

9

Bunlar şimdiye kadar kullandığım bazı yollar. Büyüme hızına göre sıralanırlar (sadece her denklemi sabit bir değerle çarpın):

  1. exp = level (bu tuhaf görünebilir, ancak exp ödüllerini ödüllendiren bazı oyunlar için, bu oyunların sınırlarına benzer oyuncu seviyesine göre değişebilir)

  2. exp = seviye * log 10 (seviye)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
  3. exp = level ^ const_value: benim örneğim için const değerini 3/2 olarak ayarladım.

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

4

Oyuncunun bu deneyimi ne kadar kolay alabileceğine bağlı olduğunu düşünüyorum. Eğer oyuncu 20 dakika içinde lvl 1'de 200 xp, 2 dakika içinde lvl 2'de 200 xp alabilirse, o zaman xp'nizi katlanarak ölçeklendirmeniz gerekir.

Bununla birlikte, bir seviye kazanmak sadece xp kazanmayı marjinal olarak kolaylaştırıyorsa, o zaman daha fazla seviye bir xp işlevi yapmalısınız. (Belki> 1 katsayılı doğrusal)


4

Genellikle bir seviye elde etmek için gereken noktalar bir eğriye dayanır. Pek çok RPG'de, seviyenizle birlikte yükselen karakterinizin özellikleri ve nitelikleri de vardı, onlar da kendi eğrileri üzerinde olacaklar.

İşleri nasıl yaptıklarını görmek için RPGMaker'a bakın. Ana Karakter Yaratma belgesinin "Başlangıç ​​Ekipmanını Özelleştirerek Bazı Teklik Ekleme" bölümünün ekran görüntülerinde parametre eğrilerine özellikle bakın .

Temel olarak, seviye atlamak için ne kadar XP'ye ihtiyaç duyulduğuna dair bir eğriye, ardından her seviyede ne kadar HP, MP, dayanıklılık, güç vb.

görüntü tanımını buraya girin


2

Zaman düşünün

Öncelikle deneyim oranının düzeyle nasıl ölçeklendiğini bulmanız gerekir. Ardından, seviyenizi gerekli zamana göre uyarlayabilirsiniz . Her ek seviye iki kat daha hızlı tecrübe kazanmanıza izin veriyorsa ve iki kat daha fazla tecrübe edinmeniz gerekiyorsa, her seviye aynı miktarda süreye ihtiyaç duyar .

Benim önerim, oyuncunun ne kadar zaman harcaması gerektiğini düşünmek ve ardından seviyelendirmeyi buna göre ayarlamak.


-3

Belki de sadece her seviyenin tam olarak aynı miktarda deneyim gerektireceği düz bir tesviye sistemi kullanmalıyım.


3
Cevaplar, basit bir öneriden biraz daha fazla etken olmalı. Bu stratejinin faydalarından bazılarını, istediği gibi dinamik bir sisteme sahip olmaya çalışmayı deneyin.
MichaelHouse

Ayrıca, ek bilgilerin asıl yazar tarafından kaydedilmesi gerektiğini ; diğer kullanıcıların ekleyebileceği başka şeyler varsa, ayrı bir cevap göndermeyi düşünmelidirler.
Gnemlock
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.