JeuWeb - Crée ton jeu par navigateur
Temporiser des actions - 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 : Temporiser des actions (/showthread.php?tid=3020)



Temporiser des actions - Thedeejay - 06-09-2008

Salut!
je suis en train de creer un jeu d'ellevage (il faut élever un smiley)
je souhaiterais attendre pour qu'il est faim (ex 1 fois tous les 2 jours) je ne peut pas faire avec des cookies (enfin si mais c'est relou si il change d'ordi...)
comment faire pour 'attendre' en php? j'ai mysql a disposition...
Merci


RE: 'temporiser' des actions - Kassak - 06-09-2008

Un simple champ en BDD suffit, quand tu nourris son smiley, tu enregistres le timestamp en BDD, et donc ensuite tu el compares au timestamp actuel pour savoir s'il faut encore le nourrir Wink


RE: 'temporiser' des actions - Sephi-Chan - 06-09-2008

Bonjour,

Une solution simple consiste à utiliser un champ prochain_repas (de type DATETIME) dans la table qui contient tes smileys.
Il faut également que tes nourritures aient un attribut qui indique combien d'heure la nourriture fait effet (un champ duree, par exemple).

Ainsi, quand un joueur nourrit son smiley, tu peux mettre à jour le champ prochain_repas du smiley en lui indiquant l'heure actuelle plus N heures, N étant la valeur du champ duree de la nourriture donnée. Comme cela :
Code :
UPDATE smileys
SET prochain_repas = DATE_ADD(CURRENT_TIMESTAMP(), INTERVAL (SELECT duree FROM nourritures WHERE id = %d) HOUR)
WHERE id = %d;
Le premier %d est l'identifiant de la nourriture donnée.
Le second %d est l'identifiant du smiley nourri.

Ensuite, sur ta page, tu peux indiquer si le smiley a faim ou non. Voici la requête qui indique les informations sur le smiley.
Code :
SELECT *, IF( CURRENT_TIMESTAMP( ) < prochain_repas, 1, 0 ) AS deja_nourri
FROM smileys
WHERE id = %d;
Tu peux utiliser les champs comme tu le fais sans doute déjà, mais tu as également un champ deja_nourri qui contient 1 si le smiley est nourri, 0 s'il a faim. Ce champ est temporaire crée lors de la sélection, ce n'est pas un vrai champ de ta table.

Le %d est cette fois à remplacer par l'identifiant du monstre dont tu veux les informations.


Sephi-Chan


RE: Temporiser des actions - Thedeejay - 06-09-2008

merci!


RE: 'temporiser' des actions - Cartman34 - 08-09-2008

Sephi-Chan a écrit :Bonjour,

Une solution simple consiste à utiliser un champ prochain_repas (de type DATETIME) dans la table qui contient tes smileys.
Il faut également que tes nourritures aient un attribut qui indique combien d'heure la nourriture fait effet (un champ duree, par exemple).
[...]
Il est davantage conseillé (au moins pas moi même) d'enregistrer la date du dernier repas comme l'a proposé Kassak plutot que celle du prochain comme l'a proposé Sephi-Chan.


RE: Temporiser des actions - Sephi-Chan - 08-09-2008

Il faudrait expliquer pourquoi, sans cela c'est inutile. Je ne me vexerai pas si tu proposes une alternative. Smile


Sephi-Chan


RE: Temporiser des actions - Argorate - 08-09-2008

personnellement je garde egalement la date du dernier tour passer, apres cela revient sans doute au meme puisqu'il y a des calculs derriere...


RE: Temporiser des actions - Cartman34 - 09-09-2008

Sephi-Chan -> En effet, quelques explications sont toujours mieux et je suppose qu'un "J'ai vu ça dans les cours" ne te suffirait pas.
j'ai remarqué cela avec l'expérience, voici quelques raisons:
- Posséder la dernière activité: on peut connaître facilement et sans calcul quand le smiley a été nourri pour la dernière fois.
- Permettre des variantes dans la durée entre 2 "actualisations".
- Faciliter la gestion par les Administrateur du jeu.

En gros, en enregistrant la prochaine "actualisation", nous sommes restreint par son arrivée qui ne peut qu'être future.

Autrement, qu'on fasse le calcul avant ou après...ca ne change que le code.

En testant comme tu as dis (c'était il y a bien longtemps...), je me suis retrouvé avec des problèmes car je voulais indiquer quand avait eu lieu la dernière mise à jour mais le temps pouvait être variable, je ne savais plus comment retrouver c'était quoi sans faire un 2eme champs dans la bdd. Bref, ça devient vite un calvaire.

Pour conclure, il a toujours été recommandé d'enregistrer la dernière date et j'ai toujours vu ça dans les jeux (même les jeux très connus je veux dire...).


RE: Temporiser des actions - Sephi-Chan - 09-09-2008

Merci pour l'explication.

À vrai dire, mon choix d'indiquer la date du prochain repas était totalement arbitraire, c'était du pile ou face. Je voulais juste proposer une solution pour implémenter la temporisation. Wink


Sephi-Chan