GameCorp - Index des forumsGame MakingProgrammationProgrammation[Petit défit algorithmique] Retrouver le niveau d'une créature
[Petit défit algorithmique] Retrouver le niveau d'une créature
| akd |
Posté le 02 Juin 2008 à 23:19
|
|
![]() Messages : 319 GCPoints : 75439 |
Bonjour tout le monde, en théorie j'ai trouvé une petite soluce pour réussir à le faire, mais vu que les maths commencent à être loin pour moi (surtout à cause du manque de pratique), je préfère vous demander conseil. L'implémentation des points d'expériences (points de compétences) dans mon projet est la somme des n premiers entiers (avec un coeff multiplicateur de 100). En gros: lvl 1 -> lvl 2 : 100 points lvl 2 -> lvl 3 : 200 points (cumul 300) lvl 3 -> lvl 4 : 300 points (cumul 600) ... Seul le nombre total d'Xp est stocké en dur. Il faut donc pour chaque créature au chargement retrouver le niveau associé. Voilà mon algo Code : int calLevel = (nbPc / 100) *2; //puisque la somme des n premiers entiers est de la forme n(n+1)/2
int cpt = 1;
if (nbPc < 100) return 1; // pour le premier niveau
while (cpt * (cpt + 1) < calLevel)
{
cpt++;
}
return cpt;J'aime pas trop ma boucle, j'ai peur que ça prenne beaucoup de temps CPU pour rien au bout d'un certain nombre de niveau; surtout vu que j'utilise ca aussi pour le refresh de niveau sur les personnages joueurs après chaque gain de points de compétences (donc à chaque coup sur la tronche d'un streum). Donc si vous avez une meilleure idée je suis preneuse.
Dernière édition le 02 Juin 2008 à 23:26
|
|
| Gulix |
Posté le 03 Juin 2008 à 08:56
|
|
![]() Messages : 184 GCPoints : 8860 |
As-tu un niveau maximum de points d'expérience ? Si oui, ce ne serait pas plus simple d'avoir un tableau statique / global indiquant les différents seuils d'expérience, et de rechercher le niveau dans ce tableau ? en C#, ça pourrait donner : Code :
int[] tSeuils = new int[] {0, 100, 300, 600, 1000};
...
int getNiveau(int exp)
{
int niveau = 0;
for(int i=0; i < tSeuils.Length; i++)
{
if (exp < tSeuils[i])
{
niveau = i;
break;
}
}
return niveau;
}
"Bien souvent, l'école représente votre meilleure chance. Non pas d'apprendre quoi que ce soit, bien sûr, mais de survivre à une attaque de morts-vivants".
Max Brooks - Guide de survie en territoire zombie Mon Blog, mélange de prog' et de culture Blind Shark - Pull N' Bounce |
|
| akd |
Posté le 03 Juin 2008 à 10:01
|
|
![]() Messages : 319 GCPoints : 75439 |
Héhé, pas de niveau maximal justement, sinon j'aurais utilisé une table d'expérience ^^" | |
| Mod |
Posté le 03 Juin 2008 à 10:11
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Ca fait une petite heure que je fouine, et je dois dire que c'est assez ennuyeux à résoudre... On peut traduire le calcul sous forme de suite mathématique : U(n) = U(n-1) + 100n Le soucis, c'est que ça n'est ni une suite arithmétique (qui a une raison fixe, 100n est variable), ni une suite géométrique (pas de facteur différent de 1 pour U(n-1)), et du coup ce n'est pas plus une suite arithmético-géométrique. Bref, c'est casse-pieds Je cherche encore... [Edit] Après eux heures de tentatives... Bon je crois que je vais arrêter là pour l'instant
Dernière édition le 03 Juin 2008 à 10:53
|
|
| Tersaken |
Posté le 03 Juin 2008 à 11:46
|
|
![]() Messages : 302 GCPoints : 23103 |
Je ne suis pas sur d'avoir bien compris, en gros, tu veux obtenir le niveau en donnant le nombre d'xp acquérit jusqu'ici ? La première chose à faire est de diviser ce nombre d'xp par 100 et de ne garder que la partie entière ... xp = int(xp/100.0) ; Ensuite, en mathématique la somme des n premiers entiers est égale à (n²+n) / 2où n est justement le niveau nous intéressant ; en gros, il suffit de trouver n tel que xp = (n²+n)/2 => n²+n - 2xp = 0 Delta = 1 + 8xp Donc la solution est ( -1 + [ Delta ] ^0.5 ) / 2 ou ( -1 - [ Delta ] ^0.5 ) / 2 On ne garde que la solution entière et positive ( en gras ) ... à laquelle on rajoute 1 Dans l'exemple du premier post, le niveau 2 s'obtenait pour xp = 100 ; xp = 100/100 = 1 n = ( -1 + [ 9 ] ^0.5 ) / 2 +1 = 1+1 = 2 Le niveau 4 s'obtenait comme xp = 600 n = ( -1 + [ 49 ] ^0.5 ) / 2 +1 = 3+1 = 4 Le niveau 4 peut aussi s'obtenir comme 850 ( par exemple) xp = int(xp /100) = 8 n = ( -1 + 65^0.5 )/2+1 ~ 4.53, on ne s'occupe que de la partie entiere, on obtient encore une fois 4 ( rassurant etc ...
Dernière édition le 03 Juin 2008 à 14:10
|
|
| Mod |
Posté le 03 Juin 2008 à 12:33
|
|
![]() Messages : 4954 GCPoints : 2100823 |
Hum, vu l'endroit où je me dirigeait, je ne suis pas mécontent d'avoir arrêté J'ai l'impression que tu dois faire un petit peu de maths en cours ^^. |
|
GameCorp - Index des forumsGame MakingProgrammationProgrammation[Petit défit algorithmique] Retrouver le niveau d'une créature
Répondre

