Kommunauty
Connexion
Inscription

Compte à rebours en PHP


Courroux Messages : 2216

Salut,

bon j'ai un projet en cours et j'ai commencé un peu le développement de celui-ci. Il s'agit d'un jeu en ligne et j'ai une ébauche de la construction des bâtiments.

Cependant, je sèche sur le fait qu'il faille intégrer un compte à rebours avant que la requête qui ajoute le bâtiment au joueur ne s'effectue.

En fait, c'est la première fois que je développe ce type de système et je ne sais même pas comment organiser ma BDD. Actuellement, j'ai une table avec toutes les infos sur les bâtiments dont le temps requis pour la construction que j'interprète en seconde. J'ai une deuxième table avec la liste des bâtiments construits et leur niveau.

Voilà j'aimerai si possible savoir comment est ce que vous imagineriez ce système de compte à rebours et ce qu'il faudrait que j'ajoute en fonction dans la base de donnée.

jeudi 4 octobre 2012

Kearz Messages : 261

Moi j'aurais une table qui enregistre l'heure du passage de niveau du bâtiment. Et donc par calcul t'as l'heure de fin.

Après si tu veux afficher au joueur un décompte en même temps ça semble plus complexe. Par contre si t'affiche juste 'bâtiment construit à 19h' c'est largement suffisant.

jeudi 4 octobre 2012 (Dernière édition lundi 8 octobre 2012)

Courroux Messages : 2216

Le problème c'est qu'avec ton système, la requête ne s'exécutera que si la personne viendra sur la page. Il faudra donc qu'elle revienne deux fois:

-Une fois avant afin d'ajouter le bâtiment à la queue

-Et une autre fois afin que le script vérifie si le temps requis a bien été respecté pour la construction et donc lancer la requête qui ajoute le bâtiment au joueur.

Il faudrait donc que ça s'exécute automatiquement, j'avais pensé à Cron mais bon, je sais pas si c'est adapté à ça, si ça sert vraiment à ça et puis j'espérais ne jamais l'utiliser étant donné que je ne sais pas comment le manipuler, mais avec un jeu en ligne, ça semble inévitable.

Bref, tu pourrais juste un peu éclaircir ta démarche afin que je sache vers quoi m'orienter ?

Merci encore

vendredi 5 octobre 2012

Ideophage Messages : 115

Bonjour,

D'après ce que j'ai compris, je crois que tu as mal compris ce que voulait dire Kearz. Pour savoir si le bâtiment est finis d'être construit, il suffit de comparer l'heure de fin de construction (enregistrée lors du début de la construction - je trouve ça mieux que l'heure de début) et l'heure actuelle.

edit :

Moi j'aurais une table qui enregistre leur du passage de niveau du bâtiment.

C'est "l'heure", pas "leur". (passage de niveau ? Je croyais qu'on parlait de construction. M'enfin, c'est la même chose)

Sinon, pour ce qui est d'afficher un compte à rebours, un peu de js suffirait.

vendredi 5 octobre 2012 (Dernière édition vendredi 5 octobre 2012)

Courroux Messages : 2216

Ouais en fait, j'ai pas du tout compris

Je ré-explique: En fait, je voudrais que lorsque le joueur arrive sur la page index.php?page=construction&idbatiment=X , une requête s'exécute et le bâtiment est ajouté à la liste des constructions en attente dans la table "queue_bat".

Le problème c'est comment une fois que le bâtiment est ajouté dans la liste des constructions en attente dans la BDD, effectuer cette construction et donc planifier une requête qui ajouterai le bâtiment au joueur au bout de 20 secondes plus tard par exemple ?

samedi 6 octobre 2012

Ideophage Messages : 115

Une solution simple est de faire comme suit :

  • Le joueur demande à construire un bâtiment.
  • La requête est reçue, le bâtiment est ajouté aux bâtiments du joueur : "nom", (date de fin de construction).
  • Un autre joueur demande à voir les bâtiments que ce joueur a fini de construire (pas en construction, donc).
  • La requête est reçue, on renvoie la liste des bâtiments du joueur en enlevant ceux qui ont une date de fin de construction inférieure à la date actuelle.

Une solution alternative serait de traiter ta "queue_bat" à chaque fois qu'on veut voir les bâtiments du joueur, mais je trouve ça moins bien.

Sinon, je pense qu'il faut un serveur dédié pour effectuer des planifications tâches planifiées comme ça (il faudrait un programme qui tourne en permanence - et en plus, je ne pense pas que php soit adapté à ça, mais peut-être).

samedi 6 octobre 2012

SiMax Messages : 7572

Salut !

J'avais utilisé la même technique que propose Ideophage sur un projet similaire.

En fait dans la pratique ça marche comme un interrupteur "bâtiment existant/bâtiment en construction". Concrètement, tu fais une seule base : les bâtiments existants avec un champ "date_construction". Si cette date_construction est inférieure à time(), ça veut dire que c'est en construction. Si c'est supérieur, ça te donne la date précise de construction.

Pas besoin d'actualiser la BDD comme ça

samedi 6 octobre 2012

Courroux Messages : 2216

Je vois... En gros je suis parti à créer 36 000 tables, à voir comment planifier avec cron, à séparer en plusieurs fichiers, et puis au final vous me sortez quelque chose qui se fait en deux lignes.

Je suis vraiment con

Je vais tester ça et je vous dis ce qui se passe. Merci

samedi 6 octobre 2012

Courroux Messages : 2216

Une question encore basique mais j'ai jamais été dans ce genre de situations avec les date et le besoin de les enregistrer en seconde. Généralement un NOW() suffisait.

Bref, je voulais savoir comment enregistrer une date en seconde. Je sais que c'est faisable avec time() mais la requête ne fonctionne pas. Que je la mette dans une variable ou pas, la requête s'effectue bien mais le champs date_construction reste sous cette forme: 00-00-0000 00:00:00

mercredi 10 octobre 2012

SiMax Messages : 7572

Il faut changer le format du champ. Là tu dois avoir un champ date. Comme tu vas enregistrer un nombre décimal d'une dizaine de caractères il faut mettre un petit VARCHAR comme type de donnée MySQL

mercredi 10 octobre 2012

Page suivante »