JeuWeb - Crée ton jeu par navigateur
[Résolu] Probleme dans l'augmentation d'un niveau - 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 : [Résolu] Probleme dans l'augmentation d'un niveau (/showthread.php?tid=1114)

Pages : 1 2 3


[Résolu] Probleme dans l'augmentation d'un niveau - Angelko - 21-04-2008

Bonjour a vous codeur de jeu PHP. J'ai besoin d'aide
Il se peut que vous ne vouliez pas répondre a ma question et de se fait je pense que je vais avoir du mal a résoudre ce problème qui est je dois dire la base du jeu en PHP.

Je reste bloqué pour l'augmentation des niveaux.
J'ai fait plusieurs codes, j'ai essayé de passer autre certains bugs.
J'ai trouvé des solutions qui engendre de nouveaux bugs.
J'ai fais des recherches sur ce forum pour trouver des réponses mais en vain !

Alors je fais appel a vous !!
Ce que je veux ?

J'aimerai que vous m'expliquez comment faire pour augmenter le niveau d'un bâtiment ! Je sais c'est pas dur, un lien qui définie ( grâce a un $_GET )
$le_temps_de_construction=time()+60 ( 1min de construction)
puis dans le code un "echo" qui appelle la fonction compte a rebours, puis quand celle ci est finit elle augmente le niveau de 1 !! Mais ça ne fonctionne pas !!! disons que ça fonctionne mais a chaque fois que l'on charge la page le niveau augmente !!!

Bref aidez moi s'il vous plait !!
Expliquez moi comment faire !!


RE: Aidez moi - Ruz - 21-04-2008

ajax:
lancement en cliquant sur le lien (récupéré par JS)... compteur se met en route (pas de demande pour le moment) et affiche un compte a rebours. Quand il arrive a 0, départ de la requete et retour: ton batiment est lvl +1 et on rafraichit ce qu'il faut.

idée à chaud, pas forcément la meilleure.
note que si tu changes de page pendant la minute la construction se fera pas.

donc, pas la meilleure...
bon, 2e idée:
clic => JS + compteur 60s
1e requete immédiate: signale une évolution dans la bdd, avec lh'eure de fin.
...compteur 0
2e requete, et mise a jour.
deja plus mieux, y a une trace de la volonté d'évolution.

enfin, je doute pas qu'on te trouve une solution rapidement ^^


RE: Aidez moi - Angelko - 21-04-2008

pour quand on quitte la page est on reviens il faudrait enregistré le temps de construction et la fonction est active si le temps enregistré et plus grand que le temps réel !! donc il y a compte a rebours si il est finit ça augmente le niveau( c'est codé dans la fonction JS )

Voila a quoi j'ai pensé mais quand je refrech la page, ça augmente de niveau
mais ça ne fait pas appel a la fonction compte rebours donc je ne comprend pas pourquoi le niveau augmente de 1.

Ensuite je demande en gros un plan pour faire le code !!
En gros qu'est ce qu'il faut faire, je demande les grands titres !!


RE: Aidez moi - Belsion - 21-04-2008

1° à la demande de construction, enregistre dans la bdd l'heure de fin de la construction
2° au chargement de la page, récupérer l'heure de fin et calculer le delta avec le temps actuel pour faire afficher un compte à rebours
3° attendre la fin du compte à rebours et faire ce qu'il faut (envoi de la requête, rafraichissement de la page, rien)


Sinon tous les topic ici pourrait s'appeler "Aidez-moi", essaye d'être un peu plus clair dans ton titre la prochaine fois.

Je ne comprends pas vraiment ce que tu dis par:
Citation :puis dans le code un "echo" qui appelle la fonction compte a rebours,puis quand celle ci est finit elle augmente le niveau de 1

Tu es en train de dire que tu as un script php qui doit boucler pendant 60s, le temps que ton bâtiment soit fini?
Personnellement je te le déconseille. J'aurais plutôt tendance à vérifier au démarrage de la page s'il y a des bâtiments dont la construction est finie.


RE: Aidez moi - Kassak - 21-04-2008

J'utilise un compte à rebours aussi sur mon jeu ( but complètement différent mais ça revient au même).

Bref, lorsque le joueur clique sur le bouton attaque, j'enregistre le timestamp actuel en bdd, je démarre mon timer/compte a rebours, et je calcul la valeur du timestamp qui "arrêtera" le timer, ensuite le timer diminue de 2nd en 2nd normal, lorsque ce timestamp vaut le timestamp que j'ai trouvé, j'exécute mon script.

Ainsi, le joueur peut quitter le jeu, se déconnecter, actualiser 50 fois, changer de page, n'importe quoi, le compte à rebours ne changera pas, et le script de fin ne sera exécuté qu'une fois le compte a rebours fini..

Je sais pas si je suis clair?


RE: Aidez moi - Angelko - 21-04-2008




RE: Probleme dans l'augmentation d'un niveau - Ruz - 21-04-2008

document.getElementById("ici").innerHTML ="<a hrerf='test5php'>Retour</a> <?php niveau(); //fonction qui augmente le niveau ?>";

erreur sur ton lien, déjà ^^
<a hrerf => <a href

Sinon, les "select *" évite^^
Mais bon, je suppose que tu feras ca apres, comme le pseudo des requetes ^^

pour l'erreur, je regarde un peu plus dès que j'ai du temps.

EDIT: autre détail : tu ouvres et fermes deux connections à la BDD... pourquoi? (enfin 3)
ET EXACTEMENT LES MEMES requetes!!!! pertes pures de temps!!!! (et je comprend absolument pas l'intéret de la 2e, celle if ($_GET...))

Je suis complètement largué dans ton code Sad


RE: Probleme dans l'augmentation d'un niveau - Belsion - 21-04-2008

Citation : else
{
document.getElementById("ici").innerHTML ="<a hrerf='test5php'>Retour</a> <?php niveau(); //fonction qui augmente le niveau ?>";
<?php //ce que fait la fonction quand le compte a rebours est finit ?>
}

Dans ce cas, quoi qu'il arrive, au chargement de ta page tu vas appeler la fonction "niveau()". Tu ne peux pas faire un appel d'une fonction php dans un script JS.
Si tu regardes le code générer à ce niveau, tu auras ça:
Citation : else
{
document.getElementById("ici").innerHTML ="<a hrerf='test5php'>Retour</a>";
}

Tout au plus tu rafraichis automatiquement ta page et tu fais appel ta fonction si le temps_fin_construction > temps_actuel ou alors tu ne fais rien et tu attends que je le joueur rafraichisse lui-même la page.

Pour le reste de ton code, je n'ai pas le temps de regarder plus en détail, mais il y a moyen de faire mieux les choses au niveau de tes requêtes et de tes connexion à la bdd (une seule connexion au début et une déconnexion à la fin plutôt que 3 connexions).


RE: Probleme dans l'augmentation d'un niveau - Angelko - 21-04-2008

Ok pour le JS et la fonction reste !!

Mais alors comment faire appel a la fonction qui augmente le niveau ??
et ou le mettre dans la page ??


RE: Probleme dans l'augmentation d'un niveau - Belsion - 21-04-2008

Pourtant tu as fait la moitié du travail dans ton code Wink
Tu testes déjà si la construction n'est pas encore fini, il suffit de compléter la condition

Citation : if($donnees_joueur['temporairehopital']>$tempsactuel)
{
//...
}
else
{
//à toi de compléter
}