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

PHP & Base de données Discussion :

Ressources actualisées toutes les secondes pour un jeu par navigateur


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Par défaut Ressources actualisées toutes les secondes pour un jeu par navigateur
    Bonjour,

    Je recherche des informations sur un problème de conception, je développe actuellement un projet de jeu de navigateur personnel en PHP / My sql.

    Je vais essayer d'être clair et précis.

    Je suis un développeur basique C / C ++. Je me suis formé en PHP et je démarre un projet personnel pour développer un jeu en temps réel. Le joueur doit donc augmenter ces mines pour qu'il produise plus de ressources.

    J'ai pour le moment:


    Nom : PZYEX.png
Affichages : 85
Taille : 196,3 Ko


    J'ai donc 4 tables dans la base de données.

    t_customer : Ce qui me permet d'insérer un joueur avec ces données personnelles.
    t_zone : qui représente la maison du joueur (ville, planète ..)
    t_resources : qui représente les ressources actuelles du joueur.
    t_mine : qui représente les niveaux des différentes mines.

    Pour la partie code PHP:

    J'ai pour le moment:

    Nom : n99Hv.png
Affichages : 81
Taille : 309,4 Ko

    1 classe c_connectDb qui me permet de me connecter à ma base de données et d'effectuer des requêtes.
    1 classe c_customerSQL qui pointe vers la table t_customerSQL qui me permet de gérer les informations utilisateur.
    1 classe c_zone qui pointe vers le tableau t_zone qui me permet de gérer les informations concernant la zone des joueurs (planète, village ...).
    1 trait t_mine qui pointe vers la table t_mine.
    1 Le trait t_resources pointe vers la table t_resources.
    Ma classe c_customerSQL hérite de la classe c_zone.

    Ma classe c_field hérite de la classe c_connectDB.

    Ma classe c_zone utilise le trait t_mine.

    Ma classe c_field utilise le trait t_resources.

    J'espère avoir été assez précis sur mon code.

    Alors maintenant, je voudrais pouvoir mettre à jour ma table t_resources en temps réel ainsi que l'affichage sur le navigateur du joueur. Par exemple, le joueur peut produire 100 000 ressources par heure. Vous devrez donc mettre à jour les ressources dans le navigateur du joueur chaque seconde pour mettre à jour les ressources de +28. (100 000 / (60 * 60)) (Ressources / (Heure * Secoindes))

    Je voudrais savoir comment m'y prendre avant de lancer ma tête baissée dans le code.

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Je ne pense pas qu'il soit nécessaire de mettre à jour ta base en permanence.

    Prenons le cas le plus simple , l'utilisateur n'est pas connecté. Sa mine devrait produire des ressources. Sauf que c'est complètement inutile de mettre à jour une donnée dont on à pas besoin.
    Donc dans ta table représentant ta mine , je garderais simplement une date de la dernière mise à jour.
    Dès qu'on à besoin de faire quelque chose avec cette mine , on met à jour ses ressource basé sur la dernière date et on réalise ce quelque chose.

    Exemple : Ma mine produit 100 ressources par heure. La dernière mise à jour de la mine date d'il y'a 4h , je lui rajoute donc 400 ressource avant de faire quoi que ce soit.

    Maintenant le cas de l'utilisateur connecté.

    D'un point de vue affichage , tu peux faire ce que tu veux puisque tout se passe coté client. Si tu veux avoir un compteur qui s'incrémente toutes les secondes pour qu'il ai un affichage précis , pas de problème.
    Et encore une fois c'est seulement au moment où il voudra utiliser ces ressources qui tu mettra a jour l'état réel de ta mine.
    De cette manière tu utilises au minimum ton serveur, il ne faut juste pas se baser sur les donnée coté client pour réaliser des actions puisqu'elle peuvent être altérées.

    Donc pour résumer :
    - Pendant la nuit , pas d'utilisateur rien ne se passe.
    - Mon utilisateur se connecte , je met à jour les ressources en fonction de la dernière date de màj
    - Tant que mon utilisateur ne fait rien , je ne met à jour que l'affichage coté client , la bdd n'évolue pas.
    - Si l'utilisateur veux utiliser des ressources , je met à jour les valeurs en fonction de la dernière date et j'autorise (ou non) l'action de l'utilisateur.

    Il faut bien comprendre qu'on est plus en mode C++ ou ton executable tourne en permanence et où tu peux te permettre de réveiller des thread pour réaliser certains actions.
    Une fois ton script php executé il n,'existe plus. Réaliser des actions à intervalle régulier passe forcément par des cron donc on les évites le plus possible
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Par défaut
    Merci de ton analyse et de ta réponse rapide.

    J'ai encore quelques questions :

    "d'un point de vue affichage , tu peux faire ce que tu veux puisque tout se passe côté client. Si tu veux avoir un compteur qui s'incrémente toutes les secondes pour qu'il ait un affichage précis, pas de problème" :
    - Comment procéder a la réactualisation de l'affichage côté client ? via de l'AJAX ? en utilisant une boucle infinit ?
    - Quelle technologie utilisée ? est-il possible de faire tout en Php ? ou faut-il obligatoirement rajouter du code Javascript et/ou AJAX j'ai aussi entendu parler de web socket... ?

    Merci encore il ne me reste plus beaucoup de questions à présent !

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Coté client c'est forcément javascript.

    Ton client se connecte , tu récupères la va leur de ressource (via ajax c'est possible mais pas obligatoire), tu passes cette valeur au javascript et ensuite une simple boucle :

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    const ressourceUpdateLoop = setInterval(() => updateResourceDisplay(), 1000);
    //Arrêt de la mise à jour quand on veux
    clearInterval(ressourceUpdateLoop);

    Reste alors à définir la fonction updateResourceDisplay() qui fera la mise à jour de l'affichage (mais pas de la bdd)

    Seulement quand tu voudras agir sur la ressource (en consommer par exemple) tu feras une requête au serveur du genre :
    - Je veux utiliser 500 ressources
    - Le serveur reçois la demande , met à jour la bdd en fonction de la dernière date de màj
    - Vérifie que la demande est légitime (est ce que j'ai assez de ressource , suis je la bonne personne , etc ...)
    - Le serveur répond Ok (ou pas) ainsi que la dernière bonne valeur de ressource pour resynchro le client.

    Tout cela veux dire que ton UI coté client est potentiellement "hackable". Par exemple si l'utilisateur modifie des ressources , le bouton permettant l'action pourrait se débloquer. Mais l'action sera refusé par le serveur car c'est lui la source de vérité.

    Le gros avantage c'est que tu as un serveur qui ne fait pas grand chose la plus part du temps et peu donc acceuillir énormément de joueur , alors que si tu devais tout mettre à jour en permanence tu saturerais très vite le serveur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    c++/Qt
    Inscrit en
    Septembre 2017
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : c++/Qt

    Informations forums :
    Inscription : Septembre 2017
    Messages : 27
    Par défaut
    C'est super !! Merci c'est exactement ce qui me manquait ! j'ai bien compris le principe!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] actualiser une valeur toutes les secondes
    Par nawal59 dans le forum Interfaces Graphiques
    Réponses: 8
    Dernier message: 15/10/2010, 10h53
  2. Frameworks pour un jeu par navigateur
    Par Roy Miro dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 24/04/2010, 14h53
  3. changer la couleur de mon Form1 toutes les secondes
    Par stacker_junior dans le forum C++Builder
    Réponses: 9
    Dernier message: 10/05/2006, 19h36
  4. Requete SELECT : prendre toutes les valeurs pour 1 champ
    Par fab22montpellier dans le forum Requêtes
    Réponses: 1
    Dernier message: 02/09/2005, 09h12
  5. [Threads]Comment les organiser pour un jeu du serpent ?
    Par Pill_S dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 11/05/2004, 15h22

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