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


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

ceci ne marchera pas
car


if($donnees_joueur['temporairehopital']>$tempsactuel)
{
la on mais le compte rebours !!! ça ok !!
}
else
{
l'augmentation du niveau
}
mais a chaque fois que le joueur refresh, le niveau augmente car cette condition "$donnees_joueur['temporairehopital']>$tempsactuel" est vérifié kan y a plus de compte a rebours !!!

Ou alors j'ai toujours pas pigé !!


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

Rappelle toi quand tu étais jeune et que tu notais tes devoirs à faire dans ton agenda.

Tu ne refaisais jamais ce que tu avais déjà fais parce que tu le barrais ou que tu l'effaçais de ton agenda... Là c'est pareil, soit tu indiques dans ta base que c'est déjà fait, soit tu effaces ce qui as été fait.

Là tu as tout ce qu'il te faut pour arriver au bout.


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

Excuse moi c'est un peu flou !!
J'y réfléchirais mais je vois pas comment faire.
Peut être un booléen ( J'adore les booléens )! Tongue

Oui ça doit être ça ^^


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

C'est bon ça marche sauf que bon il faut que le joueur refresh tout seul mais bon ^^ perso c'est un bon début pour un test Tongue ^^ !

Merci beaucoup tous pour votre aide !! A l'avenir j'aurais surement encore besoin de vous jusqu'à ce que la première version de mon jeu sorte ^^ !!
Merci


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

Attendez ce n'est pas finit: voila ce que j'ai rajouté
Code PHP :
<?php 
if($_GET['construction']=="hopital")
{
mysql_connect("localhost","root","");
mysql_select_db("alex");
$table_joueur=mysql_query("SELECT * FROM joueur WHERE pseudo='Angelko'");
$donnees_joueur=mysql_fetch_array($table_joueur);
$temps_de_construction=time()+10;
//J'ai rajouté ici
$B_hopital=1;
mysql_query("UPDATE joueur SET temporairehopital='$temps_de_construction',B_hopital='$B_hopital' WHERE pseudo='Angelko'");
mysql_close();
}
mysql_connect("localhost","root","");
mysql_select_db("alex");
$table_joueur=mysql_query("SELECT * FROM joueur WHERE pseudo='Angelko'");
$donnees_joueur=mysql_fetch_array($table_joueur);
$tempsactuel=time();
//pour que le compte a rebours marche si jamais $_GET n'est plus égal a hopital
if($donnees_joueur['temporairehopital']>$tempsactuel )
{
$_tempsrestant=$donnees_joueur['temporairehopital']-time();
echo
'<script language="JavaScript">reste('.$_tempsrestant.');</script>';
}
mysql_close();
//J'ai rajouté ici
if (($donnees_joueur['temporairehopital']<$tempsactuel) && ($donnees_joueur['B_hopital']==1) )
{
niveau();
$B_hopital2=0;
mysql_connect("localhost","root","");
mysql_select_db("alex");
mysql_query("UPDATE joueur SET B_hopital='$B_hopital2' WHERE pseudo='Angelko'");
mysql_close();
}
?>


En gros le joueur doit se connecté s'il veut son niveau !!
Il n'y a pas un moyen pour que le niveau augmente même si le joueur n'est plus la ? ( ou alors dans tous les jeux PHP il faut se connecter pour avoir son niveau ?? )
De plus je ne comprends pas le joueur doit refrech deux fois !!


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

Moi pour avoir un semblant de temps réel, je met les scripts dans ton genre, du moins la requête finale dans le header, qui se lance a chaque clique, donc il suffit qu'un joueur soit connecté et qu'il clique pour mettre à jour tous les autres joueurs, ce qui permet d'avoir un classement un peu plus réel Wink


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

Faut utiliser un cron pour ça.
Si personne n'est là pour exécuter les scripts alors rien ne va se passer.
Tu peux toujours t'inspirer de ce tuto pour comprendre le mécansime: http://www.jeuweb.org/board/showthread.php?tid=530

Si le joueur doit rafraîchir la page, c'est simplement parce que tu exécutes ta construction à la fin de ton script, après ton affiche. Commence par tes traitements sur les données et fait l'affichage seulement après.

Sinon quelques conseils à la volée pour ta bdd. A priori tu n'utilises qu'une seule table avec des SELECT *, c'est pas, mais alors vraiment pas la meilleure solution.
Divise tes tables ça te simplifierais beaucoup de choses. Tu pourrais très bien avoir les tables suivantes
- membres (id_membre, pseudo,mail, pwd,...)
- batiments(id_membre, id_batiment, niveau...) (dans ce cas un batiment pas enregistrement, mais tu pourrais avoir l'intégralité des bâtiments du joueur dans la liste)
- batiments_encours(id_membre, id_batiment, temps_fin,...)
- liste_batiments(id_batiment, nom_batient, description,...)
Avec cette répartition, tu peux très facilement voir pour un joueur donné quels sont ses bâtiments en cours de construction, et quand la construction est achevée, il suffit de supprimer l'enregistrement de la table batiment_encours.

Ce n'est là qu'un exemple, des solutions il y en a énormément, mais tout mettre dans une seule table est à proscrire.
Va voir ce tuto: http://www.jeuweb.org/board/showthread.php?tid=2157 et il y en a encore d'autres qui traînent


Ensuite, au niveau des connexion/déconnexion à la bdd. Au lieu de faire une connexion avant chaque requête et de la refermer juste après, préfère faire une connexion au début de tes traitement et une déconnexion en sortie de tes traitements. Dans ton cas, tu ne devrais avoir qu'une seule connexion et une seule déconnexion. En continuant sur ce chemin, passe par des include ou des appels de fonctions pour les gérer. Là si tu utilise un autre utilisateur que "root" ce qui est souhaitable et même obligatoire quand ça sera en ligne) tu devras le changer dans tous tes scripts, en passant par des fonctions ou des include, tu n'auras plus qu'un fichier à modifier.



@Kassak: Imaginons que tu te retrouves avec 2.000 joueurs sur ton site, tu vas vraiment faire la mise à jour pour l'intégralité de tes joueurs. Si tes traitements sont simples ça va passer, mais si tu dois faire une boucle pour rentrer dans les détails de chaque joueur, tu risque d'avoir des petits soucis. Personnellement, j'ai opté pour une solution où chaque joueur met à jour son propre compte, et j'ai un cron qui fait une mise à jour générale toutes les heures


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

Merci pour ton aide Belsion tes conseils ne sont pas tombés dans l'oreille d'un sourds.
J'essayerai de me coder selon ça !!
Petit a petit j'avance ^^ !!
Même si j'ai pas trop compris l'histoire du "cron" lol

Encore merci pour vos conseils ^^


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

Belsion, en effet je ne m'occupe que des petits traitements, rien de vraiment énorme, pour tout le reste c'est par CRON, chaque heure ou chaque jour.

Angelko, un CRON, c'est un script que tu lanceras a intervalle régulier, toutes les minutes, les heures, 1 fois par jour, par mois etc...

Des sites sont spécialisé pour ça, moi j'utilise Online Cron, mais il y en a d'autre.

Pour te donner un exemple, dans ton script, tu te connecte a la BDD, tu fait une requête qui rajoute 10 points d'action à tous les joueurs, et tu le programme pour qu'il se lance chaque heure, ainsi toutes les heures tous les joueurs gagneront 10 points d'action.

Tu piges le système?


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

cron = exécution d'un programme ou d'un script à intervalle de temps régulier

Une liste de site proposant ce genre de service: http://www.onlinecronservices.com/