JeuWeb - Crée ton jeu par navigateur
Choix du stockage des variables et du cache - 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 : Choix du stockage des variables et du cache (/showthread.php?tid=3560)

Pages : 1 2


RE: Choix du stockage des variables et du cache - Argorate - 17-03-2014

J'utilise pas de constante, puisqu'elle ne peuvent être modifié (par définition^^). Je veux pas me faire chier à changer toutes les données de mon jeu lors d'équilibrage à la main, j'applique plutôt une fonction qui modifie en multipliant par exemple tous les gain d'xp par 2, bref les constantes j'aime pas ça, c'est pas au programme de m'interdire quelque chose (mais là on tombe dans un autre débat, cependant faudrait que je test les perf d'une constante et d'une constante de class !). Je mettrais à jours tout à l'heure, ça m'intrigue maintenant que tu m'en parles, j'ai aucune idée de la rapidité des constantes Smile

Ce genre de donnée est donc dans un fichier de données à part. C'est le genre de donnée où si php était statefull, seraient tjs présente en mémoire et partagé par tous, sans jamais changer (sauf maj du jeu lui même).

EDIT: on peut meme pas mettre de tableau dans une constante, c'est vraiment pourri ^^

"Fatal error: Arrays are not allowed in class constants in /var/www/devotion/data_const.php on line 6"
C'est sans doute l'une des raisons qui font que j'en utilise pas^^



["globals_var"]=>
float(0.12711262702942)
["static_var_in_class"]=>
float(0.11734557151794)
["globals_const"]=>
float(0.11283874511719)
["static_const_in_class"]=>
float(0.11654305458069)

j'obtiens ça, mais pour faire la comparaison j'ai du juste mettre "42" dans les variable, car il y avait un tableau à la base, donc pour bien comparer j'ai fais le changement, ça semble donc un poil plus rapide, mais vu les contraintes que ça apporte...


RE: Choix du stockage des variables et du cache - niahoo - 17-03-2014

pas faux pour les array, mais ça revient au même. Tout ça n'a rien à voir avec un système de cache. Et quand tu dis ne pas vouloir te taper les changements d'XP à la main ... si tu dois par ailleurs dire que la fonction doit multiplier par 2 ben ... ça revient au même.


RE: Choix du stockage des variables et du cache - Argorate - 18-03-2014

ah non, dans un cas j'utilise une ligne avec une fonction sur les array(), et dans l'autre cas je dois éditer les centaines de lignes à la main Smile

Sinon pour le cache, ça a rapport dans le sens où le but c'était d'avoir des données qui reste en ram et qui sont disponible a chaque fois pour tout le monde, sans avoir a les recharger en ram, je pensais que APC ou memcache serait plus rapide pour cette raison, mais je me trompais, je fais donc profiter les résultats^^


RE: Choix du stockage des variables et du cache - niahoo - 18-03-2014

Oui ok tu peux avoir une fonction qui multiplie toutes tes différentes sources d'XP, c'est sûr. ceci dit si tu veux que buter un mob rapporte 2x plus d'XP que découvrir une zone tu devra quand même l'éditer à la main. Avec une base de données et un cache APC par dessus tu pourrais te faire une admin pour ça mais je crois qu'il n'y a rien de plus chiant que de coder des panneaux d'admin.

Sinon oui, merci pour le partage.

Moi j'ai pris l'habitude de générer du code, c'est le plus simple je trouve. Et l'avantage c'est que je peux utiliser un bête script PHP pour générer du code erlang, tout est permis Smile.

Je m'explique : pour savoir combien d'XP rapporte telle action il suffit de charger la classe concernée comme tu le fais. Mais cette classe, plutot que modifier tes "centaines de lignes" automatiquement grâce à une fonction, contiendra des constantes déjà modifiées, grâce au code suivant :

<?php



function wrap_class ($name,$code) {
return "class $name { $code }";
}

$base_consts = [
'xp_per_mob' => 42,
'xp_per_zone' => 10,
'xp_per_pkill' => 100
];

$xp_factor = function($x) { return $x*2 }; // ici par exemple on définit un ratio d'XP

$consts = array_map($xp_factor,$base_consts);
$code = [];
foreach($conts as $k => $v) {
$code[] = "const $k = $v;";
}

$class = wrap_class('XP_Sources',implode('',$code));
file_put_contents('XP_Sources.php',"<?php $class\n");

Bien sur ici je crée des constantes, mais tu peux très bien créer des fonctions de la même maniere. par exemple, on peut imaginer des fonctions qui prennent en entrée le lvl du joueur et renvoient l'XP gagnée déduite.

Du coup dans ton jeu tu peux utiliser Xp_Sources::xp_per_mob, c'est plus clean à lire que d'aller pécho des trucs dans un array.

Ensuite tu peux préferer avoir des array pour les fonctionnalités qu'ils permettent, mais tu peux également générer ces array grâce à la fonction var_export.


RE: Choix du stockage des variables et du cache - Argorate - 18-03-2014

Oui tu metaprog en écrivant un fichier php via un script php qui est le resultat de la transformation, j'ai juste pas la foi de le faire, mais c'est mieux oui.