JeuWeb - Crée ton jeu par navigateur
les jeux : les ressources et leurs utilisations - 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 : les jeux : les ressources et leurs utilisations (/showthread.php?tid=5972)

Pages : 1 2


les jeux : les ressources et leurs utilisations - keke - 10-02-2012

Bonjour,

Je suis en train de réfléchir à une méthode pour exploiter les ressources peu/pas/mal utilisées dans mon jeu.

Quand je parles de ressource, je veux dire, les images, les sons, les tables de référence etc.

Il y'a actuellement 138 éléments sonores dans mon jeu (majoritairement des dons fait par les joueurs). Hors, suite à un développement, j'ai réalisé que seul 20 de ces sons étaient réellement utilisé. Les autres sont donc des ressources inutilisées.
De manière globale (et je pense pas être le seul), beaucoup d'éléments sont ainsi là, à attendre d'être utile ... oublié, pas totalement prêt, ou pas assez utilisé.

Je me demandais s'il ne serait donc pas possible de tracer les éléments qui sont utilisés, de comparer à la liste des éléments disponibles et donc, d'afficher à mes administrateurs ébaillis, la liste des éléments potentiellement utilisable. Cela pourrait ainsi enrichir le jeu à très peu de frais.

Le problème auquel je fais face est assez globale et est inégalement réparti :
- Mes monstres sont classés par espèce. Certaines espèces n'apparaissent jamais dans le jeu.
- Des objets existent en base de donnée, mais d'aucune manière ils n'arrivent dans le jeu. Pas de drop, pas de création, ...
- Mes objets peuvent être utilisé, mais certains usage ne sont associés à aucun objet.

Pour chaque problème identifié, je pourrais faire un dev spécifique qui me donnerait un indicateur. Cet indicateur pourrait ensuite être décliné pour obtenir une valeur instantané (exemple : il y a 5 troll, 8 orc, 0 nains, 0 trolls, 12 gobelins), une valeur hebdomadaire, une valeur mensuelle ...
Cependant, j'aimerais trouver une méthode plus globale, car sans trop de peine je verrais bien au moins une 40 aine d'indicateurs très utile, et au moins autant de moins nécessaire.

Je viens donc vous soliciter pour savoir :
1°/ si vous avez été confronté à ce type de problème
2°/ Quelle solution vous avez retenue
3°/ vos idées, bonne ou mauvaise. Chemin à ne pas suivre, etc.
4°/ Vos remarques.

A noter que je n'administre pas mon jeu. Je ne suis donc pas trop au courant des manques ou des réflexions des joueurs. Je suis donc contraint de trouver ces manques, par le calcul statistique, ou à questionner régulièrement les admins ...

kéké


RE: les jeux : les ressources et leurs utilisations - niahoo - 10-02-2012

au boulot j'ai fait un peu à l'arrache un système de compteurs

tout ce qu'on comptabilise l'est sous forme de compteur. pour chaque période minimale (pour nous, granularité de 24 heures) on crée un compteur que l'on incrémente tout simplement.

chaque compteur/période a un id, un type d'objet et un identifiant d'objet
genre

Code :
1 | 2012-02-10 | personnage | 23 | 128
2 | 2012-02-10 | troll      | 12 | 452
3 | 2012-02-11 | personnage | 23 | 124

donc simplement notre personnage 23 est apparu 128 fois ajourd'hui et 124 fois demain (oui, mon appli prédit l'avenir, je ne l'avais pas précisé ?)

(bien sur tu peux optimiser en remplaçant le type d'objet par un ID de type d'objet)

ce système tout con et simple a implémenter te permet de regrouper en une seule table tous les objets que tu veux compter. Si ton ORM est sympa tu pourras facilement le faire sans avoir 1 table par type d'objet qui se rajoute. Si tu n'as pas d'ORM et/ou que chaque type d'objet est stocké de manière différente, tu vas passer longtemps à faire l'interface d'admin/consultation en pestant contre les gens qui ont implémenté toute ton appli. (mais comme dans ton cas ce sera toi tu ne pourras même pas t'insulter lâchement). Mais l'incrémentation des compteurs restera facile puisque un simple appel suffira.

genre un monstre est spawné sur une carte. tu rajoutes cette ligne dans le code :

compteurs::incr(mob, $mob->id());

Le plus chiant ce sera pour les images et les sons, il te faudra gérer non pas lors de l'appel par le navigateur (quoique il y ait moyen à apache de lancer un event lors de ces requêtes) mais dans la génération de ton HTML/javascript. Si tu n'as pas de table pour les images et les sons, il te faudra en faire une je pense.


RE: les jeux : les ressources et leurs utilisations - Argorate - 11-02-2012

De ce que j'ai compris, la première chose dont tu as besoin c'est de faire des stat pour déterminer qu'es ce qui est utilisé ou non...

Là pas de secret, faut faire un code/script automatisé et un table de stat dans un premier temps, et puis au bout d'un moment, faire le programme qui affichera les stat et qui te permettra ensuite de mettre en évidence des choses qui faut changer.

Ça te parait envisageable ou mon idée est stupidus? Smile

sinon à la différence de niahoo, pour se qui est des sons ou images, j'aurais justement fait un code js qui fait une requête ajax pour mettre a jour les stat a chaque appel d'event JS en charge du son par exemple. Quand au image, un petit script jquery pour récupe les src pourrait te dire quel image sont utilisé où et combien de fois...

Mais dans tous les cas, le pb de faire des stat c'est que ça fait travailler le serveur "inutilement".


RE: les jeux : les ressources et leurs utilisations - php_addict - 11-02-2012

(11-02-2012, 06:27 AM)Argorate a écrit : Mais dans tous les cas, le pb de faire des stat c'est que ça fait travailler le serveur "inutilement".

en même temps si il n'a pas 20.000 visites par jour ca va le faire...

+1 pour ajax, tu scannes tes pages avec un regex pour trouver fichiers images, sons, etc, et crac tu balance les résultats au serveur via ajax.

y a pas un autre moyen avec les header des requete HTML? http://www.php.net/manual/fr/function.headers-list.php


RE: les jeux : les ressources et leurs utilisations - Myrina - 11-02-2012

Le cache des navigateurs pour les images et autres ne risque t'il pas d'altérer ces stats si c'est le client qui les détermine?

Sinon, une petite idée coté serveur: Je suppose que tu utilises un système de templates, alors pourquoi ne pas joindre à chacun de tes templates un fichier contenant les ressources utilisées par le template (ou une partie "système" du template) qui serait prise en compte à chaque rendu du template pour mettre à jour les stats. Ceci demande une initialisation plus longue mais ne devrait pas trop rallonger le temps de traitement à chaque exécution


RE: les jeux : les ressources et leurs utilisations - niahoo - 11-02-2012

(11-02-2012, 09:27 AM)php_addict a écrit :
(11-02-2012, 06:27 AM)Argorate a écrit : Mais dans tous les cas, le pb de faire des stat c'est que ça fait travailler le serveur "inutilement".

en même temps si il n'a pas 20.000 visites par jour ca va le faire...

+1 pour ajax, tu scannes tes pages avec un regex pour trouver fichiers images, sons, etc, et crac tu balance les résultats au serveur via ajax.

y a pas un autre moyen avec les header des requete HTML? http://www.php.net/manual/fr/function.headers-list.php

ou alors tu le fais sur un autre serveur, après si tu bosses avec PHP ça devient de suite plus chiant puisque si tu envoies des paquets TCP ou fais une requête curl tu dois le faire de façon synchronisée dans la requête. Encore un défaut de cet environnement aujourd'hui.

L'idée de faire côté client est pas mal. car même si le navigateur ne recharge pas des ressources, elles sont bien indiquées dans le source de la page ou dans les retours ajax, donc on peut les comptabiliser comme ça.

sinon pour travailler avec les headers, avec un serveur comme Yaws ça prend 5 minutes. Avec apache, il va falloir lui indiquer un script à lancer dès qu'il reçoit une requête vers un .jpg|png|etc. ou mp3|ogg . Je ne sais pas si c'est possible, à mon avis oui. Il faut vérifier que le navigateur envoie bien les requêtes et que le serveur réponde bien OK ou NOT MODIFIED


RE: les jeux : les ressources et leurs utilisations - Holy - 11-02-2012

Sinon y a la méthode complètement bourrin mais qui marche à tous les coups pour le son et l'image, tu fais passer toutes tes images et tous tes sons par un script php via l'url rewriting d'apache. Suffit de faire un petit script de générateur d'en-tête et d'injecter la ressource (image ou son) dans ton script et c'est parti.

Ca doit pas être trop compliqué à faire, par contre, tu rajoutes une couche systématiquement sur toutes tes ressources et faut voir aussi comment gérer le cache après ça. A l'époque où je gérais encore mes fichiers CSS dynamiquement en brut, j'avais un système de ce genre là et je pouvais compter facilement les appels à mes fichiers CSS.

Je troll un peu sur la forme, mais je pense que ça peut le faire. Et ça me semble plus intéressant que de bidouiller ça via une regex côté client (dans le genre plombage de performance >_<).


RE: les jeux : les ressources et leurs utilisations - keke - 13-02-2012

Hum ... j'ai bien lu toutes les réponses.
-> magdales n'utilise pas de template (le code date de 2002-2003)
-> Pour les images, j'utilise normalement une fonction PHP à l'affichage. Je vais donc modifier cette fonction pour qu'à chaque appel, ça fasse +1 dans une table.

Argorate > tu as tout bon dans ton analyse.

niahoo > J'utilise un principe similaire pour les distinctions, je vais m'en inspirer. Par contre, j'ai un peu peur de la volumétrie de ma BDD en dur.

De plus certaines données devront être appellées régulièrement. Par exemple : le nombre d'espèces présent dans le jeu vs le nombre d'espèces existant en BDD. Ces nombres sont ponctuels (une fois par jour), mais ils ne sont jusqu'à présent jamais calculés. Ce n'est pas lorsque je créé un monstre que je les appelle. Bref, nouvelle fonction automatique à créer. Et j'ai peur qu'il me faille le faire pour tout un tas de chiffre.

Bilan, je pense qu'il faille que je procède de la manière suivante :
1°/ donnée brute. Une table qui contient des informations comme +1 sur la création d'un monstre, +1 sur le log d'un joueur, +1 sur l'utilisation d'un son, +1 quand on fait un don
2°/ donnée organisée. Une table qui contient des informations déclenchées : nombre d'espèce dans le jeu, nombre d'espèce en base de donnée, nombre de donjon ouvert, nombre d'images, nombre de phrases traduites en anglais.
Dans cette table, je piocherais aussi des informations directement dans la table de donnée brute : nombre de monstre créé sur une journée, nombre de connexion du joueur sur une journée
3°/ Une table d'indicateur : liste des indicateurs avec la fréquence, une description, une formule, etc.

Ca fait un peu usine à gaz ... mais ainsi, je ne pense pas pouvoir oublier certains indicateurs.
Il me faudra aussi faire un système pour manipuler les datas brutes. En effet, quand on met en place un indicateur, on a parfois besoin de repalcer de manière antérieur certaines données. C'est plus facile pour valider que l'indicateur est correctement mis en place.

Le rendu final aussi me gène un peu ... Vous affichez des graphes ? des indicateurs ?

bref ... beaucoup de boulot. Je me centrerais sur les indicateurs les plus utiles au début.

kéké


RE: les jeux : les ressources et leurs utilisations - Argorate - 13-02-2012

Sinon je viens de penser à une astuce, moins lourde à mon sens:

Faire un script qui définit et garde en bdd quel image/son est présent sur chaque page du site (tu ne le lance qu'une fois), et après, tu dois déjà avoir des stat du genre combien de fois sont afficher tel ou tel page non?

Dans ce cas c'est plutôt simple, si tu as une table qui te dit (issu du script dont je parle):

"page jeu.php => 1 icone de point de vie, 1 icone d'action... etc" alors il te suffit de faire le produit : nb de fois où la page est afficher fois le nombre de chaque ressources utilisé sur cette même page.

Du coup, tu n'as plus a faire de requête ajax ou quoi pour faire les stat, tu utilises le fait de savoir qu'es ce qui est sur ta page, multiplié par le nombre de fois où celle-ci est appelé!

Bien sur, des que tu modifierais le contenu/ressources d'une page, il te faudrait relancer ton script (dont je parlais au début) qui définit quel page contient tel ressource, pour mettre a jour, mais une fois le script fait, ça cout plus rien de le relancer pour synchroniser.

Cette méthode est moins "usine a gaz" puisqu'en théorie tu as déjà des stats sur le nb d'affichage de tes pages, donc ça ne te coute rien si ce n'est d'implémenter et lancer le script qui comptabilise les ressources de chaque page.
D'un autre coté, avec jquery c'est très rapide : $('img') et hop tu as toutes tes images, après pour l'audio si tu es en html5 tu a la balise <audio> donc pareil, c'est très vite récupéré!

En espérant avoir été utile Wink


RE: les jeux : les ressources et leurs utilisations - Ter Rowan - 13-02-2012

je pense qu'il est inutile de commencer à développer un système pour des graphes reports et autre, le travail doit porter sur la collecte des données brutes. Il suffit après d'utiliser excel ou open office ou autre pour produire tes rapports.

Y a pas d'utilité à avoir un suivi long du sujet, 5 ou 6 analyses devraient suffire, inutile de perdre du temps à développer pour si peu