JeuWeb - Crée ton jeu par navigateur
Problème de technologie... ou pas ? - 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 : Problème de technologie... ou pas ? (/showthread.php?tid=2680)

Pages : 1 2


Problème de technologie... ou pas ? - Awake - 14-06-2008

Hey !

Je vais tenter de vous expliquer le plus simplement mon problème.

1) Il y a un monstre (waw ...) avec des HP.
2) Il y a plusieurs humains pouvant combattre ce monstre.

J'ai créée une jauge de vie (représentant les HP du monstre), qui est influencé par un module d'attaque (prenant en compte divers paramètres).

Lorsque je clique sur 'Attaquer', la page est rechargée pour que la jauge puisse diminuer.

Le problème... c'est que lorsqu'un autre utilisateur (puisqu'ils seront plusieurs à attaquer) attaque le monstre... la jauge, celle que je vois n'est forcement pas mise à jour.

J'ai pensé à implémenter AJAX pour pouvoir rafraichir sans recharger la page.

Cependant je ne vois pas comment procéder, si c'est possible, pour que la jauge de chaque utilisateur se rafraichisse (requete sql) dès qu'une attaque est infligée de la part d'un utilisateur.

Dois-je effectuer un requête (celle qui influence la jauge de vie) toute les secondes ? (ça doit bouffer côté serveur nan ?!!)

Ou, utiliser une file d'attente, dans un fichier, comparer la dernière valeur (HP) avec celle de la BDD, et rafraichir seulement lorsque la valeur n'est pas égale... mais d'un côté, il faut aussi faire une requête niveau BDD...

Bref, je ne sait pas si c'est possible. Existe il ce genre de jeu en PHP ? a savoir, que plusieurs utilisateurs influencent sur une seule entité ?

Merci,


RE: Problème de technologie... ou pas ? - Sephi-Chan - 14-06-2008

Salut,

Tu ne peux effectivement pas demander au serveur d'envoyer des données aux clients grâce aux techniques communes.

L'alternative dont tu parles (Ajax) est une bonne solution. Tu peux par exemple faire un fichier texte (au format JSON est très pratique en vue d'être utilisé par Javascript) qui associe l'identifiant d'un monstre à son niveau de vie. Il te suffit de tenir à jour ce fichier à chaque fois qu'un monstre est attaqué. Ainsi, avec Ajax, tu peux facilement récupérer un objet JSON en récupérant le contenu de ce fichier (avec json_decode(file_get_contents($fichier))) et l'exploiter (un objet JSON est utilisable directement par Javascript).

Ainsi, tu n'édites la base de données (et le fichier) que lors des attaques. Cela te permet de rafraîchir via Ajax sans trop craindre au niveau des performances puisque ce n'est alors que la lecture dans un fichier.

Une alternative encore meilleure serait de stocker le couple identifiant du monstre / niveau de vie dans un tableau PHP commun à tout le serveur. Pour cela, je te redirige vers l'article [POO] Utiliser la ram pour stocker des données .


Sephi-Chan


RE: Problème de technologie... ou pas ? - Studio Gamboo - 14-06-2008

Sephi Chan à déjà très bien fait le tour de la question Smile
Je pense que le tableau php commun est la meilleur solution (une technique que j'utilise intensivement).
Tu peut utiliser APC pour faire la même chose si tu ne peut pas utiliser memcache.


RE: Problème de technologie... ou pas ? - Awake - 14-06-2008

Je vais regarder ce que ça donne.

Je vais me tourner premièrement sur la ram pour stocker les données (bien que j'ai vu qu'il faille installer un packet pour memcache, je développe sous windows), j'utiliserai APC, j'ai survolé la documentation.

J'aurai probablement d'autres questions par la suite.

Merci à vous deux,


RE: Problème de technologie... ou pas ? - Studio Gamboo - 14-06-2008

A ton service Smile
(memcache peut fonctionner sous windows avec un petit .exe qui simule le deamon, mais je pense qu'APC à de meilleurs argument à faire valoir)


RE: Problème de technologie... ou pas ? - Cartman34 - 16-06-2008

Tu peux aussi utiliser un démon mais il faut certaines connaissances en PHP et un serveur dédié alors bon je doute que ce soit d'actualité pour toi. Mais saches qu'avec cela, tu peux voir les modifications en directe dès qu'elles sont produites par le serveur car ils existent des connexions permanentes via les sockets qui te le permettent.
Ceci dit étant assez complexe à mettre en place, ce n'est qu'à titre informatif que je t'en parle.
Autrement tu es obligé de faire comme dit par Sephi, mais c'est un rafraichissement régulier et assez(meme beaucoup) contraignant pour le serveur.


RE: Problème de technologie... ou pas ? - Sephi-Chan - 16-06-2008

T'es fana de démons en ce moment IGStaff. :o

Concernant l'actualisation fréquente, étant de la lecture, je doute que ce soit si contraignant que tu le dis. C'est trois fois rien de lire dans un fichier toutes les 3 secondes, par exemple.


Sephi-Chan, à vos bench ! Prêts ? Partez ! :p


RE: Problème de technologie... ou pas ? - Eluox - 16-06-2008

IGstaff est en mode full démon en ce moment, et sur msn, c'est dur a vivre Big Grin


RE: Problème de technologie... ou pas ? - Cartman34 - 16-06-2008

A mon avis si, si tu fais le test, dis moi ^^.
Je suis à fond sur les démons car c'est très puissant, si vous voulez faire des jeux plus évolués, vous êtes obligé d'y passer.


RE: Problème de technologie... ou pas ? - Studio Gamboo - 16-06-2008

Bah écoute moi je serait très heureux que tu nous fasse un tuto complet la dessus, ça m'intéresse beaucoup Smile