Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu en php et actions planifiées sur serveur

(ok mon titre est pas très clair)

    26 décembre 2005 à 13:45:47

    Voilà je bosse sur un projet de jeu de stratégie en php au tour par tour.

    Mais le problème vient justement du tour... En effet je sais qu'il est possible de mettre en place un système de tour qui passe automatiquement à une heure donnée, mais je ne sais pas comment faire ça.

    Peut-on planifier des actions sur la bdd ?? et cela se programme-t-il en php ??

    Je ne vois pas comment faire, à moins de se débrouiller pour faire effectuer l'intégralité des actions sur la bdd par le 1er joueur qui se connecterait après minuit, mais là c'est assez lourd comme système.

    Quelqu'un peut m'aider ??
    • Partager sur Facebook
    • Partager sur Twitter
      26 décembre 2005 à 13:48:18

      J'aimerais bien que tu précise la durée d'un tour, cela peut être utile pour que l'on te réponde ^^

      EDIT : Vu que tu réponds pas (tu peut peut être pas ^^ ) : utilise la fonction getdate (qui s'utilse avec un timestamp et renvoie un array) pour comparer au dernier tour effectué (tu conserve ça dans un fichier ou dans ta bdd). J'illustre un peu : Si l'heure est supérieure d'une à l'heure du précédent tour, un nouveau tour commence. Ou alors si, le jour actuel est le jour suivant comparé au dernier tour, alors un nouveau tour commence. Je sais pas si c'est très clair mais c'est pas facile à expliquer non plus ^^
      • Partager sur Facebook
      • Partager sur Twitter
        26 décembre 2005 à 14:03:23

        1 tour = 24 heures. Avec un passage à minuit.
        • Partager sur Facebook
        • Partager sur Twitter
          26 décembre 2005 à 14:06:39

          mettons qu'un tour dure 1heure : lorsque ta page est affichée, elle vérifit que le tour n'est pas terminé (si c'est le cas, elle calcule les résultats du tour passé). Tu dois donc enregistrer le timestamp du début de la partie, et vérifier que $time_diff = $time_debut - time(); est >60*60 (= 1h). Dans ce cas, le tour est fini.

          Il faut également que tu code un systeme de protection si un joueur ne joue pas (histoire que ca n'entraine pas un vilain bug parce qu'il n'y a aucun ordre a executé).

          Bonne continuation

          EDIT : le principe est le meme quelque soit la durée du tour :) . Le fait que l'actualisation se passe a minuit peut te simplifier la tache puisqu'il suffit de vérifier que l'heure est supérieur a minuit et que le tour n'a pas déja été résolu.
          Fait quand meme gaffe que 2tours peuvent passer sans qu'un joueur ne vienne sur ton site (et dans ce cas, ca risquerait d'en sauter un :-° ).
          • Partager sur Facebook
          • Partager sur Twitter
            26 décembre 2005 à 14:08:55

            Argh, juste quand j'édite mon message tu réponds ^^
            Je te donne un petit code d'exemple (on imagine que tu ai une bdd avec la date du dernier tour)

            $heuredtour=getdate($resultat["timestamp"]); // heure du dernier tour
            $timestamp=mktime();
            $heureactuelle=getdate($timestamp) ;

            if($heureactuelle["day"]>heuredtour["day"])
              { // ton script ici }
            else
              {echo 'Vous devez attendre qu\'un nouveau tour aie lieu.' ; }
            • Partager sur Facebook
            • Partager sur Twitter
              26 décembre 2005 à 14:26:07

              Voilà ce que vous me proposez est ce à quoi j'avais pensé, mais comme le dit lastsseldon cela nécessite qu'au moins un joueur passe chaque jour (bon en même temps il vaut mieux sinon mon jeu serait assez nul :p ).

              Mais si le jeu compte 400 joueurs, le temps d'opération ne risque pas d'être trop long, n'y a-t-il pas un risque que deux joueurs lancent simultanément le passage du tour (si on prend le cas inverse, c'est à dire si mon jeu est super-fréquenté ;) )??

              Donc apparemment pas de programmation d'actions sans connexion sur la bdd possible ??
              • Partager sur Facebook
              • Partager sur Twitter
                9 janvier 2006 à 17:58:22

                Bonjour à vous,
                (Et oui je ressort ce topis pour eviter un sujet déja aborder)

                J'ai à peu prés le même probléme que Rodrik:
                En fait je fait un jeu php ou le joueur a par exemple 1 mine qui produit à minuit 2tonnes d'or, ce dernier si il ne ce connecte pas pdt 5jours aura donc 10t d'or. Je voudrais dc savoir quelle est le code a utilisé ou du moins une idée de ce qu'il faut faire pour que lorsqu'il est minuit tous les joueurs ayant une mine d'or gagne 2t d'or.

                Merci d'avance pour vos reponses
                • Partager sur Facebook
                • Partager sur Twitter
                  9 janvier 2006 à 18:10:52

                  Citation : Rodrik

                  Voilà je bosse sur un projet de jeu de stratégie en php au tour par tour.

                  Mais le problème vient justement du tour... En effet je sais qu'il est possible de mettre en place un système de tour qui passe automatiquement à une heure donnée, mais je ne sais pas comment faire ça.

                  Peut-on planifier des actions sur la bdd ?? et cela se programme-t-il en php ??

                  Je ne vois pas comment faire, à moins de se débrouiller pour faire effectuer l'intégralité des actions sur la bdd par le 1er joueur qui se connecterait après minuit, mais là c'est assez lourd comme système.

                  Quelqu'un peut m'aider ??



                  Il faut utiliser les CRON :
                  http://www.webcron.org/
                  ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 janvier 2006 à 18:25:44

                    Super et merci sadenki, mais entre nous ce systéme marche t-il bien?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 janvier 2006 à 19:45:29

                      non, tu attend dix minute sur un gros site ( comme zordania )
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 janvier 2006 à 19:53:57

                        Moi perso à part avec un robot, je ne vois pas trop comment faire, parceque je ne comprend pas du tout ce que vous voulez faire avec le timestamp et tout. Mais merci, cela repond quand même à une question que je me posait.

                        Ps: Pour ceux qui savent faire, vous ne pourriez pas faire un ptit tuto ?
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 janvier 2006 à 20:39:28

                          Citation : rom1504

                          non, tu attend dix minute sur un gros site ( comme zordania )



                          Euhm Zordania != webcron ^^
                          Le serveur a des crons persos (sous linux on peut gérer ça) donc bon... pour expliquer quand même, sous zord il s'agit de requètes qui font une sie grande durée pour les tours
                          • Partager sur Facebook
                          • Partager sur Twitter
                            10 janvier 2006 à 17:52:37

                            En gros chez zordania il y a tellement de choses a faire pour la MAJ que ça prend tu temps ...
                            • Partager sur Facebook
                            • Partager sur Twitter
                              10 janvier 2006 à 19:16:30

                              Citation : Sadenki

                              En gros chez zordania il y a tellement de choses a faire pour la MAJ que ça prend tu temps ...

                              si ça se faisait pas toutes les heures mais plutot continuelement ça prendrais un peu plsu de puissance serveur en permanence mais y aurais pas 10 min d'attente à chaque heure...
                              • Partager sur Facebook
                              • Partager sur Twitter
                                10 janvier 2006 à 20:52:07

                                Citation : rom1504

                                Citation : Sadenki

                                En gros chez zordania il y a tellement de choses a faire pour la MAJ que ça prend tu temps ...

                                si ça se faisait pas toutes les heures mais plutot continuelement ça prendrais un peu plsu de puissance serveur en permanence mais y aurais pas 10 min d'attente à chaque heure...


                                Les actions peuvent être annulées donc répartir pour avoir une meilleure charge serveur servirait à rien ;) XF ne peux + optimiser, sinon il l'aurait déjà fait :)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  11 janvier 2006 à 15:53:46

                                  je ne comprend pas ce que ut veut dire par "les actions peuvent être annulée". Je ne remet pas en cause qu'il ai optimisé ou pas mais qu'l ai fait un mauvais choix dans le calcul à la fin des heures au lieu de tout le temps ( comme ogame par exemple )
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    12 janvier 2006 à 0:28:11

                                    je pensais que tu voulais parler d'un "précalcul des tours" et ogame je n'y joue pas donc je saispas comment ça marche, dsl
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      12 janvier 2006 à 18:42:53

                                      en fait ce qui se passe c'est que c'est pas par tour mais par date donc par exemple au bout de 2min le batiment est fini de construire et se construit ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        15 janvier 2006 à 9:09:20

                                        bonjour, moi je fait egalement un jeux en php^, cependant je ne sais pas comment faire un truc,
                                        site une personne achete metton une mine de metal , et je veux que cette mine ne soit acheter que apres exemple pour le niveau 2 sa soit 10 minutes , et que a chaque niveau sa augment, mais egalement , meme si le joueur se deconnect le temps avance encore, et comme sa si il revien sa aura quand meme avancer, alors jaimerais savoir comment faire , svp je sui bien desesperé

                                        merci :)
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          15 janvier 2006 à 9:50:58

                                          tu peux faire des calculs à son "retourd sur le site" avec des taches, par exemple tu met :
                                          mine de métal, 2, 1105842023
                                          ca c'est dans la bdd
                                          et quand il revient sur le site tu lui fait un calcul à partir de ca. Sachant qu'il faut 20minutes pour le construire tu fais 1105842023 + 20*60 et a partir de la tu prends le timestamp actuel, tu fais la différence et donc après tu peux faire un rapport d'objets créé pendant ce temps ci
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Jeu en php et actions planifiées sur serveur

                                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                          • Editeur
                                          • Markdown