Algoritmo per il calcolo dinamico di un livello in base ai punti esperienza? [chiuso]


42

Una delle lotte che ho sempre avuto nello sviluppo del gioco è decidere come implementare i punti esperienza attribuiti al raggiungimento di un livello. Non sembra esserci uno schema per ottenere un livello in molti dei giochi a cui ho giocato, quindi presumo che abbiano una tabella di dizionari statici che contenga punti esperienza rispetto al livello. per esempio

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

... Non c'è una rima o una ragione per cui 280 punti equivalgono al livello 4, lo è.

Non sono sicuro di come vengano decisi quei livelli, ma certamente non sarebbe dinamico. Ho anche pensato alla possibilità di livelli esponenziali, per non dover mantenere una tabella di ricerca separata, ad es

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

... ma sembra che sarebbe fuori controllo piuttosto rapidamente, per quanto riguarda i livelli superiori, i nemici nel gioco dovrebbero fornire una quantità enorme di esperienza a livello - e sarebbe difficile da controllare. Il livellamento diventerebbe un compito impossibile.

Qualcuno ha dei suggerimenti o metodi che usano per decidere come livellare un personaggio in base all'esperienza? Voglio essere equo nel livellamento e voglio stare al passo con i giocatori per non preoccuparmi di aggiungere costantemente nuove esperienze / ricerche di livello.


4
No, è solo un esponenziale più lento (moltiplicando per 10 ogni ~ 3.3 livelli, o 100 ogni ~ 6.6 livelli, invece di ogni livello). Geometrico sarebbe come 1 [00], 4, 9, 25, 36, ecc. Anche 1100 1210 1331 1464 è una serie esponenziale, moltiplicata per 1.1.
Casuale 832


1
@Stephen: @ Random832 è corretto, sia la crescita "esponenziale" che quella "geometrica" ​​si riferiscono ad avere un rapporto costante tra termini successivi / equidistanti (il che significa che il tasso di crescita è proporzionale al valore corrente - nel calcolo questo è dichiarato dicendo un funzione esponenziale ha f'(x) = c*f(x)) . Il termine "geometrico" è usato quando il dominio (input) è discreto (es. Intero). La formula per l'esempio di @ George, sopra il livello 1, è Experience = 100 * 2^(Level-2), che è esponenziale. La formula per la tua progressione, sopra il livello 1, è Experience = 100^(Level-1)anche esponenziale.
BlueRaja - Danny Pflughoeft,

Risposte:


37

È abbastanza comune usare una relazione quadrata.

level = constant * sqrt(XP)

O l'equivalente approssimativo di un gap di livello che sale linearmente.

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

Questi sistemi funzionano abbastanza bene quando il guadagno di XP è approssimativamente lineare. Se un personaggio di alto livello può guadagnare XP più velocemente di un personaggio di basso livello, questo non è il sistema giusto.


3
Per i giocatori di tipo Achiever, sospetto che ci sia una forte aspettativa di un maggiore guadagno di XP mentre il loro personaggio avanza. Trovo la tua soluzione interessante e probabilmente la modificherei solo leggermente per produrre differenze come 107-214-321-428, impedendo così al giocatore di vedere solo i numeri di round e anche nella speranza che ciò possa contribuire a far sentire il gioco solo un po 'più "organico" (sto cercando di trovare una parola migliore di questa, ma "organico" è tutto ciò che ho al momento).
Randolf Richardson,

1
+1 questo è esattamente quello che ho fatto in passato, funziona alla grande
BlueRaja - Danny Pflughoeft

3
Equazioni per il gap di livello linearmente crescente. level = (sqrt (100 (2experience + 25)) + 50) / 100 and experience = (level ^ 2 + level) / 2 * 100- (level * 100)
C9HDN

3
Ottima risposta e mi piace la curva che questo produce. Ho finito per usare una costante di 0,04. Per chi si chiede, il contrario di questa formula per calcolare per XP è: XP = livello ^ 2 / costante.
BradH,

3
@BradH In realtà, sembra essere XP = (livello / costante) ^ 2. In php, questo può essere rappresentato come XP = pow (livello / costante, 2) o nelle versioni successive, (livello / costante) ** 2
Taylor Dondich,

17

Probabilmente troverai utili le funzioni logaritmiche in quanto possono essere utilizzate per rallentare l'aumento man mano che vengono acquisiti più punti esperienza. Ecco due pagine Web che spiegano come funzionano:

  Grafici delle funzioni logaritmiche
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Introduzione alla rappresentazione grafica delle funzioni logaritmiche
  http://www.purplemath.com/modules/graphlog.htm

Ecco come appare su un grafico, che si spera soddisfi le tue esigenze:

inserisci qui la descrizione dell'immagine


1
@George Giocando con i coefficienti puoi facilmente usare una funzione logaritmica per scalare il livellamento del tuo giocatore. +1 per l'utilizzo della matematica
Stephen,

2
Si noti che questa è un'implementazione del requisito XP esponenziale. level = log(XP) <=> XP = e^level. Il requisito potrebbe rivelarsi un po 'ripido per gli ultimi livelli, ma funzionerà bene con una crescita adeguata nell'accumulo di XP.
aaaaaaaaaaaa,

@eBusiness: buon punto, ma questo potrebbe non essere un problema poiché i personaggi di livello più alto tendono a guadagnare più punti più facilmente e in un breve periodo di tempo (ad esempio, attaccando / uccidendo mostri più potenti con una velocità di colpo più elevata). Questo è uno dei motivi per cui penso che questa matematica possa essere adatta ai videogiochi (specialmente in un contesto MMORPG).
Randolf Richardson,

2
Trovo un po 'strano che OP si preoccupi specificamente della crescita esponenziale e quindi accetto una risposta che descriva la stessa cosa in un altro modo. Ma credo sia questo il suo problema.
aaaaaaaaaaaa,

1
@eBusiness: forse la mia risposta ha chiarito qualcosa sulla crescita esponenziale che prima non era chiara? Esistono molti modi diversi per applicare la matematica e non sono sicuro che anche il miglior insegnante di matematica possa conoscerli tutti (beh, forse il secondo miglior insegnante di matematica comunque).
Randolf Richardson,

9

Questi sono alcuni modi che ho usato finora. Sono ordinati per tasso di crescita (moltiplicando ogni equazione per un valore costante):

  1. exp = level (questo può sembrare strano ma per alcuni giochi che premiano i cambiamenti di exp in base al livello del giocatore come i borderlands a cui questo potrebbe adattarsi)

  2. exp = livello * log 10 (livello)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
  3. exp = livello ^ const_value: per il mio esempio ho impostato il valore const su 3/2

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

4

Penso che dipenda da quanto facile il giocatore può ottenere l'esperienza. Se il giocatore può ottenere 200 xp a livello 1 in 20 minuti e quindi ottenere 200 xp a livello 2 in 2 minuti in 2 minuti, allora devi ridimensionare il tuo xp in modo esponenziale.

Tuttavia, se ottenere un livello rende solo leggermente più facile ottenere xp, allora dovresti fare una funzione xp di livello più alto. (Forse lineare con un coefficiente> 1)


4

Spesso i punti necessari per ottenere un livello si basano su una curva. In molti giochi di ruolo, ci sono anche molte altre caratteristiche e caratteristiche del tuo personaggio che aumentano con il tuo livello, saranno anche sulle loro curve.

Dai un'occhiata a RPGMaker per vedere come fanno le cose. In particolare, osserva le curve dei parametri negli screenshot della sezione "Aggiungi unicità a personalizzazione dell'attrezzatura di partenza" del documento Creazione di un personaggio principale .

Fondamentalmente potresti avere una curva per la quantità di XP necessaria per salire di livello, quindi diverse curve per la quantità di HP, MP, resistenza, forza ecc. Guadagnata ad ogni livello.

inserisci qui la descrizione dell'immagine


2

Considerare il tempo

Devi prima capire come il tasso di esperienza guadagna scala con il livello. Quindi puoi personalizzare il tuo livellamento in base al tempo richiesto . Se ogni livello aggiuntivo ti consente di acquisire un'esperienza due volte più veloce e hai bisogno di un'esperienza doppia al livello, ogni livello richiederà lo stesso tempo.

Il mio suggerimento è di pensare a quanto tempo il giocatore dovrebbe trascorrere, quindi adattare il livellamento a quello.


-3

Forse dovrei semplicemente usare un sistema di livellamento piatto, in cui ogni livello richiederebbe esattamente la stessa esperienza.


3
Le risposte dovrebbero essere un po 'più elaborate di un semplice suggerimento. Prova a mettere in relazione alcuni dei vantaggi di questa strategia rispetto all'avere un sistema dinamico come quello richiesto.
MichaelHouse

Si noti inoltre che le informazioni aggiuntive devono essere pubblicate dall'autore originale ; se altri utenti hanno altro da aggiungere, dovrebbero considerare di pubblicare una risposta separata.
Gnemlock,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.