TourDeJeu, le réseau des jeux en ligne alternatifs : jeux web multijoueurs, jeux par forum. En savoir +

Flux RSS des discussions du forum : pour les joueurs, et pour les créateurs et MJ
  Reply to this topicStart new topicStart Poll

> Gestion Des Tours (timestamp Ou Autre ?), Que choisir et comment bien débuter ?
Lunar
  Ecrit le : Lundi 20 Juillet 2009 à 04h07
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Bonjour à tous,

Je suis de retour sur un vieux projet, car j'ai maintenant du temps de libre devant moi...

Deux options s'offre à moi améliorer le jeu que nous utilisions en Excel (il est déjà rendu en Open Office pour la facilité de se le procurer)

OU

Ce qui m'intéresse plus le programmer en php, mais voilà comme c'est un jeu de gestion/stratégie il faut que les ressources (fer, bois, or, etc.) augmente à chaque tours/heures (là on a pas encore décidé ce que l'on va choisir).

Qu'importe le temps donné, je me demande si les timestamps sont ce qu'ils y a de plus performant pour le faire ? Et si oui, comment faire pour gérer tout ce beau bordel ? Vous avez une piste de solution à me proposer svp ?

Je suis bien conscient que programmer un jeu va me prendre des lunes, mais entre vous et moi si j'ai arrêté mon jeu au bout de 5 ans jadis c'est car la correction des rapports étaient rendu un vrai beau foutoir avec plus de 5 heures par tours (en une journée, max 2 et encore parfois je devais frôler le 10 heures !!!)

Donc je me dis quant à remettre un jeu sur les railles aussi bien prendre son temps et l'automatiser non ? Mais voilà je ne m'y connais pas énormément en php et je ne suis pas si sûr que cela que les timestamps soient la meilleur méthode... Existe-t-il quelque chose de plus puissant en php ? Si oui quoi donc svp ?

Merci d'avance pour toutes vos pistes de solutions


--------------------
Lunar
Administrateur du pbem L'univers du Flow
PMUsers Website
Top
Matrix
Ecrit le : Lundi 20 Juillet 2009 à 05h03
Quote Post


Pro
*

Groupe : Membre
Messages : 51


Le déclanchement de la gestion des tours est loin d'etre le plus compliqué a programmer.

Sur le principe c'est même plutot simple, il te suffit de mettre sur ta page de jeu un time() et de vérifier par comparaison avec un timestamp stocker en BDD combien de temps a passé entre le dernier tour et l'heure actuel.

Ensuite une fois la soustraction faite, il te reste plus qu'a définir se que tu veux faire:

Si x heures se sont écoulé, tu fais donc X fois l'algorithme de modification de valeurs de tes ressources...

sans oublier de mettre le timestanp a jour dans la BDD (arrondi a l'heure -puisque tu fonctionnes par heures...)


--------------------
PMEmail PosterUsers Website
Top
Guile
Ecrit le : Lundi 20 Juillet 2009 à 17h29
Quote Post


Pro
*

Groupe : Membre
Messages : 66


Le timestamp n'est pas forcément "puissant", il est surtout simple à utiliser.
Donc conseil : en base de données, stocke des timestamp, et en php utilise time()
En effet, l'utilisation des données mysql datetime, et en php toutes les fonctions de date, c'est comme dans tout langage, la merde. Même l'humain n'a pas réussi à faire quelque chose de bien.


--------------------
AvP Evolution : jeu de rôle au gameplay simple et à l'ambiance surchauffée!
Terres d'Alliances : la Campagne On-Line. Un jeu de stratégie médiéval... Mais qui n'a jamais été démarré
user posted image
PMEmail Poster
Top
Lunar
Ecrit le : Mardi 21 Juillet 2009 à 03h27
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Merci à vous deux, je vais donc tenter de créer quelque chose ou de trouver de quoi sur le net à droite ou à gauche qui puisse me pister sur ce qui serait le mieux pour moi... (Si je peux trouver un bout de code, pourquoi ne pas s'en inspirer après tout ?)

J'ai déjà tout le jeu de créer en Excel, mais j'ai comme l'impression que la conversion va être un méchant casse-tête sweatdrop.gif

C'est dingue comme le php peut être puissant mais compliqué en même temps... whistling.gif


--------------------
Lunar
Administrateur du pbem L'univers du Flow
PMUsers Website
Top
Matrix
Ecrit le : Mercredi 22 Juillet 2009 à 02h50
Quote Post


Pro
*

Groupe : Membre
Messages : 51


Sans vouloir te contre dire, moi je trouve que php est très simple et logique^^

Pour le code, c'est quasiement juste un if...

Désolé de ne pouvoir faire plus.


--------------------
PMEmail PosterUsers Website
Top
Lunar
Ecrit le : Mercredi 22 Juillet 2009 à 13h40
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Oui je sais php est très simple pour celui qui le connait, sans doutes autant pour vous, que pour moi en Excel, Html, Xhtml ou en Open Office laugh.gif

Pas de problème je vais essayer de m'y mettre dans le cambouis sinon on restera à notre petite version maison si je ne trouve pas de bon tuto pour tout comprendre...


--------------------
Lunar
Administrateur du pbem L'univers du Flow
PMUsers Website
Top
supermeganono
Ecrit le : Lundi 26 Octobre 2009 à 21h25
Quote Post


Kid
*

Groupe : Membre
Messages : 36


Bonjour,

J'ai créer un jeu php automatisé y'a une paire d'année et confronté au même problème pour attribuer les Points d'Actions, j'ai opté pour les mathématiques smile.gif

Je stockais l'heure précise de connexion du joueur à la seconde prêt grâce à la fonction time() qui permet de savoir combien de seconde se sont écoulé depuis le 01-01-1970.
Puis avec de simple calcul mathématique je calculais le nombre de PA à recevoir et je mettez à jours ma BDD.
C'est pas super dur non plus... le time() actuel - le time() enregistré = le nombre de seconde passé. Reste qu'à diviser par 3600 secondes pour l'avoir en heure et mettre à jours la BDD avec les PA en plus.

Évidemment faut pas oublier de calculer les secondes en surplus, histoire que le joueur qui se connecte à 59minutes 59 secondes d'un PA ne perde pas ce temps.
De plus étant donné que le jeu permettez d'augmenter via de l'expérience le gain de PA ( 1 minutes par point avec 30 max ), je faisais différents calcul selon les valeurs récupérer en BDD. Le calcul reste le même, faut juste jouer avec un variable qui sera compris en 30 et 60 pour mon cas.
J'utilisais juste donc :
floor()
fmod()
time()

et des calcul de base : additions, soustractions et divisions.


Dire que je me suis juste levé un matin en me disant que j'allais réaliser un site web. Puis finalement réaliser un jeu en php/mysql puisque je suis passionné de jeux en tout genre... Et tout cela sans rien y connaitre ! Aujourd'hui, j'ai le temps et je me remet sérieusement sur un gros projet. Et quand je vois certaines pages costaud, certains algorithmes créer thumbsup.gif c'est vraiment à la portée de tous

Lance toi, c'est vraiment pas mal, et à part la volonté t'as pas besoin de grand chose !


Si t'as besoin d'un exemple concret, j'ai toujours mes backups de mes vieux sites. Me suffirait d'expliquer chaque ligne que tu puisse y voir plus clair. Personnellement je me suis inspiré beaucoup d'internet pour trouver ma façon de coder.
PMEmail Poster
Top
Sybler
Ecrit le : Mardi 14 Septembre 2010 à 15h41
Quote Post


Ouf
*

Groupe : Membre
Messages : 453


Dans vos proposition (que j'utilise d'ailleurs, donc ce n'est pas mauvais), je vois un problème potentiel.

Si les joueurs doivent interagir avec les valeurs "actuelle" d'un autre joueur qui ne s'est pas connecté, et bien, les valeurs ne seront pas à jour, puisque le joueur ne s'est pas connecté. (C'est joli mes phrases tongue.gif )

Deux solutions:
- Utiliser un CronJob pour mettre à jour les comptes à intervale fixe. Ce sera fait coté serveur, et complètement indépendant des connexions des joueurs
- Chaque joueur effectue une remise de points pour X joueurs lors de sa connexion. Si possible, les X plus "en retard" sur leurs remise de points.


,,,, cependant si la dernière solution semble géniale, je dois admettre que, pour l'utiliser, j'éprouve certains problèmes. Initialement je l'avais choisi car dans mon jeu, les remises sont aux jours, et non aux heures ou par minute. Alors on voulais éviter les situations du genre: La remise est fixée à 22h, alors à 21h59 le joueur dépense d'un coupla totalité de ses points pour attaquer un autre joueur, et 2 minutes plus tard il re-dépense la totalité se ses points. ... le mode de fonctionnement rend l'heure exacte de la remise légèrement aléatoire, ce qui préviens assez bien ce problème.

Sauf qu'il arrive parfois que le temps de login soit un peu long (quelques seconde), et que l'utilisateur interrompe le processus (ferme son navigateur). Étrangement, --et je ne me l'explique pas tout à fait bien-- , j'ai constaté des cas de remises partielles. Des comptes qui demeure étiqueté "remise en cours".

Donc bref, si l'utilisation de CronJob ne te pose pas de problème de portabilité, c'est selon-moi une excellente facon de faire.


--------------------
user posted image
PMEmail PosterUsers Website
Top
Murthos
Ecrit le : Mercredi 20 Octobre 2010 à 21h34
Quote Post


Pro
*

Groupe : Admin
Messages : 171


Je sais que le topic est un peu âgé mais si comme moi certains relisent parfois les anciens topics pour retrouver des infos. J'ajoute une petite mise à jour :


QUOTE

[...]
Utiliser un CronJob pour mettre à jour les comptes à intervale fixe. Ce sera fait coté serveur, et complètement indépendant des connexions des joueurs
[...]
Donc bref, si l'utilisation de CronJob ne te pose pas de problème de portabilité, c'est selon-moi une excellente facon de faire.
[...]


OVH intègre maintenant cette option directement dans les services offerts sur ses hébergements mutualisés !

Ce message a été modifié par Murthos le Mercredi 20 Octobre 2010 à 21h35
PMEmail Poster
Top
Lunar
Ecrit le : Mercredi 20 Octobre 2010 à 23h04
Quote Post


Pro
*

Groupe : Membre
Messages : 143


Merci pour l'information, cela servira peut-être à d'autre en effet, pour ma part on a décider de rester un petit jeu, cela nous permet plus de liberté que les gros en PHP, même si cela demande plus de travail et de gestion...

Quoi qu'il en soit, merci pour les prochains qui chercheront des infos sur ce sujet biggrin.gif


--------------------
Lunar
Administrateur du pbem L'univers du Flow
PMUsers Website
Top
Rannios
Ecrit le : Vendredi 10 Décembre 2010 à 23h13
Quote Post


Newbie
*

Groupe : Membre
Messages : 3


Bonjour,

Je suis moi aussi créateur d'un jeu en PhP, et je pense comme dit précédemment que c'est à la portée de toute personne motivée.

Pour le système de passage des tours, j'ai stocké la date de rafraîchissement de la page dans ma bdd (en DateTime et non en Timestamp), et à chaque chargement de page je regarde si X minutes/secondes/heures/jours sont passés (avec X durée d'un tour).

Ensuite je calcule l'augmentation de points, ressources etc pour chaque joueur.

Le problème : cela ne vaut que pour un petit nombre de joueurs, sinon ça va mettre très longtemps à être chargé !
(problème que je ne rencontre malheureusement pas biggrin.gif )

Bon courage,
Rannios


--------------------
user posted image
PMEmail Poster
Top
Sinclair
Ecrit le : Mardi 11 Janvier 2011 à 10h52
Quote Post


Pro
*

Groupe : Membre
Messages : 133


Bonjour, je me greffe sur ce sujet ayant le même type de problématique à gérer.

Dans mon jeu, le temps passe plus vite : 1 jour réel == 1 mois en jeu
Chaque action effectuée par un joueur aura une date de fin. Date à laquelle il sera informé du résultat de son action.

La question que je me pose est donc :

- faut il stocker en BD des temps "réels" (timestamp) et convertir systématiquement à l'affichage en temps "jeu"

- ou dois-je stocker en BD des temps de "jeu", ce qui me demande de convertir time() en temps jeu pour checker si les actions sont accomplies.

Vous voyez le dilemme ?

J'aimerai partir du bon coté biggrin.gif

<EDIT>

Par exemple, les personnages du jeu vont naitre, vieillir et mourir. Je dois donc stocker leurs date de naissance en base. Mais sous quel format ?

...

A la réflexion, ce sujet touche l'intégralité de mon projet. Il faut que je puisse régler l'écoulement du temps. En 24h, les personnages vont agir et vieillir sur une période de 1 et 12 mois en temps de jeu. Il faut donc que je trouve un moyen de stocker les "time" de façons à ce que lors qu'un changement d'échelle, les données restent stables.

Vous voyez le soucis ?

... j'attends votre aide car mon esprit est un peu embrouillé là sweatdrop.gif

Ce message a été modifié par Sinclair le Mardi 11 Janvier 2011 à 16h40


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
Mindiell
Ecrit le : Mercredi 09 Mars 2011 à 10h34
Quote Post


Kid
*

Groupe : Membre
Messages : 48


Tu as vraiment besoin de 1 jour = 1 mois ?
Tu pourrais envisager 1 jour = 24 jours ?
Si oui, il suffit de dire qu'un jour équivaut donc à une heure, non ?


--------------------
Mindiell
Rôliste - Troll - Nain - etc...
Créateur de jeu
PMEmail Poster
Top
Sinclair
Ecrit le : Mercredi 09 Mars 2011 à 10h38
Quote Post


Pro
*

Groupe : Membre
Messages : 133


Ca y est, j'ai fini de développé cet aspect.

Ca se gère très bien en stockant des timestamp en base.

N'hésitez pas à me contacter si vous avez des soucis sur ce point


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
« Sujets + anciens | Programmer | Sujets + récents »

Reply to this topicStart new topicStart Poll