Aller au contenu


Photo

Chances de capture sharpmon, gain de niveau, statistique base et current


  • Veuillez vous connecter pour répondre
9 réponses à ce sujet

#1 Bastien SULYAN

Bastien SULYAN

    Member

  • Étudiant
  • PipPip
  • 17 messages
  • Cursus:B.Sc.

Posté 20 décembre 2016 - 02:15

Bonjour,
 
Je suis un peu bloqué sur les chances de capture. Le sujet nous donne la formule suivante :
 

Capture success = (EnemyMaxHP - EnemyHP) / 100 - 0.5

 

 
Puis 2 exemples :
 

((10-1)/100) - 0.5 = 0.4

 

 
Vérification :
((10-1)/100) - 0.5
0.1 - 0.5
≈ -0.4 
 
Ce qui serait un peu farfelu car ce serait négatif donc impossible. Sauf que le résultat dans le sujet est 0.4 (ce qui dans ce cas là aurait du sens)  
On a ensuite :  
 

((10-5)/100) - 0.5 = 0.0
 

 

Vérification :
((10-5)/100) - 0.5
= 0.05 - 0.5
= - 0.45
 
Si quelqu'un pouvait m'expliquer ce que j'avais loupé ce serait sympa. 
 
Ensuite autre problème, l'expérience qui ne sert visiblement à rien. On peut en gagner mais pas s'en servir vu qu'on ne nous donne pas la formule pour gagner un niveau ... Donc mis à part avec des super bonbons, bah on peut farm autant qu'on veut ça ne sert à rien, et dans la partie approprié on nous dit juste cela :

 

 

Sharpmons can earn levels (but not evolve). Each time a Sharpmon evolves, it should increase all of its

statistics by 30%. For each statistic, if the value is not an integer, there is 50% chance to take the value
above and 50% chance to take the value below.

 

Pour finir dernière question sur les statistiques, ne serait-ce pas plus propre de créer au début un sharpmon identique au premier sharpmon de la liste du joueur, utiliser et modifier les valeurs du sharpmon créé avant le combat durant le combat, puis de reporter sur le sharpmon du joueur les hp du combat terminé ou lorsque le sharpmon est changé.

Cela éviterait d'avoir 5 ou 6 variables supplémentaires à modifier à chaque fin et début de combat, ce qui simplifierai et allégerai le code.


Bastien SULYAN 

Étudiant en A.SC.2 

 

bastien.sulyan@supinfo.com


#2 Yohann JOLAIN

Yohann JOLAIN

    Member

  • Étudiant
  • PipPip
  • 41 messages
  • Location~/
  • Cursus:B.Sc.

Posté 20 décembre 2016 - 03:17

Bonjour,

 

Je suis complètement d'accord avec ton premier point, la formule calculant la chance de capture ne veut rien dire. Je pense qu'on doit diviser par 10 au lieu de 100.

 

Il y a aussi une autre formule qui me laisse perplexe, c'est celle du calcul des dégats infligés :

 

Damage = LaucherPower/(AttackDamage * EnemyDefense)

 

Si on suit cette formule, plus l'attaque inflige des dégats, plus les dégats infligés sont faibles...

 

Pour ton 2ème point, je pense qu'il faut mettre un pallier arbitraire pour gagner un niveau. N'ayant aucune consigne là dessus, mais le level up devant être implémenté, c'est la solution la moins prise de tête.

 

Et pour ton dernier point, on peut résoudre le problème de manière assez élégante: tu crées 2 dictionnaires de valeurs pour tes stats. Celà permet d'itérer sur les stats et d'éviter de dupliquer un objet et de faire un report de valeur par la suite, ce que je trouve illogique, car 2 instances représentent un individu.

 

Mais le sujet est assez confus, et je pense qu'on peut prendre quelques libertés avec celui ci, tant que le cahier des charges est remplit, et que les conventions du .NET sont respectées

 

Cordialement



#3 Benjamin LABASTIE

Benjamin LABASTIE

    Member

  • Étudiant
  • PipPip
  • 184 messages
  • LocationCaen
  • Cursus:M.Sc.1

Posté 20 décembre 2016 - 05:30

Bonjour,

 

Je suis complètement d'accord avec ton premier point, la formule calculant la chance de capture ne veut rien dire. Je pense qu'on doit diviser par 10 au lieu de 100.

 

La formule exprime une forme de pourcentage de points de vie perdus, il serait sans doute mathématiquement plus correct de faire :

Capture = ((EnemyMaxHp - EnemyHp)/ EnemyMaxHp) - 0.5

 

 

 

Il y a aussi une autre formule qui me laisse perplexe, c'est celle du calcul des dégats infligés :

 

Damage = LaucherPower/(AttackDamage * EnemyDefense)

 

La formule est plutôt :

Damage = LauncherPower * AttackDamage / TargetDefense

 

 

 

Pour ton 2ème point, je pense qu'il faut mettre un pallier arbitraire pour gagner un niveau. N'ayant aucune consigne là dessus, mais le level up devant être implémenté, c'est la solution la moins prise de tête.

Il faut effectivement définir une valeur d'xp arbitraire (qui augmente selon les niveaux) comme dans n'importe quel jeu avec un système d'expérience.

 

 

 

Cordialement,


                  Benjamin LABASTIE
              M.Sc.1 Campus de CAEN

UXDcvH9.png


#4 Bastien SULYAN

Bastien SULYAN

    Member

  • Étudiant
  • PipPip
  • 17 messages
  • Cursus:B.Sc.

Posté 20 décembre 2016 - 06:04

Et pour ton dernier point, on peut résoudre le problème de manière assez élégante: tu crées 2 dictionnaires de valeurs pour tes stats. Celà permet d'itérer sur les stats et d'éviter de dupliquer un objet et de faire un report de valeur par la suite, ce que je trouve illogique, car 2 instances représentent un individu.

 

Bah justement, je trouve ça plus illogique de se traîner des variables éphémères sur tout le programme et de les traiter manuellement, plutôt que d'avoir un sharpmon éphémère qui disparaît à la fin du combat et dont on n'aura pas à s'occuper. Rajouter ou non des dictionnaires ni change pas grand chose. 

 

Je trouve que le projet est un peu trop encadré et que l'étudiant ne doit plus ce casser la tête à savoir comment réaliser le corps du programme mais à déchiffrer ce que lui impose le sujet.

 

Merci pour vos contributions

 

EDIT : 

 

Bonjour,

 

Je suis complètement d'accord avec ton premier point, la formule calculant la chance de capture ne veut rien dire. Je pense qu'on doit diviser par 10 au lieu de 100.

 

 
Même si tu divises par 10, cela fonctionnera bien avec des petits nombres, mais cela ne fonctionnera plus après

Bastien SULYAN 

Étudiant en A.SC.2 

 

bastien.sulyan@supinfo.com


#5 Yohann JOLAIN

Yohann JOLAIN

    Member

  • Étudiant
  • PipPip
  • 41 messages
  • Location~/
  • Cursus:B.Sc.

Posté 20 décembre 2016 - 09:58

Bonjour,

 

@Benjamin: Oui je comptais de toute manière rectifié un peu les formules qui me semblent pour certaines assez aberrantes, mais dommage que le sujet nous donne des informations qui soient erronées.

 

@Bastien: Je suis d'accord, le sujet guide trop l'élève, après est ce un choix pédagogique? Je ne sais pas, mais je pense que c'est assez déplacé dans le cadre d'une évaluation. Pour la question de la formule, si la chance de capture est négative, fixe là à 0, c'est ce que je ferais, je n'ai pas envie de me casser la tête pour un détail. Après, vu le sujet, prend la formule que tu veux, celle de Benjamin à l'air cohérente, mais si tu veux éviter les solution négative, il te faut trouver un moyen d'atténuer le - 0.5, qui créer cette situation. Je ne vois pas de solution, à moins de multiplier la formule par 0.5 (ou autre coef) au lieu de lui soustraire 0.5, ça éviterais de tomber dans les nombres négatifs...

 

Cordialement



#6 Benjamin LABASTIE

Benjamin LABASTIE

    Member

  • Étudiant
  • PipPip
  • 184 messages
  • LocationCaen
  • Cursus:M.Sc.1

Posté 20 décembre 2016 - 10:33

mais si tu veux éviter les solution négative, il te faut trouver un moyen d'atténuer le - 0.5, qui créer cette situation. Je ne vois pas de solution, à moins de multiplier la formule par 0.5 (ou autre coef) au lieu de lui soustraire 0.5, ça éviterais de tomber dans les nombres négatifs...

 

L'intérêt du -0,5 est d'empêcher la capture d'un Sharpmon si celui-ci a plus de 50% de sa vie, s'en défaire revient à autoriser une capture sans combattre.

Moins le Sharpmon aura de vie, plus ses chances de capture tendront vers 1/2.

Il est du coup logique d'obtenir une probabilité négative si moins de 50% de sa vie a été retirée (ou nulle si 50% de sa vie a été retirée) : la capture sera impossible.


                  Benjamin LABASTIE
              M.Sc.1 Campus de CAEN

UXDcvH9.png


#7 Bastien SULYAN

Bastien SULYAN

    Member

  • Étudiant
  • PipPip
  • 17 messages
  • Cursus:B.Sc.

Posté 21 décembre 2016 - 01:17

Dans ce cas là je propose la formule suivante :

 

1 - ((HP  + 1/2 MaxHP) / MaxHP)

 

Par contre il faut que la vie du sharpmon soit strictement inférieur à 50% pour que cela fonctionne. 

Si HP >= 1/2 Max HP on aura une proba nulle ou égale à 0%.

Si HP < 0, le combat n'est normalement pas possible.


Bastien SULYAN 

Étudiant en A.SC.2 

 

bastien.sulyan@supinfo.com


#8 Benjamin LABASTIE

Benjamin LABASTIE

    Member

  • Étudiant
  • PipPip
  • 184 messages
  • LocationCaen
  • Cursus:M.Sc.1

Posté 21 décembre 2016 - 04:18

1 - ((HP  + 1/2 MaxHP) / MaxHP)

 

((EnemyMaxHp - EnemyHp)/ EnemyMaxHp) - 0.5

 

 

Effectivement cela reste la formule que j'ai préalablement évoquée...

4GhiAtW.png

 

On peut même pousser la réécriture à 0.5 - (EnemyHp/EnemyMaxHp) pour chipoter et économiser 1 opération élémentaire *youpi*.


                  Benjamin LABASTIE
              M.Sc.1 Campus de CAEN

UXDcvH9.png


#9 Emilien GAUTHIER

Emilien GAUTHIER

    Newbie

  • Étudiant
  • Pip
  • 3 messages
  • Cursus:A.Sc.2

Posté 22 décembre 2016 - 06:04

Vous pensez qu'on peut utiliser nos propres formules ?

J'ai modifié la vraie formule de capture des jeux pokemons et ça donne (3*pvMax - 2*pvActuel) / (3*pvMax) - 0.2
Au final, ça donne des résultats plus cohérents je trouve 



#10 Yohann JOLAIN

Yohann JOLAIN

    Member

  • Étudiant
  • PipPip
  • 41 messages
  • Location~/
  • Cursus:B.Sc.

Posté 23 décembre 2016 - 09:53

Bonjour Emilien,

 

Je pense qu'on peut tant qu'on explique pourquoi on fait ça en commentaire. Le sujet a des formules que je trouve foireuses, et qui sont pas cohérentes avec l'intitulé, donc vas y, mais explique pourquoi tu as fait ça ;)

 

Cordialement






1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)