Calcul de points de degats - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Calcul de points de degats (/showthread.php?tid=226) |
Calcul de points de degats - comode - 18-09-2006 Bonjour, Imaginez un jeu ou un joueur dispose de point d'attaque et de point de défenses. Ces 2 valeurs antagonistes doivent permettre de déterminer le nombre de point de dégats infligés entre joueurs en fonction de vos point d'attaques et en fonction des points de defense de votre victime. Mon but est de trouvé la fonction qui permettra de déterminer en fonction de ces valeurs les domages les plus justes. Pour cela, je considère un nombre de points de degats fixes (en réalité, il a une faible composante aléatoire dont on fera abstraction ici) infligé lorsque le nombre de points d'attaque est équivalent au nombre de points de defense. On appel cette valeur C. Ensuite, on considère des limites inférieurs et supérieurs exprimés en fonction de C qui vont déterminer les valeurs minimum et maximum de points de degats infligés. Ainsi, lorsque le rapport ATK/DEF tend vers l'infinie, on doit arriver a un nombre de points de degats infligés de l'ordre de 1.9*C. Inversement, lorsque le raport de DEF/ATK tend vers l'infini, on doit ingliger 0.1*C dégats. Reste ensuite a être subtil en écriavant la fonction (Ln?) de sorte a ce que la variation des points de degats infligés ne soient pas trop brutales entre des valeurs proches; ex : STR=20 et DEF=20 ne doit pas faire une différence trop significative avec le couple STR=20 et DEF=21, ce qu'implique pourtant l'utilisation d'un Log n. J'en arrive donc à ma question, quelqun aurrait-il une fonction géniale qui ferait ça ? J'ai déjà testé un certains nombres de fonctions, mais aucune ne m'a encore donné satisfaction. J'utilise en attendant (et j'espère provisoirement) une fonction linéaire bornée. Merci de votre aide ! RE: Calcul de points de degats - naholyr - 18-09-2006 Vite fait comme ça, mais c'est à tester : en posant f(x) = (x+1.8)/(x²+1) On a f(0) = 1.8, et f(x -> +oo) -> 0. Donc en posant g(x) = f(x)+0.1 On aurait g(+oo) = 0.1, et g(0) = 1.9 Tu pourrais donc calculer dégats = g(DEF/ATK) * C = ( 0.1 + ( (DEF/ATK+1.8)/(DEF²/ATK²+1) ) ) * C Par contre autant je pense être OK sur ces limites, autant je n'ai aucune idée de son tracé, donc il faudrait que tu analyses un peu la fonction avant de l'appliquer. Voici quelques valeurs d'exemple : Citation :g(0) = 1.9 Pour gérer la vitesse d'aplatissement de la fonction tu peux jouer sur la puissance du x en dénominateur. Code PHP :
Voici les 10 premières valeurs pour PUISSANCE_DE_X = 3 : Citation :g(0) = 1.9 Et les 10 premières valeurs pour PUISSANCE_DE_X = 1.5 : Citation :g(0) = 1.9 RE: Calcul de points de degats - comode - 18-09-2006 Huhuhu, ça c'est de la réponse ! J'ai bien compris le principe que tu proposes et je te remercie de l'avoir ennoncé si clairement. Donc il me reste a trouver le moyen de tracer cette fonction (comme je regrette ma vieille TI92 :p) et voir ce qu'elle donne. Ensuite, si les variations sont trop brutales, j'imagine que je pourrais toujours arrangé ça en appliquant un même coefs a DEF et ATK. Oh, et juste pour la forme, si je ne m'abuse, on devrait écrire ta relation finales : ( 0.1 + ( ((DEF/ATK)+1.8)/((DEF²/ATK²)+1) ) ) * C edit : je pinaille pour rien, j'ai pas fait de math depuis une éternité et j'oublieais que la div était prioritaire sur l'addition RE: Calcul de points de degats - comode - 18-09-2006 Arf, tu as éditer pendant que je répondais :p Bon, tu confirmes donc mon inquiétude, la variation est en effet un peu brutale :p et heu... tiens... d'ailleur... g(1) ne devrait-il pas etre egale à 1 d'après l'ennoncé ??? (et faudras que je teste avec des valeurs entre 0 et 1 aussi) RE: Calcul de points de degats - naholyr - 18-09-2006 J'ai encore édité pendant ta réponse ^^ Avec PUISSANCE_DE_X = 1.1 tu as une évolution bien plus lente, mais en effet tu as soulevé le problème de la valeur pour x=1, on aura toujours g(x) = 1.5, ça fait donc une chute un peu brusque. À paufiner quoi Tiens, voici les courbes pour illustrer : La plus basse (bleu foncé) c'est PUISSANCE_DE_X = 2 Ensuite, dans l'ordre : 1.5, 1.2, 1.1 Mais ce n'est pas satisfaisant. Je pense que l'idéal est de travailler avec plusieurs fonctions, mais encore faut-il trouver lesquelles je te l'accorde ^^ mes compétences mathématiques ne me permettront pas de sortir quelque chose de plus complexe que la fonction à laquelle j'ai pensé de prime abord. RE: Calcul de points de degats - naholyr - 18-09-2006 Ah ! une piste ! Si on introduit un coeff < 1 devant les deux X, on diminue de fait l'impact des variations de X sur les variations du résultat. En le donnant très petit, la fonction va varier très peu, en augmentant la puissance de X, on augmente la vitesse d'aplatissement. Résultat en jouant sur les deux paramètres on obtient des résultat plus ou moins satisfaisants. En gros : plus le coefficient est petit, et plus tard la fonction chute, et plus la puissance est grande et plus fort la fonction chute. Voici un exemple avec puissance = 3, et coeff = 0.001 Code PHP :
Citation :f(0) = 1.9 Pas mal non ? De toute façon en gardant ce squelette de fonction on chutera toujours plus vite au début qu'à la fin (aplatissement), et bien vérifier la courbe avant d'appliquer des paramètres, il peut y avoir des surprises : exemple avec puissance=10 et coeff=0.0000001 Citation :f(0) = 1.9 RE: Calcul de points de degats - comode - 18-09-2006 En effet... Je regarde pas tout de suite car j'ai une réunion qui m'attend, mais je me jette dessus dès mon retour. A vu d'oeil, pour corriger le problème du g(1) = 1, il doit suffir d'appliquer la fonction présente pour chacun des cas (atk > def ou def > atk) en modifiant juste les bornes de la fonctions En tout cas, 1000 mercis pour le coup de main :p RE: Calcul de points de degats - comode - 18-09-2006 Hi hi, p'tet que ça serait plus simple en intégrant une fonction qui détermine les variations de degats en fonction du rapport atk/def Bon, faut vraiment que je file, je me repenche la dessus a mon retour ! encore merci RE: Calcul de points de degats - comode - 19-09-2006 Code : <?php Apache a écrit :f(0) = 1.9 Donc pitit problème quand tu modifie la puissance de X sur l'intervale ]0-1[ ^^ (puissance négative -> diminution de x² et vu qu'il est diviseur et que le x divisé diminue moins vite, augmentation du resultat et franchissement de notre limite) Mais t'inquiète, tu m'as déjà apporté tous les éléments de réponse nécessaire. Donc encore une fois, merci -> oo RE: Calcul de points de degats - joshua - 19-09-2006 c'est des malaaaaaaaaaaaaaaaaaaaaaadesssssssssss ^^ Me faites pas ca au petit dej les gars :p En tout cas chapeau Naholyr... |