IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction à retardement ?


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut Fonction à retardement ?
    Bonjour,

    En ce moment je développe un jeu web en php avec un ami. On se trouve confronté à un problème.

    Comment faire en sorte que quand un joueur veuille construire un bâtiment ou envoyer une armée, l'action s'effectue au bout d'un certain temps.

    Je pense par exemple à des jeux comme travian ou Ogame.

    Je dois utiliser seulement du php? des tâches CRON ? je sais pas trop quoi faire =/

    Merci d'avance.$

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Pour bien te repondre il faudrait connaitre les mecanismes de ton code.
    On pourrait imaginer par exemple qu'une action ait une date de début de validité.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Bah, le problème c'est que mon code pour construire un bâtiment c'est juste une requête sql qui vérifie si le mec a assez de sous et si oui ben il exécute.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Et donc tu veux que le joueur puisse planifier son action pour un jour ultérieur c ca ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Voilà, mettons qu'une usine mette 5 minutes à se construire, je veux qu'il puisse donner l'ordre de construction, fermer son navigateur, revenir 4mn30 après et qu'il soit marqué temps restant: 00h00mn30s et qu'il exécute l'action quand le timer est arrivé à 0

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est different alors.

    dans la base tu enregistres ton action et sa date de début.
    Quand l'utilisateur revient, tu as juste a comparer l'heure actuelle avec date de début + temps necessaire.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Oui mais le problème c'est qu'avec cette méthode, si l'utilisateur ne reviens pas, son bâtiment ne sera jamais construit.

    Ça pose problème car par exemple dans le jeu, si un joueur met des soldats à entraîner, mettons qu'ils vont mettre 10mn à s'entrainer. Il quitte son navigateur et reviens 15 minutes après.
    Seulement un autre joueur l'attaque 12minutes après son départ, sa ville sera amputée des armées qui devraient être terminées mais qui ne le seront que lorsqu'il sera revenu 3mn plus tard ...

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tout dépend comment ton jeu est articulé.
    L'attaque de l'adversaire peut provoquer le calcul de l'état de l'attaquant.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Donc le principe c'est que c'est les actions des joueurs qui recalculent leur constructions, attaque ou quoi que ce soit d'autre...

    C'est vrai que j'avais pas envisagé cette hypothèse.

    Par contre je vois pas la tête de la fonction qui permettrais de recalculer l'état de l'attaqué. La date du début du timer serait enregistrée dans une base de donnée alors ? Cette base ne servirais qu'à cela ?

  10. #10
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 48
    Par défaut
    Pas base de donnée pardon, je voulais dire table.

    J'ai un peu de mal avec les dates, il faudrait que j'utilise les timestamp ?

  11. #11
    Membre éprouvé
    Inscrit en
    Juin 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Juin 2009
    Messages : 104
    Par défaut
    hello,

    je pense aussi qu'il faut utiliser la technique de l'utilisateur - nettoyeur :

    vu que finalement on se moque bien de savoir en général si un joueur possède ou non un objet, à moins qu'on veuille précisément le savoir (combat / voir sa ville), et dans ce cas là, le joueur qui fait l'action active la fonction "auto-wash" de vérification et si nécessaire construction.

    une table "action" : (remplie par la demande de construction)
    qui contiendrait :
    id_joueur
    id_objet
    debut_construction
    temps_construction
    fin_construction (= debut_construction + temps_construction)
    statut (0 / 1)


    et de rechercher les "actions" dont "etat" = 0 (en attente) ET "fin_construction" <= à l'instant présent

    pour les résultats :
    créer l'objet (ou incrémenter le nombre)
    passer le statut à 1 (ou effacer la ligne)

    Par contre, il faut faire attention à la chose suivant :
    que se passe-t-il si deux joueurs attaquent par exemple la même ville à la micro seconde près ?

    en espérant avoir été utile,
    Pat

Discussions similaires

  1. Fonction mail() retard selon navigateur !
    Par milman dans le forum Langage
    Réponses: 9
    Dernier message: 17/06/2011, 17h19
  2. [Dojo] Appel à retardement d'une fonction: dojo.Deferred?
    Par tapoutapou dans le forum Bibliothèques & Frameworks
    Réponses: 9
    Dernier message: 25/06/2010, 11h15
  3. Fonction de transfert d'un retard pur
    Par bendesarts dans le forum Signal
    Réponses: 1
    Dernier message: 26/11/2009, 14h44
  4. 2H de Retard avec la fonction DATETIME("now") ?
    Par mak972 dans le forum SQLite
    Réponses: 6
    Dernier message: 29/08/2009, 13h20
  5. setTimeout Retardement de fonction
    Par tkwebch dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/09/2006, 10h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo