JeuWeb - Crée ton jeu par navigateur
Ressources (qu'en pensez-vous)? - 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 : Ressources (qu'en pensez-vous)? (/showthread.php?tid=4434)

Pages : 1 2 3


Ressources (qu'en pensez-vous)? - php_addict - 11-11-2009

bonsoir

je me permets de solliciter votre avis sur un petit , mais alors tout petit problème:

Pour mon futur mmorpg, les joueurs ont des ressources (genre fer, blé, etc...)

voici ce que je comptais faire:

Gestion dans la base de donnée:

pour faire court et succin:

- un champ "nb_de_ressource_en_blé"
- un champ "production_par_heure_en_blé"
- un champ "timestamp", le time () de la dernière actualisation du champs "nb_de_ressource_en_blé"

Pour l'affichage et la mise à jour des ressources:

mise à jour des ressources:

- la mise à jour du champs "nb_de_ressource_en_blé" (UPDATE) ne se fait qu'en temps utile (action, dépense de ressources, gains de ressources etc...)

Affichage des ressources:

au lieu de mettre à jour le champs "nb_de_ressource_en_blé" à chaque affichage de page, je pensais à faire ceci:

mettre en variable de session les données du type "nb_de_ressource_en_blé" , "production_par_heure_en_blé" et "timestamp", et à chaque changement de page, calculer les ressources à afficher mais SANS les mettre à jour (UPDATE) dans la base de donnée.

AINSI:

- les données de ressources qui sont affichées ne sont pas celle inscrites dans la base de donnée

-les données ressources sont mises à jour (UPDATE) dans la base de donnée que quand il y a une action (action, dépense de ressources, gains de ressources etc...)

L'avantage étant de ne pas faire sans cesse des UPDATE à chaque fois que le joueur change de page...

que pensez-vous de ce système?
y a t il des inconvénients? des trucs auxquels je n'ai pas songé?


merci de m'avoir lu Wink

bonne fin de soirée (et content que le forum soit denouveau en ligne...probleme d'hebergement? de registrar? attaque DOS? )


RE: Ressources (qu'en pensez-vous)? - christouphe - 12-11-2009

juste une question:

prenoons un exemple où le joueur ne dépense rien, ne fait pas d'action. Tu dis que l'UPDATE se fait sur un gain de ressource or pour moi,, lorsqu'il change de page et donc que le timestamp à augmenté il gagne des ressource, mais bref. Donc mon joueur ne viens que pour voir si tout va bien, pas d'attaques etc. il repart et là tu fais quoi ??

Note: je précise que le joueur est assez bête, il n'utilise pas le lien "déconnexion" si tant est que tu en ait un Wink


RE: Ressources (qu'en pensez-vous)? - php_addict - 12-11-2009

(12-11-2009, 09:01 AM)christouphe a écrit : juste une question:

prenoons un exemple où le joueur ne dépense rien, ne fait pas d'action. Tu dis que l'UPDATE se fait sur un gain de ressource or pour moi,, lorsqu'il change de page et donc que le timestamp à augmenté il gagne des ressource, mais bref. Donc mon joueur ne viens que pour voir si tout va bien, pas d'attaques etc. il repart et là tu fais quoi ??

a la connexion du joueur j'enregistre le nombre de ressource, la production par heure, et le time() de la derniere actualisation UPTDATE dans la base de donnée..

donc pour l'affichage ç chaque changement de page je calcule les ressources à afficher avec les variable de sessions mais ne met pas à jour

par contre J'UPDATE la base de donnée quand il y a une action (attaque d'un joueur, dépense, etc...)

donc le joueur vois afficher son nombre de ressource réel mais qui n'est pas forcement mise à jour dans la base de donnée...

ais je été plus clair?


RE: Ressources (qu'en pensez-vous)? - nicodd - 12-11-2009

C'est effectivement la solution la plus économe en ressource.
Maintenant, il faut que tu réfléchisse à la manière dont le joueur actif va être averti qu'il est attaqué.
En effet, après l'attaque, ses ressources doivent varier, hors même si l'attaquant à mis à jour la table, le joueur actif ne verra pas la différence tant qu'il ne fait pas d'action modifiant les ressources.

Sinon, tu n'as qu'une seule ressource dans ton jeu ?


RE: Ressources (qu'en pensez-vous)? - Ter Rowan - 12-11-2009

vire le _en_ble et rajoute un champ "type de ressource" ou tu pourras mettre comme valeur "blé" mais aussi "pierre" "feuille" "ciseaux" etc Smile


RE: Ressources (qu'en pensez-vous)? - php_addict - 13-11-2009

(12-11-2009, 03:56 PM)nicodd a écrit : En effet, après l'attaque, ses ressources doivent varier, hors même si l'attaquant à mis à jour la table, le joueur actif ne verra pas la différence tant qu'il ne fait pas d'action modifiant les ressources.

pour les attaques, je ne vois que les taches cron ou at.exe ...

(12-11-2009, 03:56 PM)nicodd a écrit : Sinon, tu n'as qu'une seule ressource dans ton jeu ?

non, 4 maxi pour le moment...

(12-11-2009, 07:32 PM)Ter Rowan a écrit : vire le _en_ble et rajoute un champ "type de ressource" ou tu pourras mettre comme valeur "blé" mais aussi "pierre" "feuille" "ciseaux" etc Smile

ca ca m'intrigue...mais je ne suis pas certain de comprendre...


merci pour vos reponses


RE: Ressources (qu'en pensez-vous)? - Zamentur - 13-11-2009

Citation :que pensez-vous de ce système?
y a t il des inconvénients? des trucs auxquels je n'ai pas songé?

Citation :au lieu de mettre à jour le champs "nb_de_ressource_en_blé" à chaque affichage de page, je pensais à faire ceci:

mettre en variable de session les données du type "nb_de_ressource_en_blé" , "production_par_heure_en_blé" et "timestamp", et à chaque changement de page, calculer les ressources à afficher mais SANS les mettre à jour (UPDATE) dans la base de donnée.
En théorie c'est pas idiot, simplement çà va etre complexe de gérer tes variables session.
Ceci dit, tu n'as pas besoin de mettre à jour nb_de_ressource à chaque affichage

Je m'explique à chaque chargement de page tu va etre obligé de verifier si il y a pas eu un changement (attaque etc...) donc de faire un select vérifiant le timestamp.
Pourquoi dans ce cas ne pas faire simplement:
Code PHP :
<?php 
SELECT nb_ressource
*production_par_heure/3600*(UNIX_TIMESTAMP()-timestamp) where type='%s' AND id=%d
(ou %s le type de ressource et%d l'id du perso)
?

Tu fait toujours une seul requête, et çà t'évite d'avoir à gérer çà dans tes sessions. Autrement dit c'est aussi performant (voir plus car moins complexe donc moins de problème de maintenance) et en plus çà te prend moins de à faire...

Si j'ai pas été clair, ne pas hésiter à faire signe.

Sinon je t'encourage a te renseigner sur les vue en SQL (VIEW), dans ce cas ci c'est très utile en prenant en compte la requête du haut comme base de la vue. Celle ci devrait ressembler à çà:
Citation :CREATE VIEW ressources_calculees AS SELECT nb_ressource*production_par_heure/3600*(UNIX_TIMESTAMP()-timestamp) AS nb_ressource_a_jour,id,type,[...] FROM t_ressources;

Du coup dans ton code tu n'aurais plus qu'à faire:
Code PHP :
<?php 
SELECT nb_ressource_a_jour where type
='%s' AND id=%d
Ce qui présente un avantage en termes d'évolutivité et de maintenance.


Enfin je plussoie Ter Rowan concernant la remarque sur les types. La clé sur l'id par contre ne pourra être unique(puisque plusieurs champs)


RE: Ressources (qu'en pensez-vous)? - php_addict - 13-11-2009

merci pour vos reponses


RE: Ressources (qu'en pensez-vous)? - Anthor - 13-11-2009

(13-11-2009, 02:37 AM)Zamentur a écrit : Tu fait toujours une seul requête, et çà t'évite d'avoir à gérer çà dans tes sessions. Autrement dit c'est aussi performant (voir plus car moins complexe donc moins de problème de maintenance) et en plus çà te prend moins de à faire...

Alors là faudra m'expliquer en quoi une requête SQL est aussi rapide que d'accéder à un fichier de session !


RE: Ressources (qu'en pensez-vous)? - nicodd - 13-11-2009

En fait, tu peux avoir un système en parallèle, que j'appellerais "d'événements".
Un événement peut être une attaque, la fin d'une transaction commerciale, la vente d'un objet, que sais-je.
Tu fais une vérification légère dans ta table d'évènements pour voir si il y en a de nouveaux, et selon le type, tu mets à jour tes ressources.
De toute façon, tu dois faire une notification au joueur de ce qui peut affecter sa production, donc autant faire d'une pierre deux coups.
Selon le rapport facilité à coder/perfs que tu veux, tu peux gérer plus ou moins finement le système.