JeuWeb - Crée ton jeu par navigateur
[Resolu]: Guerre des titans : Gestions de BDD - 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 : [Resolu]: Guerre des titans : Gestions de BDD (/showthread.php?tid=4147)



[Resolu]: Guerre des titans : Gestions de BDD - Alnurn - 30-06-2009

Bonjour à tous !

Alors pour le moment, je suis sur un projet, avec un ami, de jeu dans le style Travian (sans vouloir faire aussi abouti ^^ ) : on est débutant en programmation. Disons que pour moi il s'agit plus d'un apprentissage.
Nom : Les Fils de Zeus
Epoque: Guerre des titans chez les grecs (mythologie)

Chaque joueur choisit au départ un Dieu ou un Titan plutôt qu'un peuple (du style Zeus, Kronos, Etc ).
Bon je ne vous fais pas le résumé complet du jeu, c'est pas le but.


Je rencontre un problème : pour l'instant j'ai fait des pages plutôt simples : inscription, connexion, etc, en php/mysql sans me préoccuper des graphismes ni de la gestion complète du jeu. Donc toutes les informations sur les joueurs, les ressources et armées est en BDD.
Le problème, c'est d'actualiser cette BDD en permanence en fonction des attaques, ou à heures fixes pour ajouter des ressources : en php, ca ne me parait pas faisable: une page php n'est chargée que si le client la demande non ?
Inversement, je commence à connaitre un peu le C, mais je ne sais pas comment je pourrais faire un programme qui vérifie, par exemple toutes les 10s, la base de données.

Sinon j'ai une solution en php, mais j'ai peur que ça fasse lourd (et le php n'est pas le langage le plus rapide qui soit ): inclure un champ timestamp dans les tables attaques, commerce, etc et vérifier sur certaines pages php si des actions doivent être faites, en fonction de ce timestamp (lol je m'embrouille, j'espère que c'est compréhensible Confused )

Donc est-ce que ça parait possible de faire toutes ces actions en PHP, et sinon comment gérer ça en C ou C++ ?


Merci pour votre aide !


RE: [En projet]: Guerre des titans : Gestions de BDD - My Hotel - 30-06-2009

La méthode avec le timestamp est celel qui est utilisée par presque tous les jeux où les ressources augmentent en "temps réel", et ce n'est pas si gourmand.
Par exemple, tu sais que le visiteur doit gagner 100 pierres/heure, or la dernière actualisation date de 30min, donc quand il affiche la page, tu lui crédites 50 pierres.

Alors qu'avec des crons, ou dans le même genre, tu fais augmenter ses ressources même pendant son absence. Au final, ça te fait plus de requêtes, parce que, en reprenant mon exemple, pendant son absence tu auras fait 30 requêtes(1 par minute), au lieu d'une seule lorsqu'il affiche la page.
Imagine le mec se connecte une fois par jour, tu actualise des milliers de fois inutilement ses ressources, et en plus, quand il est connecté, il ne voit pas ses ressources augmenter en temps réel, mais plutôt 1 fois par minute.

Je sais pas si tu m'as compris Wink


RE: [En projet]: Guerre des titans : Gestions de BDD - Zamentur - 30-06-2009

Sinon pour ce qui est des actions qui se déclencherait via un timestamp.
En fait je te conseillerai de faire une table event gérant le déclenchement des evenement.
Tes tables attaques et commerce feraient alors réference à event.

NB: sinon pour l'histoire des ressources(ou tout autres évolutions de donnée sans trop de calcul) il est possible aussi de créer des vues avec mysql, çà permet de simplifier les requêtes. Si il faut plus d'explication à ce sujet, je peux en donner, sinon il y a la doc de mysql


RE: [En projet]: Guerre des titans : Gestions de BDD - Alnurn - 30-06-2009

Bon bah ça me rassure: je vais donc utiliser cette technique. Merci pour ces précisions. Enfin je vais bien m'amuser quoi Wink

Hé bien pour les vues mysql, pour moi c'est du chinois Wink Pour l'instant, j'ai lu le site du zéro pour apprendre le php et les requêtes sql basiques, mais je ne sais pas ce que c'est que les vues. Est ce que c'est un autre nom pour quelque chose que je connais déjà, ou autre chose ? Je vais essayer de chercher.


EDIT: Je viens de voir un peu les vues, justement. Ca m'a l'air assez utile pour éviter des requêtes trop compliquées, mais je pense que je vais pas les utiliser, au moins au début : mes tables sont assez peu interdépendantes... quoique pour afficher sans problèmes certains trucs je vais peut être etre obligé de m'en servir... A revoir. Dans tous les cas ça va bien me débloquer ^^


RE: [En projet]: Guerre des titans : Gestions de BDD - Zamentur - 30-06-2009

Pour donner un exemple précis des vues et des ressources:
Il est possible d'avoir une table avec un timestamp et un nombre de ressource de départ, et d'y appliquer une vue afin d'obtenir directement les ressources actuels

Quand on veux faire une action utilisant des ressources il faut par contre utiliser la table, à moins que la vue ne soit disponible en écriture ce qui n'est pas forcément le cas.

Pour résumer une vue c'est un peu comme une requête enregistrée.


RE: [En projet]: Guerre des titans : Gestions de BDD - Alnurn - 30-06-2009

Etant donné que j'ai commencé sans les vues, et que ça ne va pas tellement simplifier la situation tous comptes faits, je vais continuer sans _autant rester dans ce que je connais sans trop de problèmes ^^ Et comme je vais aussi beaucoup écrire dans les tables...

Bah merci beaucoup pour votre aide, grâce à vous ça devrait bien avancer !!
Au départ je me demandais comment ça pouvait bien fonctionner en PHP: je pensais qu'il y avait un autre programme qui gérait les events. Finalement ça m'évite de devoir refaire tout ce que j'ai préparé ^^