Algoritmo para calcular dinamicamente um nível com base em pontos de experiência? [fechadas]

41

Uma das lutas que sempre tive no desenvolvimento de jogos é decidir como implementar pontos de experiência atribuídos à conquista de um nível. Não parece haver um padrão para ganhar um nível em muitos dos jogos que joguei, então presumo que eles tenham uma tabela estática de dicionário que contenha pontos de experiência versus o nível. por exemplo

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

... Não há uma rima ou razão para 280 pontos serem iguais ao nível 4, apenas é.

Não tenho certeza de como esses níveis são decididos, mas certamente não seria dinâmico. Também pensei na possibilidade de níveis exponenciais, para não precisar manter uma tabela de pesquisa separada, por exemplo

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

... mas parece que isso sairia do controle rapidamente, pois, para os níveis superiores, os inimigos no jogo teriam que fornecer uma quantidade enorme de experiência para o nível - e isso seria difícil de controlar. O nivelamento se tornaria uma tarefa impossível.

Alguém tem alguma indicação ou método usado para decidir como nivelar um personagem com base na experiência? Eu quero ser justo no nivelamento e quero ficar à frente dos jogadores para não me preocupar em adicionar constantemente novas experiências / pesquisas de nível.

George
fonte
4
Não, é apenas um exponencial mais lento (multiplicando por 10 a cada ~ 3,3 níveis ou 100 a cada ~ 6,6 níveis, em vez de todos os níveis). Geométrico seria como 1 [00], 4, 9, 25, 36, etc. Mesmo 1100 1210 1331 1464 é uma série exponencial, multiplicando por 1,1.
Random832
11
en.wikipedia.org/wiki/Exponential_growth Deve esclarecer as coisas.
Aaaaaaaaaaa
11
@ Stephen: @ Random832 está correto, tanto o crescimento "exponencial" quanto o "geométrico" referem-se a uma relação constante entre termos sucessivos / equidistantes (o que significa que a taxa de crescimento é proporcional ao valor atual - no cálculo, isso é afirmado por função exponencial possui f'(x) = c*f(x)) . O termo "geométrico" é usado quando o domínio (entrada) é discreto (por exemplo, número inteiro). A fórmula para o exemplo de @ George, acima do nível 1, Experience = 100 * 2^(Level-2)é exponencial. A fórmula para sua progressão, acima do nível 1 Experience = 100^(Level-1), também é exponencial.
BlueRaja - Danny Pflughoeft

Respostas:

36

É bastante comum usar uma relação quadrada.

level = constant * sqrt(XP)

Ou o equivalente aproximado de uma diferença de nível linearmente crescente.

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

Esses sistemas funcionam muito bem quando o ganho de XP é aproximadamente linear. Se um personagem de alto nível pode ganhar XP mais rapidamente do que um personagem de baixo nível, esse não é o sistema certo.

aaaaaaaaaaaa
fonte
3
Para jogadores do tipo Achiever, eu suspeito que haja uma forte expectativa de maior ganho de XP à medida que o personagem progride. Acho a sua solução interessante e provavelmente a alteraria um pouco para produzir diferenças como 107-214-321-428, impedindo o jogador de ver apenas números redondos e também na esperança de que isso contribuísse para fazer o jogo parecer apenas um pouco mais "orgânico" (estou tentando criar uma palavra melhor que essa, mas "orgânico" é tudo o que tenho no momento).
Randolf Richardson
11
+1 este é exatamente o que eu fiz no passado, funciona muito bem
BlueRaja - Danny Pflughoeft
3
Equações para a diferença de nível linearmente crescente. nível = (sqrt (100 (2experiência + 25)) + 50) / 100 e experiência = (nível ^ 2 + nível) / 2 * 100- (nível * 100)
C9HDN
3
Ótima resposta e eu gosto da curva que isso produz. Acabei usando uma constante de 0,04. Para aqueles que se perguntam, o inverso desta fórmula para calcular para XP é: XP = nível ^ 2 / constante.
BradH 24/06
3
@ BradH Na verdade, parece ser XP = (nível / constante) ^ 2. No PHP, isso pode ser representado como XP = pow (nível / constante, 2) ou em versões posteriores, (nível / constantes) ** 2
Taylor Dondich
17

Você provavelmente encontrará funções logarítmicas úteis, pois podem ser usadas para diminuir o aumento à medida que mais pontos de experiência são ganhos. Aqui estão duas páginas da web que explicam como elas funcionam:

  Gráficos de funções logarítmicas
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Introdução às funções logarítmicas de representação gráfica
  http://www.purplemath.com/modules/graphlog.htm

Aqui está o que parece em um gráfico, que espero atender às suas necessidades:

insira a descrição da imagem aqui

Randolf Richardson
fonte
11
@ George Ao brincar com os coeficientes, você pode facilmente usar uma função logarítmica para dimensionar o nivelamento do seu jogador. +1 para usar a matemática
Stephen
2
Observe que esta é uma implementação do requisito exponencial do XP. level = log(XP) <=> XP = e^level. O requisito pode se tornar um pouco íngreme para os últimos níveis, mas funcionará bem com um crescimento adequado na acumulação de XP.
Aaaaaaaaaaa
@eBusiness: Bom ponto, mas isso pode não ser um problema, já que personagens de nível superior tendem a ganhar mais pontos com mais facilidade e em menor período de tempo (por exemplo, atacando / matando monstros mais poderosos com uma velocidade de ataque mais rápida). Essa é uma das razões pelas quais acho que essa matemática pode ser adequada para jogos de vídeo (especialmente em um contexto MMORPG).
Randolf Richardson
2
Acho um pouco estranho que o OP se preocupe especificamente com o crescimento exponencial e aceite uma resposta que descreva a mesma coisa de outra maneira. Mas acho que esse é o problema dele.
Aaaaaaaaaaa
11
@eBusiness: Talvez minha resposta tenha esclarecido algo sobre crescimento exponencial que não estava claro anteriormente? Existem muitas maneiras diferentes de aplicar a matemática, e não tenho certeza de que mesmo o melhor professor de matemática possa conhecê-los (bem, talvez o segundo melhor professor de matemática).
precisa
9

Estas são algumas maneiras que eu usei até agora. Eles são classificados pela taxa de crescimento (apenas multiplicamos todas as equações por um valor constante):

  1. exp = level (este pode parecer estranho, mas em alguns jogos que recompensam exp muda de acordo com o nível do jogador, como o borderlands)

  2. exp = nível * log 10 (nível)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
    
  3. exp = level ^ const_value: no meu exemplo, defino o valor const como 3/2

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

Eu acho que depende de quão fácil o jogador pode obter a experiência. Se o jogador conseguir 200 pontos de experiência no lvl 1 em 20 minutos e, em seguida, 200 pontos de experiência no lvl 2 em 2 minutos, será necessário escalar exponencialmente o seu xp.

No entanto, se ganhar um nível apenas torna marginalmente mais fácil obter xp, você deve executar uma função xp de mais nível. (Talvez linear com algum coeficiente> 1)

Wangburger
fonte
4

Muitas vezes, os pontos necessários para obter um nível são baseados em uma curva. Em muitos RPGs, também existem muitas outras características e atributos do seu personagem que aumentam com o seu nível, eles também estarão nas suas próprias curvas.

Dê uma olhada no RPGMaker para ver como eles fazem as coisas. Observe especificamente as curvas de parâmetro nas capturas de tela da seção "Adicionar alguma exclusividade ao personalizar o equipamento inicial" do documento Criando um personagem principal .

Basicamente, você pode ter uma curva de quanto de XP é necessário para subir de nível e, em seguida, curvas diferentes de quanto HP, MP, resistência, força etc. são obtidas a cada nível.

insira a descrição da imagem aqui

Adam Harte
fonte
2

Considere o tempo

Você primeiro precisa descobrir como a taxa de experiência ganha escalável com o nível. Depois, você pode personalizar seu nivelamento pelo tempo necessário . Se cada nível adicional permitir que você ganhe experiência duas vezes mais rápido e precisar do dobro de experiência para nivelar, cada nível exigirá a mesma quantidade de tempo.

Minha sugestão é pensar em quanto tempo o jogador deve gastar e depois adaptar o nivelamento a isso.

Willy Goat
fonte
-3

Talvez eu deva usar apenas um sistema de nivelamento plano, em que cada nível exija exatamente a mesma quantidade de experiência.

Łukasz Baran
fonte
3
As respostas devem ser um pouco mais detalhadas do que apenas uma sugestão simples. Tente relacionar alguns dos benefícios dessa estratégia em relação a ter um sistema dinâmico como o solicitado.
MichaelHouse
Observe também que informações adicionais devem ser postadas pelo autor original ; se outros usuários tiverem mais a acrescentar, eles devem considerar postar uma resposta separada.
Gnemlock