JeuWeb - Crée ton jeu par navigateur
[réglé] Exécuter un calcul contenu dans une chaîne (eval ?) - 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 : [réglé] Exécuter un calcul contenu dans une chaîne (eval ?) (/showthread.php?tid=1597)

Pages : 1 2 3


[réglé] Exécuter un calcul contenu dans une chaîne (eval ?) - nemesis_elite - 16-08-2007

Bonjour bonjour,

A partir de l'administration du jeu, l'admin pourra changer les formules de l'attribution des Point de Vie en fonction des caractéristiques du personnage.

Exemple de formule pour les PdV ( je dis nimp ) :
50+(force+constitution-100)

Cette formule, est donc une chaine de caractère.
Dans le script, je fait juste un petit:
Code PHP :
<?php 
$sFormule
= str_replace('force', '$iForce', $sFormule);

Mais après je ne sais pas comment faire pour l'executer, le code :
Code PHP :
<?php
$iForce
= 6;
$iConstitution = 5;

$sFormule = 'pdv = 50+(force+constitution-100)';

$sFormule = str_replace('force', '$iForce', $sFormule);
$sFormule = str_replace('constitution', '$iConstitution', $sFormule);
$sFormule = str_replace('pdv', '$iPdV', $sFormule);


?>

Merci d'avance pour l'aide Smile


RE: Exécuter une chaîne (eval ?) - joshua - 16-08-2007

un conseil, explique plutot ce que tu veux faire.... Je trouve que ca n'a aps vraiment de sens ecrit comme ca....
En gros tu veux pouvoir enregistrer en base directement les carac des joueurs calculées d'apres uen formule qui peut vairier pendant le temps.
Qu'est ce qui peut varier? et comment?


RE: Exécuter une chaîne (eval ?) - uriak - 16-08-2007

non, il veut que la base enregistre même la formule de calcul des pv
donc la BDD aura :
les caracs
la formule les utilisant

tu as deux solutions pas trop complexes :
soit tu généralises tes formules à une formule unique avec des coeddificients variables
tu enregistre alors ces coefficients puis tu appliques la formule avec les caracs actuelles

soit tu écris quelques types de formule (3-4) en leur donnant un nom particulier
HP_comp_1, HP_comp_2 ect dans les stats du persos tu stockes l'identifiant de formule
et tu fais
$form = 'HP_comp_'.$id_form;
et $HP = $form(); avec eventuellement un function_exists() histoire de.

soit... (oui trois solutions) tu écris une classe de "parsing" de formule litterale... bonne chance Wink


RE: Exécuter une chaîne (eval ?) - nemesis_elite - 16-08-2007

joshua a écrit :explique plutot ce que tu veux faire....
NemeSiS_eliTe a écrit :A partir de l'administration du jeu, l'admin pourra changer les formules de l'attribution des Point de Vie en fonction des caractéristiques du personnage.
Donc imaginons que la formule suivante ( qui est stocké dans une bdd ) permette de calculer les Points de Vie d'un personnage :
50+(force+constitution-20)

A chaque fois que les caractéristiques change, on va utiliser cette formule, pour recalculer les PdV max du perso.

Donc dans le code (avec un perso qui aura force=15 et constitution=12 )on aura ça :
Code PHP :
<?php 
// Requête qui va chercher la formule pour calculer les PdV
$sFormule = '50+(force+constitution-20)';
// On change les noms des caractéristique par leur valeur
$sFormule = str_replace('force', 15, $sFormule);
$sFormule = str_replace('constitution', 12, $sFormule);
// On aura donc
$sFormule = '50+(15+12-20)';

$Pdv = $sFormule;
Ici :
$Pdv = '50+(15+12-20)';
et non pas
$Pdv = 57;

Je cherche à exécuter le calcul qui est sous forme de chaine de caractère.


RE: Exécuter une chaîne (eval ?) - joshua - 16-08-2007

tu fais dans ta formule $force et $constitution et ensuite tu va chercher les valeurs, ca te va pas?


RE: Exécuter une chaîne (eval ?) - nemesis_elite - 16-08-2007

Yenhhhh le double-post !!! Pas bien ^^
Sinon, oui je pourrais mettre les variables, mais je ne voulais pas trop mettre de php dans ma bdd.
Et puis je pensait que c'était faisable comme ça, avec un eval, ou je ne sais trop quoi.
Et puis non, pour le faire en sql. Elle va déjà être très utilisé, alors bon !!

Mais merci quand même, mais si quelqu'un troue un autre moyen, n'hésitez pas Smile

NemeSiS_eliTe, qui va pas encore mettre le tag [réglé] car on peu faire mieux ^^


RE: Exécuter une chaîne (eval ?) - joshua - 16-08-2007

Honnetement tu te compliques la vie pour rien.....


Code PHP :
<?php 
// On change les noms des caractéristique par leur valeur
$force=15;
$constitution=12;

// Requête qui va chercher la formule pour calculer les PdV
$sFormule = ... SELECT .... dont le retour est : 50+($force+$constitution-20);




// On aura donc
$sFormule = 57;

$Pdv = $sFormule;


ca marche ters bien et ca met pas de php en base, juste un $ en plus. En plus c'est beaucoup moins gourmand...


RE: Exécuter une chaîne (eval ?) - nemesis_elite - 16-08-2007

jushua a écrit :ca marche ters bien
Et bien non, ça ne marche pas, quand je récupère la formule, et que je fait echo, ca m'écrit la formule, et non le résultat !


RE: Exécuter une chaîne (eval ?) - Loetheri - 16-08-2007

Pourquoi n'utilises-tu pas eval ? Bien entendu, c'est le genre de solutions qu'il faut sécuriser assez bien. Mais c'est vrai que j'avoue avoir du mal à comprendre pourquoi tu cherches à coder ce résultat pour le mettre dans ta BD et non directement dans ton code.


RE: Exécuter une chaîne (eval ?) - nemesis_elite - 16-08-2007

Peut-tu me dire comment tu fait avec eval ? moi j'y arrive pas.

Je veux le mettre dans ma bdd, pour mieux pouvoir changer la formule ! Et ainsi ne pas être obliger de toucher au code à chaque fois.