Aller au contenu

Fonction calcul expérience


Étienne9

Messages recommandés

Hello,

Dans un jeu, je suis actuellement à la recherche d'une fonction mathématique simple permettant de calculer l'expérience qu'un joueur d'un certain niveau nj (niveau joueur) gagnera en tuant un monstre d'un autre niveau nm (niveau monstre).

Les critères sont les suivants :

- l'expérience gagnée doit être >= 0
- l'expérience est égale à 0 si l'écart est trop important entre le niveau du joueur et celui du monstre, par contre, la tolérance est plus importante sur des plus gros niveau. Exemple: 80 qui frappe un niveau 50, on peut gagner un tout petit peu d'expérience, par contre un 10 qui tape un 3 et qui gagne de l'expérience, ça choque, ou encore, 30 VS 17 ne choque pas non plus à une faible dose
- valeur xpMin en entrée (xp minimum >= 1)
- valeur xpMax en entrée (xp maximum > xpMin)
- ainsi, l'expérience gagnée doit varier entre xpMin et xpMax, et il y a une part d'aléatoire, mais plus le joueur a un niveau petit par rapport au monstre, plus la probabilité d'avoir xpMax est élevée

Je vous remercie d'avance pour vos idées :)

J'espère n'avoir rien oublié

Cordialement

Lien vers le commentaire
Partager sur d’autres sites

C'est marrant, les forums d'aide sont plutôt faits pour des sujets liés aux apprentissages scolaires, c'est étonnant mais c'est aussi intéressant de se poser ce genre de question !
Alors déjà, sache qu'à première vue il s'agirait plutôt d'une fonction à deux variables : Xmin et Xmax, que j'appellerai dans la fonction X1 et X2.

je te propose la fonction f(X1; X2) = ent[(X1 x X2)/a]  x  ent[e^(X2 - X1)/b] , où :

a et b sont des coefficients positifs à choisir pour que les résultats soient intéressants pour ton jeu. En jouant sur ces valeurs, tu devrais pouvoir trouver une fonction qui te plaît. Plus a est grand, moins ce membre est utile, et plus a est petit plus ce membre a une importance dans le calcul. N'oublie pas que tu peux choisir 0<a<1 pour le rendre vraiment petit !
X1 est l'xp du joueur et X2 l'xp de son adversaire. Ainsi, si X2>X1, c'est-à-dire si l'Xp de l'adversaire est plus grande que celle du joueur, le joueur prend pas mal d'xp. Sinon, l'adversaire prendra beaucoup moins d'xp.
ent[...] est la fonction partie entière, elle ne conserve que la partie entière d'un nombre à virgule (2.534987 devient 2 par exemple), c'est pour faciliter les calculs.
e^... est la fonction exponentielle, avec e=2,718 (environ)

Voilà, dans cette fonction le premier membre du produit sert à rendre le gain d'xp intéressant dans les grands niveaux même si il y a une grande différence de niveaux, et le deuxième membre du produit sert à rendre l'xp de plus en plus grande lorsque l'adversaire est plus fort, et de moins en moins grand lorsque l'adversaire est plus faible.

Essaie de voir si tu peux en tirer quelque chose de chouette !

Modifié par Groovypulse
Lien vers le commentaire
Partager sur d’autres sites

Pardon je me suis trompé, je pense que mettre une addition au milieu plutôt qu'un produit serait probablement plus intéressant.

Ce qui ferait :

f(X1;X2)=ent[(X1 x X2)/a] + ent[(e^(X2 - X1))/b]

Perso, je pense qu'avec a = 0.1 et b = 5 c'est pas mal :)
Tu remarqueras que lorsqu'il n'y a qu'un niveau de différence, c'est presque uniquement le premier terme qui compte. le deuxième terme, lui, intervient surtout lorsque la différence de niveau est grande.

Après, c'est à toi de choisir tes paliers pour changer de niveau. Evidemment, c'est mieux si les paliers sont du genre 10^n, pour que plus ton level est haut, plus ce soit vraiment plus difficile de gagner un level de plus. Bref, à toi de voir pour ces petits ajustements !

Modifié par Groovypulse
Lien vers le commentaire
Partager sur d’autres sites

Hello,

Merci beaucoup pour votre aide :)

De notre côté, nous n'allons pas utiliser la partie gauche, le gain d'expérience ne doit pas évoluer.
Ainsi, un 10 VS 10 gagnera la même XP que 100 VS 100 (à part la partie aléatoire qui peut en faire gagner un peu plus ou un peu moins)

En fait, plus on level up, plus ça doit être dur de level up,

Et la quantité d'XP nécessaire à chaque niveau augmente :)

Donc si on donne de plus en plus d'XP..... aïe ! On va perdre cet intérêt.

Par contre, si je ne mets que la partie droite, j'imagine qu'on risque de gagner des XP négatif ?

Au pire un max(0, la partie droite) ?

Cordialement

 

 

Lien vers le commentaire
Partager sur d’autres sites

Non pas de problème de ce point de vue là, car la fonction exponentielle ne donne que des résultats positifs.

Le seul problème, c'est qu'en utilisant que la partie droite, il sera presque impossible d'obtenir de l'Xp en combattant des levels inférieurs, même légèrement et même si l'on choisit une valeur b=1 : si on est lvl 10, combattre un lvl 11 et gagner ne rapporterait que 2 points d'Xp, combattre un lvl 10 ne rapporterait que 1 point et combattre un lvl 9 ne rapporterait rien du tout. Ce n'est vraiment pas beaucoup... Mais encore une fois, il faut aussi jouer sur les paliers pour faire lvl up, il faut donc prévoir des paliers de plus en gourmands en Xp (c'est pour cela que justement je donnais l'exemple de paliers construits sur une base de 10^n, où n est le numéro du palier, mais tu peux changer le 10 en n'importe quel entier positif, c'est à toi de voir en fonction de tes besoins et de ce que tu veux comme difficulté dans ton jeu).

Pour corriger cela, on pourrait envisager une formule du genre :

f(X1 ; X2) = ent[ 1.4 ^ ( b x (X2  / X1) ) ]


où b est un nombre strictement supérieur à 1 : b > 1. Une valeur genre b=15 me paraît pas mal. Mais attention, tu verras, cela monte très vite, même avec 1.4 comme base !

Du coup, avec cette formule, c'est uniquement la différence de lvl en terme de proportion qui compte dans le gain d'Xp. Par contre, il faut bien paramétrer les paliers pour que cela devienne de plus en plus difficile de lvl up. Je pense aussi que donner un niveau max permettrait aussi de mieux étalonner la fonction f qui permet de calculer l'Xp gagnée, et de mieux paramétrer les paliers justement. Il faut faire des tests, je pense, et là c'est à toi de jouer...

Modifié par Groovypulse
Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...
spam filtering
spam filtering