[programation] Logiciel de spellcraft

Répondre
Partager Rechercher
Bon, je ne sais pas si je suis sur le bon forum, mais je ne suis pas sûre que j'obtienne une réponse sur le forum technique, qui me semble parler plus des pbs liés au jeu en lui même (mais sinon, dépalcez moi )...

Je ne laisse pas tomber mon logiciel de craft, mais j'en ai commencé sur le spellcraft dans le même temps, et je dois dire que là, je cale...

Dans les faits, le logiciel est quasi fini, à une exception près : le calcul des points de charge.

Je récupère bien les pts de charge inhérents à chaque gemme, ce qui donne quelque chose du style :
charge1 = 5
charge2 = 3
charge3 = 7
charge4 = 1
(exemple totalement fictif et probablement faux, mais ce n'est pas le but de la question)

A partir de là, j'ai un soucis pour obtenir le total des points :
J'étais parti sur un test qui me ressort la variable la plus élevée des 4 valeurs, ce qui me donne dans mon exemple :
max = 7
autre1 = 5
autre2 = 3
autre3 = 1

Et là, j'applique une formule que je croyais être la bonne :
((max * 2) + autre1 + autre2 +autre 3.)/2

Et là j'obtiens un chiffre total qui me donne la charge de l'objet.
Soucis, ce chiffre n'est jamais bon... Je le compare avec ce que j'obtiens sur le logiciel de Finnithnel et ce n'est pas toujours bon.

A priori, mon soucis vient de l'arrondi, quand il y a des gemmes d'une valeur de 0,5.

D'où mon appel au secours :
Si quelqu'un pouvait m'expliquer où je me plante...
Encore mieux, si quelqu'un connait la réponse en VB.

J'ai envoyé un MP à Finnithnel qui doit avoir résolu ce pb et qui fait du VB, mais c'était mon 1er MP, je ne sais pas du tout si je l'ai envoyé comme il faut , ou alors s'il est en vacances ou s'il ne veut pas me donner la réponse (un logiciel concurrent ? ^^)...

Toujours est il que je sèche... Encore une demi-heure de boulot dessus et il est prêt à mettre à disposition, c'est rageant.

D'avance merci à ceux (et celles ) qui pourront m'aider, et désolé pour le mal de crâne occasionné à ceux que ça n'intéresse pas du tout (mais fallait pas lire jusqu'au bout:bouffon:
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb

Je pencherais sur le fait que tu tronques le résultat alors qu'il faut faire un arrondi. Exemple :
Pour 10,5 => tronque = 10 Arrondi=11

Si c'est ça, rajoute juste à ta formule un +0,5
Ca deviens donc :
((max * 2) + autre1 + autre2 +autre 3.)/2 + 0.5
Citation :
Provient du message de eldora
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb

Je pencherais sur le fait que tu tronques le résultat alors qu'il faut faire un arrondi. Exemple :
Pour 10,5 => tronque = 10 Arrondi=11

Si c'est ça, rajoute juste à ta formule un +0,5
Ca deviens donc :
((max * 2) + autre1 + autre2 +autre 3.)/2 + 0.5
non c'est l'inverse

si tu regarde dans le herald le code du javascript du spellcalc tu trouve ca:

if ((itemStrength4 >= itemStrength2) && (itemStrength4 >= itemStrength3) && (itemStrength4 >= itemStrength1)) { itemStrength4 = itemStrength4 * 2; }
if ((itemStrength3 >= itemStrength2) && (itemStrength3 >= itemStrength1) && (itemStrength3 >= itemStrength4)) { itemStrength3 = itemStrength3 * 2; }
if ((itemStrength2 >= itemStrength1) && (itemStrength2 >= itemStrength3) && (itemStrength2 >= itemStrength4)) { itemStrength2 = itemStrength2 * 2; }
if ((itemStrength1 >= itemStrength2) && (itemStrength1 >= itemStrength3) && (itemStrength1 >= itemStrength4)) { itemStrength1 = itemStrength1 * 2; }


itemStrength = itemStrength1 + itemStrength2 + itemStrength3 + itemStrength4;
if (itemStrength > 0) { var i9 = Math.floor( itemStrength / 2); }
if (itemStrength < 1) { var i9 = 0; }

math. floor en javascript signifie que tu doit prendre la valeur entiere inferieure ou egale.

utilise trunc(x) plutot que round(x) en delphi ou floor en c++
Citation :
Provient du message de Bagnard à Vie
HS -
hum c'est quoi l'interet de refaire un programme qui existe déja en ultra complet , tel que le Leladia ?
fin du HS -
peut etre un interet ludique...? la programmation aussi peut etre un loisir, pas seulement le farming de RP...
Citation :
Provient du message de Bagnard à Vie
HS -
hum c'est quoi l'interet de refaire un programme qui existe déja en ultra complet , tel que le Leladia ?
fin du HS -
Il y a trois réponses :
La première est, il est vrai, que j'aime me torturer l'esprit. Le plaisir de trifouiller dans les lignes de code ... Mais je te rassure, je ne me fais pas de petits programmes que pour DAOC, mais il se trouve que j'y joue, alors, si en plus ça peut servir à quelqu'un. Mieux vaut avoir le choix entre plusieurs logiciels que d'être en train de pourrir la vie à un pauvre arcaniste et ses feuilles de papier. Et si tu veux continuer à utiliser celui de Leladia, sache que je ne t'en voudrais pas

La deuxième : ça m'occupe quand je craft (Vive SI et la fonction alt+tab !). Je lance une potion, je tape 2 lignes de code, je lance un proc, je colle un bouton... Tu saisis ?

La troisième : Bien que celui qu'a fait Finn soit bien et pratique (c'est celui que j'utilise), il manque toujours des fonctionnalités que j'aurai aimé avoir, etc... Et plutôt que lui demander de les ajouter ... ON n'est jamais aussi bien servir que par soit même. Je ne dis pas que le mien sera mieux (il est même possible qu'il soit moins complet, au moins dans un premier temps), mais puisqu'il aura le mérite d'exister, autant que j'en fasse profiter tout le monde... C'est un freeware, j'y gagne rien (enfin, si quelqu'un tient absolument à payer pour, je ne dirai pas non ! )


Citation :
Provient du message de eldora
Si tu pouvais indiquer le chiffre que tu obtiens et celui de Fin, ça permettrait de savoir d'où vient le pb
Je vais prendre un vrai exemple, ça va être plus parlant.
Je mets sur un objet :
vie + 28 = 7 pts de charge
constitution + 7 = 5 pts de charge
1 compétence +2 = 5 pts de charge
Focus quelqu'il soit = 0,5 pts de charge.

Avec ma formule actuelle, j'obtiens 12,25


Si je remplace dans ma formule le signe de division, ce qui donne :
((max * 2) + autre1 + autre2 +autre 3.) \ 2 (le signe \ arrondi lors de la division en VB)
J'obtiens 12.

En vérifiant sur le logiciel de Finn, déjà, j'ai un soucis, un focus seul, il m'indique 1 pt de charge, je croyais que c'était 0,5).
En mettant les mêmes gemmes, j'obtiens 12,5
J'ai quasiment tout le temps une différence de 0,5)


Citation :
itemStrength = itemStrength1 + itemStrength2 + itemStrength3 + itemStrength4;
if (itemStrength > 0) { var i9 = Math.floor( itemStrength / 2); }
if (itemStrength < 1) { var i9 = 0; }

math. floor en javascript signifie que tu doit prendre la valeur entiere inferieure ou egale.

utilise trunc(x) plutot que round(x) en delphi ou floor en c++ [/i]
Je suis désolé, je ne comprends rien au javascript, ni au delphi, ni au c++.

par contre, si je rentre la fonction :
charge_posée = ((max * 2) + autre1 + autre2 +autre 3.) / 2
charge_posée = Round(charge_posée), j'obtiens 12 (en fait, je crois que \ = round, faudra que je revérifie)

Idem si j'utilise la fonction Fix(charge_posée)

La fonction Trunc n'existe pas en VB, je regarde si un équivalent existe...
Citation :
Provient du message de Khaerdaeliss

Je suis désolé, je ne comprends rien au javascript, ni au delphi, ni au c++.

par contre, si je rentre la fonction :
charge_posée = ((max * 2) + autre1 + autre2 +autre 3.) / 2
charge_posée = Round(charge_posée), j'obtiens 12 (en fait, je crois que \ = round, faudra que je revérifie)

Idem si j'utilise la fonction Fix(charge_posée)

La fonction Trunc n'existe pas en VB, je regarde si un équivalent existe...
erf. bon moi je ne connais pas les fonctions VB mais il faut que tu cherches dans les fonction mathematique, une fonction qui ne prend que la partie entiere (ou qui arrondi vers le bas)

voila different mot clef que je connais pour different langage qui fond ca :

floor (arrondi vers -infini)
trunc (arrondi vers 0)
int (ne marche que pour les entiers non signé ce qui est ton cas)

je pense que round en visualbasic doit avoir la meme fonction qu'en delphi ou d'autre langages c'est a dire arrondi a l'entier le plus proche (round(12.1)=12 et round(12.8)=13)
tu devrais trouver, c'est impensable que la fonction n'existe pas
C'est trés simple : un focus ne vaut pas 0.5, il vaut 1.
Donc avec 1 focus tu as 1 points de charge, avec 2 focus (2*1+1)/2 soit 1.5 points de charge que le programme arrondi vers le bas (le total est TOUJOURS arrondi vers le bas) et avec 3 focus (2*1+1+1)/2 soit 2 points de charge.

Sur un objet ... imaginons +20 PdV +7 constit +7 force +2 parade (c'est un exemple) on obtient :
(5*2 + 5 + 5 + 5)/2 = 12.5 arrondi vers le bas : 12.
Il ne faut pas oublier non plus que le premier point de compétence et le premier point de résist est gratuit.

Vala. J'espére que ca peut aider ...
tiens en farfouillant sur google j'ai trouvé ca qui devrait t'eclairer sur les arrondis en VB:

http://groups.yahoo.com/group/visual...e/message/5767

apparement int(x) existe en VB mais attention ca ne marche que pour les entiers non signé (>0) mais on s'en fout puis que tu ne vas pas dans les nombre negatif dans ton cas.

(je ne me ferai jamais au VB avec ses variables non typées...)
Citation :
Provient du message de Caelia
C'est trés simple : un focus ne vaut pas 0.5, il vaut 1.
Ce qui est bizarre, c'est que j'ai sous les yeux un tableau (trouvé sur un post de JoL, avec des cases bleus/jaunes/vertes si ça vous parle. Impossible de le retrouver... la fonction recherche n'est décidément pas mon amie, ou alors trop occupée pour prendre le temps de répondre à mes requêtes).
Dans ce tableau, il est marqué que tous les focus ont 0,5 pts de charge, mais je me pose une question. Peut être que la division par 2 dans le calcul est déjà effectuée.
Quelqu'un peut me confirmer que
les caractéristiques, c'est bien : 1,3,5,7,9,11,13,15,17,19
les compétences : 0,5 , 5,10,15,20,25,30,35,40,45
=> si c'est 2 là sont bons, le reste devrait suivre ^^ (sauf les focus ).

Bon, sinon, à partir de ce que vous m'avez indiqué, je vais essayer de mettre une beta en ligne.
J'ai ma réponse.. Dans la table que j'avais, toutes les gemmes à 1 pt de charge était divisé par 2 (sauf caractéristiques et HP), sans doute pour simuler le fait que la 1ère était gratuite dans son mode de calcul ... C'est corrigé )

J'avance Je mettrai une 1ère version en ligne demain après midi, j'espère que vous m'aiderez à débugguer tout ça ^^
Code:
if ((itemStrength4 >= itemStrength2) && (itemStrength4 >= itemStrength3) && (itemStrength4 >= itemStrength1)) { itemStrength4 = itemStrength4 * 2; }
if ((itemStrength3 >= itemStrength2) && (itemStrength3 >= itemStrength1) && (itemStrength3 >= itemStrength4)) { itemStrength3 = itemStrength3 * 2; }
if ((itemStrength2 >= itemStrength1) && (itemStrength2 >= itemStrength3) && (itemStrength2 >= itemStrength4)) { itemStrength2 = itemStrength2 * 2; }
if ((itemStrength1 >= itemStrength2) && (itemStrength1 >= itemStrength3) && (itemStrength1 >= itemStrength4)) { itemStrength1 = itemStrength1 * 2; }
Moi j'aurais indicé mes itemStrengh et j'aurais fais une boucle, mais bon, pour si peu c'est pas des plus indispensable.
Citation :
Provient du message de Roen


Moi j'aurais indicé mes itemStrengh et j'aurais fais une boucle, mais bon, pour si peu c'est pas des plus indispensable.
mouarf, envoi ta note a Mythic vu que c'est le code source de leur spellcalc
le fait est que vu la structure de leur page (les variables sont aussi les noms de champ), c'est plus simple comme ca...
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés