JeuWeb - Crée ton jeu par navigateur
Compte rebours script PHP/mySQL Besoin aide sinon suicide - 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 : Compte rebours script PHP/mySQL Besoin aide sinon suicide (/showthread.php?tid=1213)

Pages : 1 2


Compte rebours script PHP/mySQL Besoin aide sinon suicide - Cartoristal - 19-09-2007

Bonsoirs à tous,

Alors sa va faire 3h30 que je suis sur google entrain de chercher:

Compte rebours script php ogame mysql timestamp mktime ETC...

Je ne voulais pas poster ici de peur d'avoir des réponses trop évasives mais je pense que de toute façon va falloir que je trouve une solution.

Je veux créer un jeux PHP j'ai déjà codé pas mal de choses.
Sa fait environ 6mois que je suis dessus ( 2 ans mais avec de nombreuses pauses liées au découragement ).
A chaque fois j'allais de plus en plus loin.
Mais depuis 2 ou 3 moi j'ai un petit blocage.

Je vous explique:


Il faut que lorsque le joueur clique sur le bouton 'construire'
un compte à rebours se mette en place.
A la fin de ce même compte à rebours un script php s'exécute ( on retire X ressources, on ajoute le bâtiment à la base etc ... )

J'ai trouvé pas mal de choses mais souvent:
Si l'on change de page sa recommence à zéro, de même si l'on rafraichit.

Je pense donc qu'il faut se pencher vers l'utilisation de timestamp et la base de donnée ( on l'enregistre on soustrait etc )
Mais après des heures d'essais j'avouerais que je bloque sérieusement.
Je fais donc appel à votre aide pour me conseiller et me renseigner si vous aussi, propriétaire d'un jeux php, vous auriez un script à me lancer que je pourrais remanier ( mais au moins je comprendrait comment faire ).

( le fais qu'il faille rafraichir pour avoir le bon chiffre ne me dérange pas ...
Mais surtout avoir quelque chose dans le gere
Il reste 2h12 avant construction de Mine lvl 1
et 2 minutes après le mec revient :
Il reste 2h00 avant construction de Mine lvl1
Et 2h après
...
( et la mine est rajoutée à la base )
( je peux en faire bcp mais c'est le script du comtpe à rebours + php qui me manque je pense. )

J'espère avoir moultes réponses et ne pas avoir été trop long.

Cordialement,
Un désespéré.


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - denisc - 19-09-2007

javascript... Voilà ce qui est utilisé dans OGame... C'est bien fait
Code :
function t(){
  v = new Date();
  n = new Date();
  o = new Date();
  for (cn = 1; cn <= anz; cn++) {
    bxx = document.getElementById('bxx' + cn);
    ss = bxx.title;
    s = ss - Math.round((n.getTime() - v.getTime()) / 1000.);
    m = 0;
    h = 0;
    if (s < 0) {
      bxx.innerHTML = "-";
    } else {
      if (s > 59) {
    m = Math.floor(s/60);
    s = s - m * 60;
      }
      if (m > 59) {
    h = Math.floor(m / 60);
    m = m - h * 60;
      }
      if (s < 10) {
    s = "0" + s;
      }
      if (m < 10) {
    m = "0" + m;
      }
      bxx.innerHTML = h + ":" + m + ":" + s + "";
    }
    bxx.title = bxx.title - 1;
  }
  window.setTimeout("t();", 999);
}

et dans ta page, tu mets:
Code :
<div id='bxx9' title='34696'></div>
en fait l'attribut title contient le temps en secondes restant pour le cpt à rebour avec l'id bbx suivi d'un numéro de 1 à anz

Lorsque tu as affiché tous les comptes à rebours, alors hop, tu balances un autre bout de code pour lancer le décompte :
Code :
<script language=javascript>anz=14;t();</script>
où anz=le nombre de comptes à rebours...

TRien ne t'empêche ensuite de modifier le code pour que la page se recharge par exemple lorsque l'in des comptes à rebours est à 0 (remplacer la ligne bxx.innerHTML = "-"; par un rechargement de la page suffirai !)


et sinon, paix à ton âme!


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Bob le Pointu - 19-09-2007

En général, les comptes à rebours sont des illusions.

En théorie on procède ainsi :

On stocke dans une mémoire permanente l'évènement «constuire un bâtiment» et l'heure à laquelle la construction est censée être terminée «maintenant + X minutes» par exemple.

Ensuite, il faut consulter la liste des évènements et vérifier s'il faut les exécuter.
Ceux qui le peuvent utilisent un gestionnaire de tâche, généralement cron.

Les autres consultent la liste à chaque fois qu'une page du site est consultée.

------
[Edit]: J'avais mal lu la question apparement. Pour afficher un compte à rebours en JS, utilise la technique de denisc. Le temps restant est calculé selon : «heure de déclenchement» - «maintenant».


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Findel - 19-09-2007

Le plus simple serait sans doute d'utiliser la fonction time() et effectivement de stocker ça en base de données.

Je m'explique : Si tu veux qu'une construction prenne deux heures à s'effectuer. Elle sera donc terminée dans time() + ( 2 [heures] * 60 [minutes] * 60 [secondes]), plus qu'à mémoriser ça :

@mysql_query('INSERT INTO constructions (idjoueur, idbatiment, termine) VALUES ('.$_SESSION['idjoueur'].','.$idbatiment.','.(time()+7200).')');

Pour savoir si le joueur a des constructions en cours et combien de temps il reste :

if ($requete = @mysql_query('SELECT idbatiment, termine FROM constructions WHERE idjoueur = '.$_SESSION['idjoueur'])) {
while ($data = @mysql_fetch_assoc($requete)) {
if ($data['termine'] < time()) {
// construction terminée
echo 'Le batiment ['.$data['idbatiment'].' est terminé';
} else {
echo 'Le batiment ['.$data['idbatiment'].' est en construction, il sera terminé le '.date('d/m/Y H:iConfused', $data['termine']);
}
}
}

Si tu veux que le décompte se fasse de visu sur la page, il te reste à mettre un peu de javascript et ça devrait le faire


Hihi, les réponses simultanées c'est fun ! Tu as la partie javascript en premiere réponse, une explication théorique de la partie serveur et mon message pour illustrer cette explication Smile


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - denisc - 19-09-2007

... Et chez ton client tu renvois le TimeStampFinConstruction - TimeStampActuel
Associé au javascript ci-dessus, tu donne bien l'illusion d'un compte à rebours Smile


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Cartoristal - 19-09-2007

HOHOHOOO !!

Voila j'ai saisit maintenant !

Bon beh je m'atelle de suite à ceci et je vous pond mon script avec peut-être encore quelques questions.
En tout cas je vous remercie !!
Sa me dépanne vraiment !
Merci encore :bisou::respect:


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - denisc - 19-09-2007

et oublie pas de voter pour Montcuq Big Grin


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Cartoristal - 19-09-2007

J'avouerais ne pas avoir compris ?!


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Byleth - 19-09-2007

^^ le monopoly squatte les villes de France, vote sur leur site pour que Montcuq en fasse partie ^^


RE: Compte rebours script PHP/mySQL Besoin aide sinon suicide - Cartoristal - 19-09-2007

Findel a écrit :Le plus simple serait sans doute d'utiliser la fonction time() et effectivement de stocker ça en base de données.

Je m'explique : Si tu veux qu'une construction prenne deux heures à s'effectuer. Elle sera donc terminée dans time() + ( 2 [heures] * 60 [minutes] * 60 [secondes]), plus qu'à mémoriser ça :

@mysql_query('INSERT INTO constructions (idjoueur, idbatiment, termine) VALUES ('.$_SESSION['idjoueur'].','.$idbatiment.','.(time()+7200).')');

Pour savoir si le joueur a des constructions en cours et combien de temps il reste :

if ($requete = @mysql_query('SELECT idbatiment, termine FROM constructions WHERE idjoueur = '.$_SESSION['idjoueur'])) {
while ($data = @mysql_fetch_assoc($requete)) {
if ($data['termine'] < time()) {
// construction terminée
echo 'Le batiment ['.$data['idbatiment'].' est terminé';
} else {
echo 'Le batiment ['.$data['idbatiment'].' est en construction, il sera terminé le '.date('d/m/Y H:iConfused', $data['termine']);
}
}
}

Si tu veux que le décompte se fasse de visu sur la page, il te reste à mettre un peu de javascript et ça devrait le faire

Alors encore une petite question.
Quand je charge la page il me met :
Le bâtiment mine est en construction, il sera terminé le 19/09/2007 23:36:07
Normal donc.
Mais à chaque fois que je recharge sa me rajoute quelques secondes...
( normal ... )
Mais comment faire pour que sa se décompte ?!
.date('d/m/Y H:iConfused', $data['terminé']); il va falloir que je retrousse la date donnée ici jusqu'à ce que j'obtienne zéro...
Tout en faisant en sorte que le compte à rebours ne reparte pas à zéro ...et continue même lors du déloggage et d'un leave de page Confused
Sa commence à me prendre le choux ce 'bout' de programme...